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;
 }