diff options
author | Randall Spangler <rspangler@chromium.org> | 2013-06-11 16:53:07 -0700 |
---|---|---|
committer | ChromeBot <chrome-bot@google.com> | 2013-06-12 09:22:32 -0700 |
commit | f2a1dc0a54ec542dd4be7b634483de317c89a2a2 (patch) | |
tree | ef2d7fcc9afd482f30db7be0f976cdb77030945e /firmware/lib | |
parent | 19c996909d8cae46ee3ee6d4319abd9f72ab53e1 (diff) | |
download | vboot-f2a1dc0a54ec542dd4be7b634483de317c89a2a2.tar.gz |
Add GBB flags for disabling software sync and defaulting to legacy bootfactory-spring-4262.Bfactory-skate-4262.459.B
1) GBB flag to skip EC software sync, so EC will be untouched. Needed
for EC development.
2) GBB flag to default to booting legacy at end of dev screen timeout.
Very handy for booting Ubuntu (or other OS).
Also added unit tests for the new flags.
BUG=chrome-os-partner:20111
BRANCH=none
TEST=make runtests
Change-Id: I9da87d87014881a1b1393b0b4a5acb921d080066
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/58270
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'firmware/lib')
-rw-r--r-- | firmware/lib/vboot_api_kernel.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c index a1d83b11..64f600ae 100644 --- a/firmware/lib/vboot_api_kernel.c +++ b/firmware/lib/vboot_api_kernel.c @@ -177,7 +177,7 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p) (GoogleBinaryBlockHeader *)cparams->gbb_data; VbSharedDataHeader *shared = (VbSharedDataHeader *)cparams->shared_data_blob; - uint32_t allow_usb = 0, allow_legacy = 0; + uint32_t allow_usb = 0, allow_legacy = 0, ctrl_d_pressed = 0; VbAudioContext *audio = 0; VBDEBUG(("Entering %s()\n", __func__)); @@ -287,6 +287,7 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p) /* Ctrl+D = dismiss warning; advance to timeout */ VBDEBUG(("VbBootDeveloper() - " "user pressed Ctrl+D; skip delay\n")); + ctrl_d_pressed = 1; goto fallout; break; case 0x0c: @@ -370,6 +371,19 @@ VbError_t VbBootDeveloper(VbCommonParams *cparams, LoadKernelParams *p) } while(VbAudioLooping(audio)); fallout: + + /* If defaulting to legacy boot, try that unless Ctrl+D was pressed */ + if ((gbb->flags & GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY) && + !ctrl_d_pressed) { + VBDEBUG(("VbBootDeveloper() - defaulting to legacy\n")); + VbExLegacy(); + + /* If that fails, beep and fall through to fixed disk */ + VbExBeep(120, 400); + VbExSleepMs(120); + VbExBeep(120, 400); + } + /* Timeout or Ctrl+D; attempt loading from fixed disk */ VBDEBUG(("VbBootDeveloper() - trying fixed disk\n")); VbAudioClose(audio); @@ -798,6 +812,8 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams, { VbSharedDataHeader *shared = (VbSharedDataHeader *)cparams->shared_data_blob; + GoogleBinaryBlockHeader *gbb = + (GoogleBinaryBlockHeader *)cparams->gbb_data; VbError_t retval = VBERROR_SUCCESS; LoadKernelParams p; uint32_t tpm_status = 0; @@ -816,7 +832,8 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams, Memset(kparams->partition_guid, 0, sizeof(kparams->partition_guid)); /* Do EC software sync if necessary */ - if (shared->flags & VBSD_EC_SOFTWARE_SYNC) { + if ((shared->flags & VBSD_EC_SOFTWARE_SYNC) && + !(gbb->flags & GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC)) { retval = VbEcSoftwareSync(cparams); if (retval != VBERROR_SUCCESS) goto VbSelectAndLoadKernel_exit; |