diff --git a/src/soc/nvidia/tegra124/verstage.c b/src/soc/nvidia/tegra124/verstage.c index 80324232a8..2d7a9530b6 100644 --- a/src/soc/nvidia/tegra124/verstage.c +++ b/src/soc/nvidia/tegra124/verstage.c @@ -19,6 +19,8 @@ #include #include +#include +#include #include #include #include @@ -47,12 +49,23 @@ static void soc_init(void) enable_cache(); } +static void verstage(void) +{ + void *entry; + + soc_init(); + early_mainboard_init(); + + entry = vboot2_verify_firmware(); + if (entry != (void *)-1) + stage_exit(entry); +} + void main(void) { asm volatile ("bl arm_init_caches" : : : "r0", "r1", "r2", "r3", "r4", "r5", "ip"); - soc_init(); - early_mainboard_init(); - vboot2_verify_firmware(); + verstage(); + hlt(); } diff --git a/src/soc/nvidia/tegra132/verstage.c b/src/soc/nvidia/tegra132/verstage.c index ba3e18393a..e629eedc27 100644 --- a/src/soc/nvidia/tegra132/verstage.c +++ b/src/soc/nvidia/tegra132/verstage.c @@ -19,6 +19,8 @@ #include #include +#include +#include #include #include #include @@ -28,12 +30,21 @@ void __attribute__((weak)) verstage_mainboard_init(void) /* Default empty implementation. */ } -void main(void) +static void verstage(void) { + void *entry; + console_init(); exception_init(); - verstage_mainboard_init(); - vboot2_verify_firmware(); + entry = vboot2_verify_firmware(); + if (entry != (void *)-1) + stage_exit(entry); +} + +void main(void) +{ + verstage(); + hlt(); } diff --git a/src/vendorcode/google/chromeos/vboot2/misc.h b/src/vendorcode/google/chromeos/vboot2/misc.h index b97be49a31..d638cfadae 100644 --- a/src/vendorcode/google/chromeos/vboot2/misc.h +++ b/src/vendorcode/google/chromeos/vboot2/misc.h @@ -22,7 +22,7 @@ #include "../vboot_common.h" -void vboot2_verify_firmware(void); +void *vboot2_verify_firmware(void); void *vboot2_load_ramstage(void); void verstage_main(void); void *vboot_load_stage(int stage_index, diff --git a/src/vendorcode/google/chromeos/vboot2/verstub.c b/src/vendorcode/google/chromeos/vboot2/verstub.c index 46f57ab08f..5630defc28 100644 --- a/src/vendorcode/google/chromeos/vboot2/verstub.c +++ b/src/vendorcode/google/chromeos/vboot2/verstub.c @@ -52,7 +52,7 @@ static struct vb2_working_data *init_vb2_working_data(void) * 2) We're already in the verstage. Verify firmware, then load the romstage and * exits to it. */ -void vboot2_verify_firmware(void) +void *vboot2_verify_firmware(void) { void *entry; struct vb2_working_data *wd; @@ -66,7 +66,6 @@ void vboot2_verify_firmware(void) if (entry == (void *)-1) die("failed to load verstage"); - timestamp_add_now(TS_END_COPYVER); /* verify and select a slot */ stage_exit(entry); } else { @@ -75,7 +74,7 @@ void vboot2_verify_firmware(void) /* jump to the selected slot */ timestamp_add_now(TS_START_COPYROM); - entry = NULL; + entry = (void *)-1; if (vboot_is_slot_selected(wd)) { /* RW A or B */ struct vboot_region fw_main; @@ -93,8 +92,5 @@ void vboot2_verify_firmware(void) } timestamp_add_now(TS_END_COPYROM); - if (entry != NULL && entry != (void *)-1) - stage_exit(entry); - - die("failed to exit from stage\n"); + return entry; }