2api.c: Initialize display using boot_mode In vb2api_fw_phase1, use the boot_mode set by vb2_set_boot_mode to determine whether to initialize display. This fixes the edge case where VB2_NV_DIAG_REQUEST is set, but vb2api_diagnostic_ui_enabled() is 0. BUG=none TEST=make runtests BRANCH=none Signed-off-by: Hsin-Te Yuan <yuanhsinte@google.com> Change-Id: Iecb9f52b056906bcd1d7da324390672adc5112c7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3737563 Reviewed-by: Hsuan Ting Chen <roccochen@chromium.org> Reviewed-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
diff --git a/firmware/2lib/2api.c b/firmware/2lib/2api.c index c041d8a..9184b23 100644 --- a/firmware/2lib/2api.c +++ b/firmware/2lib/2api.c
@@ -72,26 +72,21 @@ */ vb2_check_recovery(ctx); + /* Decide the boot mode */ + vb2_set_boot_mode(ctx); + /* - * Check for possible reasons to ask the firmware to make display - * available. VB2_CONTEXT_RECOVERY_MODE may have been set above by - * vb2_check_recovery. VB2_SD_FLAG_DEV_MODE_ENABLED may have been set - * above by vb2_check_dev_switch. VB2_NV_DIAG_REQUEST may have been - * set during the last boot in recovery mode. + * Initialize display if VB2_NV_DISPLAY_REQUEST is set or in non-normal + * boot mode. */ - if (!(ctx->flags & VB2_CONTEXT_DISPLAY_INIT) && - (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST) || - sd->flags & VB2_SD_FLAG_DEV_MODE_ENABLED || - ctx->flags & VB2_CONTEXT_RECOVERY_MODE || - vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST))) + if (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST) || + ctx->boot_mode != VB2_BOOT_MODE_NORMAL) ctx->flags |= VB2_CONTEXT_DISPLAY_INIT; + /* Mark display as available for downstream vboot and vboot callers. */ if (ctx->flags & VB2_CONTEXT_DISPLAY_INIT) sd->flags |= VB2_SD_FLAG_DISPLAY_AVAILABLE; - /* Decide the boot mode */ - vb2_set_boot_mode(ctx); - /* Return error if recovery is needed */ if (ctx->flags & VB2_CONTEXT_RECOVERY_MODE) { /* Always clear RAM when entering recovery mode */
diff --git a/tests/vb2_api_tests.c b/tests/vb2_api_tests.c index 15c9bd1..ff7fa18 100644 --- a/tests/vb2_api_tests.c +++ b/tests/vb2_api_tests.c
@@ -135,8 +135,10 @@ vb2_error_t vb2_check_dev_switch(struct vb2_context *c) { - if (force_dev_mode) + if (force_dev_mode) { + c->flags |= VB2_CONTEXT_DEVELOPER_MODE; sd->flags |= VB2_SD_FLAG_DEV_MODE_ENABLED; + } return retval_vb2_check_dev_switch; }