diff options
author | Vadim Bendebury <vbendeb@chromium.org> | 2015-04-06 18:04:44 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2015-04-07 18:37:11 +0000 |
commit | ccca6669d3c8c43cac00205b04fa167f219f2cae (patch) | |
tree | 10033585e5e4b742e268b4bd7ef40ca8210adb39 | |
parent | 95ebdd712e29218e2257c265269c7869c36cb193 (diff) | |
download | vboot-ccca6669d3c8c43cac00205b04fa167f219f2cae.tar.gz |
enable USB boot on transition to dev on some devices
Some Chrome OS devices do not allow to login even in developer mode,
as they do not have display/keyboard and sshd is not part of the
Chrome OS image. Even enabling developer mode on those devices is very
involved (requires taking the device apart and is guaranteed to take
long time).
We still want to allow the end user to control those devices in dev
mode. The solution is enabling the ability to boot from the USB stick
when the device transitions from normal to developer mode.
A simple way to do it is to set the NVRAM flag, which allows USB boot.
The flag is set on normal=>dev transition only, and only on those
devices where it is configured (as discovered by invoking
VbExGetSwitches with the appropriate parameters).
BRANCH=storm
BUG=chrome-os-partner:38303
TEST=tested with the corresponding depthcharge patches
Change-Id: I5fa58963256598cde3b534f5250101fba6042f8c
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/264187
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
-rw-r--r-- | firmware/include/vboot_api.h | 3 | ||||
-rw-r--r-- | firmware/lib/vboot_api_kernel.c | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h index 9c040c06..a818a7ca 100644 --- a/firmware/include/vboot_api.h +++ b/firmware/include/vboot_api.h @@ -230,6 +230,9 @@ typedef struct VbCommonParams { /* Set when we are calling VbInit() before loading Option ROMs */ #define VB_INIT_FLAG_BEFORE_OPROM_LOAD 0x00002000 +/* Allow USB boot on transition to dev */ +#define VB_INIT_FLAG_ALLOW_USB_BOOT 0x00004000 + /* * Output flags for VbInitParams.out_flags. Used to indicate potential boot * paths and configuration to the calling firmware early in the boot process, diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c index 4769089e..b28d4388 100644 --- a/firmware/lib/vboot_api_kernel.c +++ b/firmware/lib/vboot_api_kernel.c @@ -41,6 +41,12 @@ static void VbSetRecoveryRequest(uint32_t recovery_request) VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, recovery_request); } +static void VbAllowUsbBoot(void) +{ + VBDEBUG(("%s\n", __func__)); + VbNvSet(&vnc, VBNV_DEV_BOOT_USB, 1); +} + /** * Checks GBB flags against VbExIsShutdownRequested() shutdown request to * determine if a shutdown is required. @@ -587,6 +593,9 @@ VbError_t VbBootRecovery(VbCommonParams *cparams, LoadKernelParams *p) return VBERROR_TPM_SET_BOOT_MODE_STATE; VBDEBUG(("%s() Reboot so it will take " "effect\n", __func__)); + if (VbExGetSwitches + (VB_INIT_FLAG_ALLOW_USB_BOOT)) + VbAllowUsbBoot(); return VBERROR_TPM_REBOOT_REQUIRED; case -1: VBDEBUG(("%s() - Shutdown requested\n", |