summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHsin-Te Yuan <yuanhsinte@google.com>2022-06-30 17:23:23 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-07-11 18:24:55 +0000
commit61f16fca1def81c486c1283f8c0b1325fbdad7bc (patch)
tree8ddc1a00fb3bc627fa2fbe3f703fefbab1323fff
parent78a0e6cfc75cb117008d568aa0981bfc9ecce126 (diff)
downloadvboot-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.c23
-rw-r--r--firmware/2lib/2misc.c1
-rw-r--r--tests/vboot_api_kernel4_tests.c3
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();