Chromium Code Reviews| Index: common/cmd_cros_bootstub.c |
| diff --git a/common/cmd_cros_bootstub.c b/common/cmd_cros_bootstub.c |
| index 576bf59f884fa6da78e856ad9710fcac7715ef40..b7eab40383a4277f9738fb4d857548962bcfec6f 100644 |
| --- a/common/cmd_cros_bootstub.c |
| +++ b/common/cmd_cros_bootstub.c |
| @@ -35,11 +35,24 @@ |
| #define FIRMWARE_A 1 |
| #define FIRMWARE_B 2 |
| -int do_cros_bootstub(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| +int load_firmware(int primary_firmware, int boot_flags, |
| + void *kernel_sign_key_blob, uint64_t kernel_sign_key_size, |
| + int *firmware_index_ptr) |
| { |
| - int firmware_index, primary_firmware; |
| + return LOAD_FIRMWARE_RECOVERY; |
| +} |
| - /* Boot Stub ******************************************************** */ |
| +void jump_to_firmware(void (*rwfw_entry_point)(void)) |
| +{ |
| + debug(PREFIX "jump to firmware %p\n", rwfw_entry_point); |
| +} |
| + |
| +int do_cros_bootstub(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| +{ |
| + int status = !LOAD_FIRMWARE_SUCCESS; |
|
sjg
2011/03/01 05:13:41
Ick - this is odd. Perhaps just 0 for ok, -1 for e
Che-Liang Chiou
2011/03/01 08:45:22
Change it to LOAD_FIRMWARE_RECOVERY (since we shou
|
| + int firmware_index, primary_firmware, boot_flags = 0; |
| + uint8_t *kernel_sign_key_blob = (uint8_t *) CONFIG_KERNEL_SIGN_KEY_BLOB; |
| + uint64_t kernel_sign_key_size = CONFIG_KERNEL_SIGN_KEY_SIZE; |
| /* TODO Start initializing chipset */ |
| @@ -63,26 +76,28 @@ int do_cros_bootstub(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| else |
| primary_firmware = FIRMWARE_A; |
| - /* TODO call LoadFirmware */ |
| - } |
| + if (is_developer_mode_gpio_asserted()) |
| + boot_flags |= BOOT_FLAG_DEVELOPER; |
| - debug(PREFIX "load firmware of index %d\n", firmware_index); |
| + status = load_firmware(primary_firmware, boot_flags, |
| + kernel_sign_key_blob, kernel_sign_key_size, |
| + &firmware_index); |
| + } |
| WARN_ON_FAILURE(lock_tpm_rewritable_firmware_index()); |
| - if (firmware_index == FIRMWARE_A) { |
| - /* TODO Jump to firmware A and should never return */ |
| - } |
| - |
| - if (firmware_index == FIRMWARE_B) { |
| - /* TODO Jump to firmware B and should never return */ |
| + if (status == LOAD_FIRMWARE_SUCCESS) { |
| + debug(PREFIX "jump to rewritable firmware %d " |
| + "and never return\n", firmware_index); |
| + jump_to_firmware((void (*)(void)) (firmware_index == 0 ? |
| + CONFIG_FIRMWARE_BODY_BUFFER_0 : |
|
Che-Liang Chiou
2011/03/01 08:45:22
Remove statically allocated buffers. Changes due t
|
| + CONFIG_FIRMWARE_BODY_BUFFER_1)); |
| + } else { |
| + /* TODO Jump to recovery firmware and never return */ |
| } |
| - /* assert(firmware_index == FIRMWARE_RECOVERY); */ |
| - |
| - /* Recovery Firmware ************************************************ */ |
| - |
| - return 0; |
| + debug(PREFIX "error: should never reach here!\n"); |
| + return 1; |
|
sjg
2011/03/01 05:13:41
Should this hang, jump to recovery mode, something
Che-Liang Chiou
2011/03/01 08:45:22
We should jump to recovery firmware when rewritabl
|
| } |
| U_BOOT_CMD(cros_bootstub, 1, 1, do_cros_bootstub, NULL, NULL); |