From a8f3a03198d1e813508e56174cb5eeed4f9b41a1 Mon Sep 17 00:00:00 2001 From: Chun-Ta Lin Date: Sat, 4 Jul 2020 10:14:26 +0800 Subject: minidiag: add entry The entry `Launch diagnostics` in recovery screen will set VB2_NV_DIAG_REQUEST and reboot. BRANCH=none BUG=b:155848434 TEST=( export CC=x86_64-pc-linux-gnu-clang DEBUG=1 DIAGNOSTIC_UI=0 MINIMAL=1 TPM2_MODE= MOCK_TPM=; make clean && make -j32 test_setup && make runtests; echo $? ) TEST=( export CC=x86_64-pc-linux-gnu-clang DEBUG=1 DIAGNOSTIC_UI=1 MINIMAL=1 TPM2_MODE= MOCK_TPM=; make clean && make -j32 test_setup && make runtests; echo $? ) TEST=LOCALES="en" USE="menu_ui minidiag" emerge-nami chromeos-bmpblk vboot_reference depthcharge chromeos-bootimage TEST=Unset by &= ~VB2_SECDATA_KERNEL_FLAG_DIAGNOSTIC_UI_DISABLED manually; trigger recovery mode on device; visually confirmed `Launch diagnostics` is shown; select, reboot and confirm behavior from serial output: "Unset diagnostic request (undo display init)". Cq-Depend: chromium:2282643, chromium:2282664, chromium:2289814 Change-Id: I34af282edee66c5b9943e2d11fb514bac9ccddd8 Signed-off-by: Chun-Ta Lin Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2282867 Tested-by: Chun-ta Lin Reviewed-by: Joel Kitching --- firmware/2lib/2ui_screens.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'firmware/2lib') diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c index 4af80950..2510392f 100644 --- a/firmware/2lib/2ui_screens.c +++ b/firmware/2lib/2ui_screens.c @@ -312,6 +312,15 @@ static const struct vb2_screen_info debug_info_screen = { #define RECOVERY_SELECT_ITEM_PHONE 1 #define RECOVERY_SELECT_ITEM_EXTERNAL_DISK 2 +#define RECOVERY_SELECT_ITEM_DIAGNOSTICS 3 + +/* Set VB2_NV_DIAG_REQUEST and reboot. */ +static vb2_error_t launch_diagnostics_action(struct vb2_ui_context *ui) +{ + vb2_nv_set(ui->ctx, VB2_NV_DIAG_REQUEST, 1); + VB2_DEBUG("Diagnostics requested, rebooting\n"); + return VB2_REQUEST_REBOOT; +} vb2_error_t recovery_select_init(struct vb2_ui_context *ui) { @@ -322,6 +331,11 @@ vb2_error_t recovery_select_init(struct vb2_ui_context *ui) 1 << RECOVERY_SELECT_ITEM_PHONE; ui->state->selected_item = RECOVERY_SELECT_ITEM_EXTERNAL_DISK; } + + if (!DIAGNOSTIC_UI || !vb2api_diagnostic_ui_enabled(ui->ctx)) + ui->state->disabled_item_mask |= + 1 << RECOVERY_SELECT_ITEM_DIAGNOSTICS; + return VB2_REQUEST_UI_CONTINUE; } @@ -335,6 +349,10 @@ static const struct vb2_menu_item recovery_select_items[] = { .text = "Recovery using external disk", .target = VB2_SCREEN_RECOVERY_DISK_STEP1, }, + [RECOVERY_SELECT_ITEM_DIAGNOSTICS] = { + .text = "Launch diagnostics", + .action = launch_diagnostics_action, + }, ADVANCED_OPTIONS_ITEM, POWER_OFF_ITEM, }; -- cgit v1.2.1