[coreboot-gerrit] New patch to review for coreboot: 53a495c vboot: make vboot2_verify_firmware return

Aaron Durbin (adurbin@chromium.org) gerrit at coreboot.org
Wed Apr 15 17:42:28 CEST 2015


Aaron Durbin (adurbin at chromium.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9702

-gerrit

commit 53a495c3f2d9f466579666c676db199201e63d12
Author: Daisuke Nojiri <dnojiri at chromium.org>
Date:   Mon Dec 1 17:19:10 2014 -0800

    vboot: make vboot2_verify_firmware return
    
    this allows each board to decide what to do after firmware verification is
    done. some board needs to return back to the previous stage and let the
    previous stage kick off the verified stage.
    
    this also makes it more visible what is going to happen in the verstage since
    stage_exit now resides in main().
    
    BUG=none
    BRANCH=tot
    TEST=booted cosmos dev board. booted blaze in normal and recovery mode.
    built for all current boards.
    
    Original-Signed-off-by: Daisuke Nojiri <dnojiri at chromium.org>
    Original-Change-Id: I3cb466cedf2a9c2b0d48fc4b0f73f76d0714c0c7
    Original-Reviewed-on: https://chromium-review.googlesource.com/232517
    
    (cherry picked from commit 495704f36aa54ba12231d396376f01289d083f58)
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    
    Change-Id: Ic20dfd3fa93849befc2b37012a5e0907fe83e8e2
---
 src/soc/nvidia/tegra124/verstage.c              | 19 ++++++++++++++++---
 src/soc/nvidia/tegra132/verstage.c              | 17 ++++++++++++++---
 src/vendorcode/google/chromeos/vboot2/misc.h    |  2 +-
 src/vendorcode/google/chromeos/vboot2/verstub.c | 10 +++-------
 4 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/src/soc/nvidia/tegra124/verstage.c b/src/soc/nvidia/tegra124/verstage.c
index 8032423..2d7a953 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 ba3e183..e629eed 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 b97be49..d638cfa 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 3234683..1663926 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;
 }



More information about the coreboot-gerrit mailing list