[coreboot-gerrit] Patch set updated for coreboot: 51d2f86 vboot: use out_flags to indicate recovery mode

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Mon Dec 2 22:01:22 CET 2013


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/4223

-gerrit

commit 51d2f8695fc0cfde0bea034d6136a00587a95076
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Tue Jun 4 10:14:42 2013 -0700

    vboot: use out_flags to indicate recovery mode
    
    In order to make the proper decision on loading the
    option rom or not the recovery mode setting needs to be
    known.  Normally this is detected by asking the EC,
    but if recovery is requested with crossystem then the EC
    does not know about it.  Instead we need to check the
    output flags from VbInit().
    
    Change-Id: I09358e6fd979b4af6b37a13115ac34db3d98b09d
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
    Reviewed-on: https://gerrit.chromium.org/gerrit/57474
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/vendorcode/google/chromeos/chromeos.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/vendorcode/google/chromeos/chromeos.c b/src/vendorcode/google/chromeos/chromeos.c
index c2cc0e1..828cfd2 100644
--- a/src/vendorcode/google/chromeos/chromeos.c
+++ b/src/vendorcode/google/chromeos/chromeos.c
@@ -41,8 +41,21 @@ static int vboot_enable_developer(void)
 
 	return !!(vbho->init_params.out_flags & VB_INIT_OUT_ENABLE_DEVELOPER);
 }
+
+static int vboot_enable_recovery(void)
+{
+	struct vboot_handoff *vbho;
+
+	vbho = cbmem_find(CBMEM_ID_VBOOT_HANDOFF);
+
+	if (vbho == NULL)
+		return 0;
+
+	return !!(vbho->init_params.out_flags & VB_INIT_OUT_ENABLE_RECOVERY);
+}
 #else
 static inline int vboot_enable_developer(void) { return 0; }
+static inline int vboot_enable_recovery(void) { return 0; }
 #endif
 
 int developer_mode_enabled(void)
@@ -52,11 +65,20 @@ int developer_mode_enabled(void)
 
 int recovery_mode_enabled(void)
 {
-	/* TODO(reinauer): get information from VbInit.
-	 * the recovery mode switch is not the only reason to go
-	 * to recovery mode.
+	/*
+	 * This is called in multiple places and has to detect
+	 * recovery mode triggered from the EC and via shared
+	 * recovery reason set with crossystem.
+	 *
+	 * If shared recovery reason is set:
+	 * - before VbInit then get_recovery_mode_from_vbnv() is true
+	 * - after VbInit then vboot_enable_recovery() is true
+	 *
+	 * Otherwise the mainboard handler for get_recovery_mode_switch()
+	 * will detect recovery mode initiated by the EC.
 	 */
-	return get_recovery_mode_switch() || get_recovery_mode_from_vbnv();
+	return get_recovery_mode_switch() || get_recovery_mode_from_vbnv() ||
+		vboot_enable_recovery();
 }
 
 #if CONFIG_VBOOT_VERIFY_FIRMWARE



More information about the coreboot-gerrit mailing list