diff options
Diffstat (limited to 'firmware/lib/vboot_api_init.c')
-rw-r--r-- | firmware/lib/vboot_api_init.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/firmware/lib/vboot_api_init.c b/firmware/lib/vboot_api_init.c index 7fa488ae..f8c74909 100644 --- a/firmware/lib/vboot_api_init.c +++ b/firmware/lib/vboot_api_init.c @@ -22,6 +22,7 @@ VbError_t VbInit(VbCommonParams* cparams, VbInitParams* iparams) { uint32_t recovery = VBNV_RECOVERY_NOT_REQUESTED; int is_s3_resume = 0; uint32_t s3_debug_boot = 0; + uint32_t user_enabled_custom_os = 0; VBDEBUG(("VbInit() input flags 0x%x\n", iparams->flags)); @@ -105,12 +106,27 @@ VbError_t VbInit(VbCommonParams* cparams, VbInitParams* iparams) { iparams->out_flags |= (VB_INIT_OUT_CLEAR_RAM | VB_INIT_OUT_ENABLE_DISPLAY | VB_INIT_OUT_ENABLE_USB_STORAGE); + /* ... which could include custom OSes */ + VbNvGet(&vnc, VBNV_DEV_BOOT_CUSTOM, &user_enabled_custom_os); + if (user_enabled_custom_os) + iparams->out_flags |= VB_INIT_OUT_ENABLE_ALTERNATE_OS; + } else { + /* Normal mode, so disable dev_boot_* flags. This ensures they will be + * initially disabled if the user later transitions back into developer + * mode. */ + VbNvSet(&vnc, VBNV_DEV_BOOT_USB, 0); + VbNvSet(&vnc, VBNV_DEV_BOOT_CUSTOM, 0); } /* Allow BIOS to load arbitrary option ROMs? */ if (gbb->flags & GBB_FLAG_LOAD_OPTION_ROMS) iparams->out_flags |= VB_INIT_OUT_ENABLE_OPROM; + /* The factory may need to boot custom OSes whenever the dev-switch is on */ + if ((gbb->flags & GBB_FLAG_ENABLE_ALTERNATE_OS) && + (iparams->flags & VB_INIT_FLAG_DEV_SWITCH_ON)) + iparams->out_flags |= VB_INIT_OUT_ENABLE_ALTERNATE_OS; + /* copy current recovery reason to shared data */ shared->recovery_reason = (uint8_t)recovery; |