From a975eed306e16947c30b48ccd25ab67a37295742 Mon Sep 17 00:00:00 2001 From: Hsin-Te Yuan Date: Fri, 8 Jul 2022 16:55:54 +0800 Subject: 2kernel.c: check display request in vb2api_kernel_phase2 In preparation for moving VbTryLoadKernel to depthcharge, move the VB2_NV_DISPLAY_REQUEST check from vb2api_normal_boot to vb2api_kernel_phase2. BUG=b:172339016 BRANCH=none TEST=make runtests Signed-off-by: Hsin-Te Yuan Change-Id: I3629d8dbbcaba23220152543ba77558c8bbcdc7b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3752431 Reviewed-by: Yu-Ping Wu Reviewed-by: Hsuan Ting Chen --- firmware/2lib/2kernel.c | 37 +++++++------------------------------ tests/vb2_kernel2_tests.c | 16 ---------------- tests/vb2_kernel_tests.c | 8 ++++++++ 3 files changed, 15 insertions(+), 46 deletions(-) diff --git a/firmware/2lib/2kernel.c b/firmware/2lib/2kernel.c index 30d6bbe6..41764ef1 100644 --- a/firmware/2lib/2kernel.c +++ b/firmware/2lib/2kernel.c @@ -12,31 +12,6 @@ #include "2secdata.h" #include "vboot_api.h" -/** - * Reset any NVRAM requests. - * - * @param ctx Vboot context - * @return 1 if a reboot is required, 0 otherwise. - */ -static int vb2_reset_nv_requests(struct vb2_context *ctx) -{ - int need_reboot = 0; - - if (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST)) { - VB2_DEBUG("Unset display request (undo display init)\n"); - vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 0); - need_reboot = 1; - } - - if (vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST)) { - VB2_DEBUG("Unset diagnostic request (undo display init)\n"); - vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0); - need_reboot = 1; - } - - return need_reboot; -} - vb2_error_t vb2api_normal_boot(struct vb2_context *ctx, VbSelectAndLoadKernelParams *kparams) { @@ -47,11 +22,6 @@ vb2_error_t vb2api_normal_boot(struct vb2_context *ctx, /* Boot from fixed disk only */ VB2_DEBUG("Entering\n"); - if (vb2_reset_nv_requests(ctx)) { - VB2_DEBUG("Normal mode: reboot to reset NVRAM requests\n"); - return VB2_REQUEST_REBOOT; - } - vb2_error_t rv = VbTryLoadKernel(ctx, VB_DISK_FLAG_FIXED, kparams); VB2_DEBUG("Checking if TPM kernel version needs advancing\n"); @@ -277,7 +247,14 @@ vb2_error_t vb2api_kernel_phase2(struct vb2_context *ctx) break; case VB2_BOOT_MODE_DIAGNOSTICS: case VB2_BOOT_MODE_DEVELOPER: + break; case VB2_BOOT_MODE_NORMAL: + if (vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST)) { + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 0); + VB2_DEBUG("Normal mode: " + "reboot to unset display request\n"); + return VB2_REQUEST_REBOOT; + } break; default: return VB2_ERROR_ESCAPE_NO_BOOT; diff --git a/tests/vb2_kernel2_tests.c b/tests/vb2_kernel2_tests.c index ef06b5f1..04defe50 100644 --- a/tests/vb2_kernel2_tests.c +++ b/tests/vb2_kernel2_tests.c @@ -113,22 +113,6 @@ static void normal_boot_tests(void) TEST_EQ(vb2api_normal_boot(ctx, &kparams), VB2_ERROR_MOCK, "vb2api_normal_boot() returns VB2_ERROR_MOCK"); - reset_common_data(); - mock_vbtlk_expect_fixed = 0; - vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); - TEST_EQ(vb2api_normal_boot(ctx, &kparams), VB2_REQUEST_REBOOT, - "vb2api_normal_boot() reboot to reset NVRAM display request"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 0, - " display request reset"); - - reset_common_data(); - mock_vbtlk_expect_fixed = 0; - vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); - TEST_EQ(vb2api_normal_boot(ctx, &kparams), VB2_REQUEST_REBOOT, - "vb2api_normal_boot() reboot to reset NVRAM diag request"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST), 0, - " diag request reset"); - reset_common_data(); new_version = 0x20003; TEST_SUCC(vb2api_normal_boot(ctx, &kparams), "Roll forward"); diff --git a/tests/vb2_kernel_tests.c b/tests/vb2_kernel_tests.c index a573b52b..ca945e95 100644 --- a/tests/vb2_kernel_tests.c +++ b/tests/vb2_kernel_tests.c @@ -324,6 +324,14 @@ static void phase2_tests(void) TEST_SUCC(vb2api_kernel_phase2(ctx), "Normal mode"); TEST_EQ(mock_ec_sync_called, 1, " EC sync"); + reset_common_data(FOR_PHASE2); + SET_BOOT_MODE(ctx, VB2_BOOT_MODE_NORMAL); + vb2_nv_set(ctx, VB2_NV_DISPLAY_REQUEST, 1); + TEST_EQ(vb2api_kernel_phase2(ctx), VB2_REQUEST_REBOOT, + "Normal mode with display request: rebooting"); + TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISPLAY_REQUEST), 0, + " display request reset"); + reset_common_data(FOR_PHASE2); SET_BOOT_MODE(ctx, VB2_BOOT_MODE_DEVELOPER); TEST_SUCC(vb2api_kernel_phase2(ctx), "Developer mode"); -- cgit v1.2.1