diff options
author | Hsin-Te Yuan <yuanhsinte@google.com> | 2022-06-30 17:23:23 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-07-11 18:24:55 +0000 |
commit | 61f16fca1def81c486c1283f8c0b1325fbdad7bc (patch) | |
tree | 8ddc1a00fb3bc627fa2fbe3f703fefbab1323fff | |
parent | 78a0e6cfc75cb117008d568aa0981bfc9ecce126 (diff) | |
download | vboot-61f16fca1def81c486c1283f8c0b1325fbdad7bc.tar.gz |
2kernel.c: Clear VB2_NV_DIAG_REQUEST unconditionally
BUG=none
TEST=make runtests
BRANCH=none
Signed-off-by: Hsin-Te Yuan <yuanhsinte@google.com>
Change-Id: I406bcf806a6bbe21faa5f069381b73d43a7550b2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/3737566
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Tested-by: Hsuan Ting Chen <roccochen@chromium.org>
-rw-r--r-- | firmware/2lib/2kernel.c | 23 | ||||
-rw-r--r-- | firmware/2lib/2misc.c | 1 | ||||
-rw-r--r-- | tests/vboot_api_kernel4_tests.c | 3 |
3 files changed, 17 insertions, 10 deletions
diff --git a/firmware/2lib/2kernel.c b/firmware/2lib/2kernel.c index 8d17ff53..bec9c507 100644 --- a/firmware/2lib/2kernel.c +++ b/firmware/2lib/2kernel.c @@ -242,6 +242,21 @@ vb2_error_t vb2api_kernel_phase2(struct vb2_context *ctx) */ vb2_clear_recovery(ctx); + /* + * Clear the diagnostic request flag and commit nvdata to prevent + * booting back into diagnostic mode when a forced system reset occurs. + */ + if (vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST)) { + vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0); + /* + * According to current FAFT design (firmware_MiniDiag), we + * need an AP reset after MiniDiag test items to preserve the + * CBMEM console logs. So we need to commit nvdata immediately + * to prevent booting back to VB2_BOOT_MODE_DIAGNOSTICS. + */ + vb2ex_commit_data(ctx); + } + /* Select boot path */ switch (ctx->boot_mode) { case VB2_BOOT_MODE_MANUAL_RECOVERY: @@ -260,14 +275,6 @@ vb2_error_t vb2api_kernel_phase2(struct vb2_context *ctx) vb2ex_commit_data(ctx); break; case VB2_BOOT_MODE_DIAGNOSTICS: - /* - * Need to clear the request flag and commit nvdata changes - * immediately to avoid booting back into diagnostic tool when a - * forced system reset occurs. - */ - vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0); - vb2ex_commit_data(ctx); - break; case VB2_BOOT_MODE_DEVELOPER: case VB2_BOOT_MODE_NORMAL: break; diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c index 6e926905..57351278 100644 --- a/firmware/2lib/2misc.c +++ b/firmware/2lib/2misc.c @@ -520,6 +520,7 @@ int vb2api_phone_recovery_ui_enabled(struct vb2_context *ctx) VB2_SECDATA_KERNEL_FLAG_PHONE_RECOVERY_UI_DISABLED); } +test_mockable int vb2api_diagnostic_ui_enabled(struct vb2_context *ctx) { return !(vb2_secdata_kernel_get(ctx, VB2_SECDATA_KERNEL_FLAGS) & diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c index 60d87c60..6f210d38 100644 --- a/tests/vboot_api_kernel4_tests.c +++ b/tests/vboot_api_kernel4_tests.c @@ -251,8 +251,7 @@ static void select_and_load_kernel_tests(void) reset_common_data(); vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 1); - test_slk(VB2_REQUEST_REBOOT, 0, - "Normal boot with diag disabled (reboot to unset)"); + test_slk(0, 0, "Normal boot with diag disabled (reboot to unset)"); /* Boot normal - phase1 failure */ reset_common_data(); |