summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@chromium.org>2014-11-19 14:04:52 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-11-21 20:29:16 +0000
commit2596c657958477b06d1613902dfe4d47a2ad0ae0 (patch)
treec73a2f972943dde4e38a0864908a60a2ff7c48e3
parent57660567b43f5aeabab2c7911ffaec4612b0a3ab (diff)
downloadvboot-factory-whirlwind-6509.B.tar.gz
vboot: Add flag to indicate VbInit is run before option rom loadingfactory-whirlwind-6509.B
This commit adds a new VbInit() flag which will indicate that it is being called before option roms are loaded and can therefore respond to the VbNv flag without needing an immediate reboot. When the BIOS calls VbInit() in firmware it may not yet know if the system is in developer mode if there is a virtual developer mode switch, instead it relies on the VbNv flag that is prepared by VbInit(). So this new flag only affects VbInit() checks itself, the later checks still do the right thing because OPROM_LOADED can be set based on the VbNv value that is set by VbInit(). BUG=chrome-os-partner:32379 BRANCH=samus TEST=pass FAFT tests on samus Signed-off-by: Duncan Laurie <dlaurie@chromium.org> Change-Id: I7a12f3d318a04ff43ac1ddfc0ba8baa112253bad Reviewed-on: https://chromium-review.googlesource.com/230885 Reviewed-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--firmware/include/vboot_api.h2
-rw-r--r--firmware/lib/vboot_api_init.c17
2 files changed, 13 insertions, 6 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index 526c1e4a..81240585 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -227,6 +227,8 @@ typedef struct VbCommonParams {
* can (and should) be used for additional physical presence checks.
*/
#define VB_INIT_FLAG_VIRTUAL_REC_SWITCH 0x00001000
+/* Set when we are calling VbInit() before loading Option ROMs */
+#define VB_INIT_FLAG_BEFORE_OPROM_LOAD 0x00002000
/*
* Output flags for VbInitParams.out_flags. Used to indicate potential boot
diff --git a/firmware/lib/vboot_api_init.c b/firmware/lib/vboot_api_init.c
index 38bc8793..ce89715a 100644
--- a/firmware/lib/vboot_api_init.c
+++ b/firmware/lib/vboot_api_init.c
@@ -301,7 +301,13 @@ VbError_t VbInit(VbCommonParams *cparams, VbInitParams *iparams)
if ((iparams->flags & VB_INIT_FLAG_OPROM_MATTERS) &&
!(iparams->flags & VB_INIT_FLAG_OPROM_LOADED)) {
VbNvSet(&vnc, VBNV_OPROM_NEEDED, 1);
- retval = VBERROR_VGA_OPROM_MISMATCH;
+ /*
+ * If VbInit() is run before Option ROMs are run it
+ * can still respond to the VbNv flag and does not
+ * need to reboot here.
+ */
+ if (!(iparams->flags & VB_INIT_FLAG_BEFORE_OPROM_LOAD))
+ retval = VBERROR_VGA_OPROM_MISMATCH;
VBDEBUG(("VbInit() needs oprom, doesn't have it\n"));
}
@@ -332,12 +338,11 @@ VbError_t VbInit(VbCommonParams *cparams, VbInitParams *iparams)
(iparams->flags & VB_INIT_FLAG_OPROM_LOADED)) {
VbNvSet(&vnc, VBNV_OPROM_NEEDED, 0);
/*
- * If this is a system with slow EC update then don't
- * reboot immediately in case VGA option ROM is still
- * needed to display an update screen. The reboot will
- * be requested after EC software sync is complete.
+ * If VbInit() is run before Option ROMs are run it
+ * can still respond to the VbNv flag and does not
+ * need to reboot here.
*/
- if (!(iparams->flags & VB_INIT_FLAG_EC_SLOW_UPDATE))
+ if (!(iparams->flags & VB_INIT_FLAG_BEFORE_OPROM_LOAD))
retval = VBERROR_VGA_OPROM_MISMATCH;
VBDEBUG(("VbInit() has oprom, doesn't need it\n"));
}