summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/nvidia/tegra124/verstage.c19
-rw-r--r--src/soc/nvidia/tegra132/verstage.c17
-rw-r--r--src/vendorcode/google/chromeos/vboot2/misc.h2
-rw-r--r--src/vendorcode/google/chromeos/vboot2/verstub.c10
4 files changed, 34 insertions, 14 deletions
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 <arch/cache.h>
#include <arch/exception.h>
+#include <arch/hlt.h>
+#include <arch/stages.h>
#include <console/console.h>
#include <soc/cache.h>
#include <soc/early_configs.h>
@@ -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 <arch/cache.h>
#include <arch/exception.h>
+#include <arch/hlt.h>
+#include <arch/stages.h>
#include <console/console.h>
#include <soc/verstage.h>
#include <vendorcode/google/chromeos/chromeos.h>
@@ -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;
}