summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2018-04-12 15:36:59 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-08-07 01:51:13 -0700
commit935d60e8374f0d73123a5dedf0f1c144c3249820 (patch)
treebe03f872e2ed8fae51b9a954580b6f9846ee6a3d
parent9ad8a41b8cedef9ac1f0513992ce6958eb86c257 (diff)
downloadvboot-935d60e8374f0d73123a5dedf0f1c144c3249820.tar.gz
Add AltOS NVRAM flags
Port CL:1009444 to ToT. Adds (enable|disable)_alt_os_request flag for AltOS boot flow. BRANCH=none BUG=b:70804764 TEST=1. make runtests 2. Manually, set and get new flags via crossystem Change-Id: Ie7fe2620f736335f11c39cbfe37b3fdf400ff926 Reviewed-on: https://chromium-review.googlesource.com/1014840 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--firmware/2lib/2nvstorage.c10
-rw-r--r--firmware/2lib/include/2nvstorage.h4
-rw-r--r--firmware/2lib/include/2nvstorage_fields.h4
-rw-r--r--host/lib/crossystem.c8
-rw-r--r--tests/vb2_nvstorage_tests.c2
-rw-r--r--utility/crossystem.c4
6 files changed, 31 insertions, 1 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c
index 9090608d..e721ca6a 100644
--- a/firmware/2lib/2nvstorage.c
+++ b/firmware/2lib/2nvstorage.c
@@ -218,6 +218,10 @@ uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param)
| (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD2] << 8)
| (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD3] << 16)
| (p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD4] << 24));
+ case VB2_NV_ENABLE_ALT_OS_REQUEST:
+ return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_ENABLE_ALT_OS);
+ case VB2_NV_DISABLE_ALT_OS_REQUEST:
+ return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_DISABLE_ALT_OS);
}
/*
@@ -419,6 +423,12 @@ void vb2_nv_set(struct vb2_context *ctx,
p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD3] = (uint8_t)(value >> 16);
p[VB2_NV_OFFS_FW_MAX_ROLLFORWARD4] = (uint8_t)(value >> 24);
break;
+ case VB2_NV_ENABLE_ALT_OS_REQUEST:
+ SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_ENABLE_ALT_OS);
+ break;
+ case VB2_NV_DISABLE_ALT_OS_REQUEST:
+ SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_DISABLE_ALT_OS);
+ break;
}
/*
diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h
index 05183d52..9d8374c0 100644
--- a/firmware/2lib/include/2nvstorage.h
+++ b/firmware/2lib/include/2nvstorage.h
@@ -115,6 +115,10 @@ enum vb2_nv_param {
* VB2_MAX_ROLLFORWARD_MAX_V1_DEFAULT for V1.
*/
VB2_NV_FW_MAX_ROLLFORWARD,
+ /* Enable AltOS Mode on next boot. */
+ VB2_NV_ENABLE_ALT_OS_REQUEST,
+ /* Disable AltOS Mode on next boot. */
+ VB2_NV_DISABLE_ALT_OS_REQUEST,
};
/* Set default boot in developer mode */
diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h
index 981bbda4..4f7b9e22 100644
--- a/firmware/2lib/include/2nvstorage_fields.h
+++ b/firmware/2lib/include/2nvstorage_fields.h
@@ -101,10 +101,12 @@ enum vb2_nv_offset {
#define VB2_NV_TPM_CLEAR_OWNER_DONE 0x02
#define VB2_NV_TPM_REBOOTED 0x04
-/* Fields in VB2_NV_OFFS_MISC (unused = 0xf0) */
+/* Fields in VB2_NV_OFFS_MISC (unused = 0xc0) */
#define VB2_NV_MISC_UNLOCK_FASTBOOT 0x01
#define VB2_NV_MISC_BOOT_ON_AC_DETECT 0x02
#define VB2_NV_MISC_TRY_RO_SYNC 0x04
#define VB2_NV_MISC_BATTERY_CUTOFF 0x08
+#define VB2_NV_MISC_ENABLE_ALT_OS 0x10
+#define VB2_NV_MISC_DISABLE_ALT_OS 0x20
#endif /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
index e41815ec..d87c3f26 100644
--- a/host/lib/crossystem.c
+++ b/host/lib/crossystem.c
@@ -573,6 +573,10 @@ int VbGetSystemPropertyInt(const char *name)
} else {
value = 0;
}
+ } else if (!strcasecmp(name, "enable_alt_os_request")) {
+ value = vb2_get_nv_storage(VB2_NV_ENABLE_ALT_OS_REQUEST);
+ } else if (!strcasecmp(name, "disable_alt_os_request")) {
+ value = vb2_get_nv_storage(VB2_NV_DISABLE_ALT_OS_REQUEST);
}
return value;
@@ -729,6 +733,10 @@ int VbSetSystemPropertyInt(const char *name, int value)
return vb2_set_nv_storage(VB2_NV_BATTERY_CUTOFF_REQUEST, value);
} else if (!strcasecmp(name,"kernel_max_rollforward")) {
return vb2_set_nv_storage(VB2_NV_KERNEL_MAX_ROLLFORWARD, value);
+ } else if (!strcasecmp(name, "enable_alt_os_request")) {
+ return vb2_set_nv_storage(VB2_NV_ENABLE_ALT_OS_REQUEST, value);
+ } else if (!strcasecmp(name, "disable_alt_os_request")) {
+ return vb2_set_nv_storage(VB2_NV_DISABLE_ALT_OS_REQUEST, value);
}
return -1;
diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c
index b4d1d4b6..c945cfe2 100644
--- a/tests/vb2_nvstorage_tests.c
+++ b/tests/vb2_nvstorage_tests.c
@@ -61,6 +61,8 @@ static struct nv_field nvfields[] = {
{VB2_NV_BATTERY_CUTOFF_REQUEST, 0, 1, 0, "battery cutoff request"},
{VB2_NV_KERNEL_MAX_ROLLFORWARD, 0, 0x12345678, 0xFEDCBA98,
"kernel max rollforward"},
+ {VB2_NV_ENABLE_ALT_OS_REQUEST, 0, 1, 0, "enable alt os request"},
+ {VB2_NV_DISABLE_ALT_OS_REQUEST, 0, 1, 0, "disable alt os request"},
{0, 0, 0, 0, NULL}
};
diff --git a/utility/crossystem.c b/utility/crossystem.c
index 13e589ca..1d12cb09 100644
--- a/utility/crossystem.c
+++ b/utility/crossystem.c
@@ -53,8 +53,12 @@ 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"},
+ {"disable_alt_os_request", CAN_WRITE,
+ "Disable AltOS mode on next boot (writable)"},
{"disable_dev_request", CAN_WRITE, "Disable virtual dev-mode on next boot"},
{"ecfw_act", IS_STRING, "Active EC firmware"},
+ {"enable_alt_os_request", CAN_WRITE,
+ "Enable AltOS mode on next boot (writable)"},
{"fmap_base", 0, "Main firmware flashmap physical address", "0x%08x"},
{"fwb_tries", CAN_WRITE, "Try firmware B count (writable)"},
{"fw_vboot2", 0, "1 if firmware was selected by vboot2 or 0 otherwise"},