summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Delco <delco@google.com>2019-03-05 16:54:23 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-03-20 19:51:15 -0700
commit90a95ea62ade991769540f4a0c0e6465f3b3926c (patch)
tree2d62b8912e7688c96aea4f9bdd1b4779377b729a
parent7a748886003bad0a8971ca17d23f6641bc05bf59 (diff)
downloadvboot-90a95ea62ade991769540f4a0c0e6465f3b3926c.tar.gz
firmware: allocate nvram bit for diagnostic mode
This change allocates a bit in the nvram that will be used in a later change to tell the firmware whether to detour to diagnostic mode during boot. BUG=b:124358784 BRANCH=None TEST=Local build and ran "make runtests". Verified with a later change that the nvram bit takes effect as expected. Change-Id: If2fd3f46da30fc7375d37b240e3e745819ae0632 Signed-off-by: Matt Delco <delco@google.com> Reviewed-on: https://chromium-review.googlesource.com/1504758 Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r--firmware/2lib/2nvstorage.c7
-rw-r--r--firmware/2lib/include/2nvstorage.h2
-rw-r--r--firmware/2lib/include/2nvstorage_fields.h3
-rw-r--r--host/lib/crossystem.c4
-rw-r--r--tests/vb2_nvstorage_tests.c1
-rw-r--r--utility/crossystem.c1
6 files changed, 17 insertions, 1 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c
index 2993e7d9..b4e99ece 100644
--- a/firmware/2lib/2nvstorage.c
+++ b/firmware/2lib/2nvstorage.c
@@ -141,6 +141,9 @@ uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param)
case VB2_NV_RECOVERY_REQUEST:
return p[VB2_NV_OFFS_RECOVERY];
+ case VB2_NV_DIAG_REQUEST:
+ return GETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_REQ_DIAG);
+
case VB2_NV_RECOVERY_SUBCODE:
return p[VB2_NV_OFFS_RECOVERY_SUBCODE];
@@ -321,6 +324,10 @@ void vb2_nv_set(struct vb2_context *ctx,
p[VB2_NV_OFFS_RECOVERY] = (uint8_t)value;
break;
+ case VB2_NV_DIAG_REQUEST:
+ SETBIT(VB2_NV_OFFS_BOOT2, VB2_NV_BOOT2_REQ_DIAG);
+ break;
+
case VB2_NV_RECOVERY_SUBCODE:
p[VB2_NV_OFFS_RECOVERY_SUBCODE] = (uint8_t)value;
break;
diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h
index a5879192..38904289 100644
--- a/firmware/2lib/include/2nvstorage.h
+++ b/firmware/2lib/include/2nvstorage.h
@@ -125,6 +125,8 @@ enum vb2_nv_param {
* testing Alt OS booting.
*/
VB2_NV_POST_EC_SYNC_DELAY,
+ /* Request booting of diagnostic rom. 0=no, 1=yes. */
+ VB2_NV_DIAG_REQUEST,
};
/* Set default boot in developer mode */
diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h
index f370cd26..f9cd7dc3 100644
--- a/firmware/2lib/include/2nvstorage_fields.h
+++ b/firmware/2lib/include/2nvstorage_fields.h
@@ -79,13 +79,14 @@ enum vb2_nv_offset {
#define VB2_NV_BOOT_DISABLE_DEV 0x40
#define VB2_NV_BOOT_DEBUG_RESET 0x80
-/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x80) */
+/* Fields in VB2_NV_OFFS_BOOT2 (unused = 0x00) */
#define VB2_NV_BOOT2_RESULT_MASK 0x03
#define VB2_NV_BOOT2_TRIED 0x04
#define VB2_NV_BOOT2_TRY_NEXT 0x08
#define VB2_NV_BOOT2_PREV_RESULT_MASK 0x30
#define VB2_NV_BOOT2_PREV_RESULT_SHIFT 4 /* Number of bits to shift result */
#define VB2_NV_BOOT2_PREV_TRIED 0x40
+#define VB2_NV_BOOT2_REQ_DIAG 0x80
/* Fields in VB2_NV_OFFS_DEV (unused = 0x80) */
#define VB2_NV_DEV_FLAG_USB 0x01
diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
index 7d5903d6..e64e0acc 100644
--- a/host/lib/crossystem.c
+++ b/host/lib/crossystem.c
@@ -470,6 +470,8 @@ int VbGetSystemPropertyInt(const char *name)
value = vb2_get_nv_storage(VB2_NV_KERNEL_SETTINGS_RESET);
} else if (!strcasecmp(name,"recovery_request")) {
value = vb2_get_nv_storage(VB2_NV_RECOVERY_REQUEST);
+ } else if (!strcasecmp(name,"diagnostic_request")) {
+ value = vb2_get_nv_storage(VB2_NV_DIAG_REQUEST);
} else if (!strcasecmp(name,"dbg_reset")) {
value = vb2_get_nv_storage(VB2_NV_DEBUG_RESET_MODE);
} else if (!strcasecmp(name,"disable_dev_request")) {
@@ -658,6 +660,8 @@ int VbSetSystemPropertyInt(const char *name, int value)
return vb2_set_nv_storage(VB2_NV_KERNEL_SETTINGS_RESET, 0);
} else if (!strcasecmp(name,"recovery_request")) {
return vb2_set_nv_storage(VB2_NV_RECOVERY_REQUEST, value);
+ } else if (!strcasecmp(name,"diagnostic_request")) {
+ return vb2_set_nv_storage(VB2_NV_DIAG_REQUEST, value);
} else if (!strcasecmp(name,"recovery_subcode")) {
return vb2_set_nv_storage(VB2_NV_RECOVERY_SUBCODE, value);
} else if (!strcasecmp(name,"dbg_reset")) {
diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c
index fe73216a..1dccdade 100644
--- a/tests/vb2_nvstorage_tests.c
+++ b/tests/vb2_nvstorage_tests.c
@@ -48,6 +48,7 @@ static struct nv_field nvfields[] = {
{VB2_NV_DEV_BOOT_SIGNED_ONLY, 0, 1, 0, "dev boot custom"},
{VB2_NV_DEV_BOOT_FASTBOOT_FULL_CAP, 0, 1, 0, "dev boot fb full cap"},
{VB2_NV_DEV_DEFAULT_BOOT, 0, 1, 2, "dev default boot"},
+ {VB2_NV_DIAG_REQUEST, 0, 1, 0, "diagnostic rom request"},
{VB2_NV_DISABLE_DEV_REQUEST, 0, 1, 0, "disable dev request"},
{VB2_NV_CLEAR_TPM_OWNER_REQUEST, 0, 1, 0, "clear tpm owner request"},
{VB2_NV_CLEAR_TPM_OWNER_DONE, 0, 1, 0, "clear tpm owner done"},
diff --git a/utility/crossystem.c b/utility/crossystem.c
index de479486..68e3f510 100644
--- a/utility/crossystem.c
+++ b/utility/crossystem.c
@@ -51,6 +51,7 @@ const Param sys_param_list[] = {
{"dev_enable_udc", CAN_WRITE, "Enable USB Device Controller"},
{"devsw_boot", 0, "Developer switch position at boot"},
{"devsw_cur", 0, "Developer switch current position"},
+ {"diagnostic_request", CAN_WRITE, "Request diagnostic rom run on next boot"},
{"disable_alt_os_request", CAN_WRITE,
"Disable Alt OS mode on next boot (writable)"},
{"disable_dev_request", CAN_WRITE, "Disable virtual dev-mode on next boot"},