summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"));
}