From 0c357126066949f2b5a66641536547fb372fc3a0 Mon Sep 17 00:00:00 2001 From: Hsin-Te Yuan Date: Thu, 30 Jun 2022 16:38:40 +0800 Subject: 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 Change-Id: Iecb9f52b056906bcd1d7da324390672adc5112c7 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3737563 Reviewed-by: Hsuan Ting Chen Reviewed-by: Yu-Ping Wu Reviewed-by: Julius Werner --- firmware/2lib/2api.c | 21 ++++++++------------- tests/vb2_api_tests.c | 4 +++- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/firmware/2lib/2api.c b/firmware/2lib/2api.c index c041d8ac..9184b23d 100644 --- a/firmware/2lib/2api.c +++ b/firmware/2lib/2api.c @@ -72,26 +72,21 @@ vb2_error_t vb2api_fw_phase1(struct vb2_context *ctx) */ 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 15c9bd1f..ff7fa18c 100644 --- a/tests/vb2_api_tests.c +++ b/tests/vb2_api_tests.c @@ -135,8 +135,10 @@ vb2_error_t vb2_fw_init_gbb(struct vb2_context *c) 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; } -- cgit v1.2.1