summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2021-07-01 05:29:16 +0800
committerCommit Bot <commit-bot@chromium.org>2021-07-19 09:21:08 +0000
commit2d3af1227d6c74733f4e16da424ffaabdfcd23d4 (patch)
treec316b7cc46ddf876db9267872b84487d03637006
parente33704be83614838400368ce5853becab9b88f4f (diff)
downloadvboot-2d3af1227d6c74733f4e16da424ffaabdfcd23d4.tar.gz
vboot: add MINIOS_PRIORITY flag to nvstorage
Flag decides whether MINIOS-A or MINIOS-B is booted. BUG=b:186682292 TEST=make clean && make runtests TEST=Deploy and run `crossystem minios_priority` commands BRANCH=none Signed-off-by: Joel Kitching <kitching@google.com> Change-Id: I11460bf1522cde8e98e680b0f00a417e2b4ef9a1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2998513 Tested-by: Joel Kitching <kitching@chromium.org> Commit-Queue: Joel Kitching <kitching@chromium.org> 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.h5
-rw-r--r--host/lib/crossystem.c10
-rw-r--r--utility/crossystem.c8
5 files changed, 26 insertions, 6 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c
index 1cd5ba25..0f28404b 100644
--- a/firmware/2lib/2nvstorage.c
+++ b/firmware/2lib/2nvstorage.c
@@ -209,6 +209,9 @@ uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param)
return GETBIT(VB2_NV_OFFS_MISC,
VB2_NV_MISC_POST_EC_SYNC_DELAY);
+ case VB2_NV_MINIOS_PRIORITY:
+ return GETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_MINIOS_PRIORITY);
+
case VB2_NV_DEPRECATED_DEV_BOOT_FASTBOOT_FULL_CAP:
case VB2_NV_DEPRECATED_FASTBOOT_UNLOCK_IN_FW:
case VB2_NV_DEPRECATED_ENABLE_ALT_OS_REQUEST:
@@ -416,6 +419,10 @@ void vb2_nv_set(struct vb2_context *ctx,
SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_POST_EC_SYNC_DELAY);
break;
+ case VB2_NV_MINIOS_PRIORITY:
+ SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_MINIOS_PRIORITY);
+ break;
+
case VB2_NV_DEPRECATED_DEV_BOOT_FASTBOOT_FULL_CAP:
case VB2_NV_DEPRECATED_FASTBOOT_UNLOCK_IN_FW:
case VB2_NV_DEPRECATED_ENABLE_ALT_OS_REQUEST:
diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h
index 2f40b233..fe758230 100644
--- a/firmware/2lib/include/2nvstorage.h
+++ b/firmware/2lib/include/2nvstorage.h
@@ -125,6 +125,8 @@ enum vb2_nv_param {
VB2_NV_POST_EC_SYNC_DELAY,
/* Request booting of diagnostic rom. 0=no, 1=yes. */
VB2_NV_DIAG_REQUEST,
+ /* Priority of miniOS partition to load: 0=MINIOS-A, 1=MINIOS-B. */
+ VB2_NV_MINIOS_PRIORITY,
};
/* Firmware result codes for VB2_NV_FW_RESULT and VB2_NV_FW_PREV_RESULT */
diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h
index 9575e87e..449b8fd3 100644
--- a/firmware/2lib/include/2nvstorage_fields.h
+++ b/firmware/2lib/include/2nvstorage_fields.h
@@ -79,7 +79,7 @@ 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 = 0x00) */
+/* Fields in VB2_NV_OFFS_BOOT2 */
#define VB2_NV_BOOT2_RESULT_MASK 0x03
#define VB2_NV_BOOT2_TRIED 0x04
#define VB2_NV_BOOT2_TRY_NEXT 0x08
@@ -102,11 +102,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 = 0x80) */
+/* Fields in VB2_NV_OFFS_MISC (unused = 0xa0) */
#define VB2_NV_MISC_DEPRECATED_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_MINIOS_PRIORITY 0x10
#define VB2_NV_MISC_POST_EC_SYNC_DELAY 0x40
#endif /* VBOOT_REFERENCE_2NVSTORAGE_FIELDS_H_ */
diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
index 9d23091f..a2c2104a 100644
--- a/host/lib/crossystem.c
+++ b/host/lib/crossystem.c
@@ -532,6 +532,8 @@ const char *VbGetSystemPropertyString(const char *name, char *dest,
return default_boot[v];
else
return "unknown";
+ } else if (!strcasecmp(name, "minios_priority")) {
+ return vb2_get_nv_storage(VB2_NV_MINIOS_PRIORITY) ? "B" : "A";
}
return NULL;
@@ -671,7 +673,13 @@ int VbSetSystemPropertyString(const char* name, const char* value)
return vb2_set_nv_storage(VB2_NV_TRY_NEXT, 1);
else
return -1;
-
+ } else if (!strcasecmp(name, "minios_priority")) {
+ if (!strcasecmp(value, "A"))
+ return vb2_set_nv_storage(VB2_NV_MINIOS_PRIORITY, 0);
+ else if (!strcasecmp(value, "B"))
+ return vb2_set_nv_storage(VB2_NV_MINIOS_PRIORITY, 1);
+ else
+ return -1;
} else if (!strcasecmp(name, "fw_result")) {
int i;
diff --git a/utility/crossystem.c b/utility/crossystem.c
index e5774ac2..7781e94e 100644
--- a/utility/crossystem.c
+++ b/utility/crossystem.c
@@ -53,11 +53,11 @@ const Param sys_param_list[] = {
{"post_ec_sync_delay", CAN_WRITE,
"Short delay after EC software sync (persistent, writable, eve only)"},
{"fw_prev_result", IS_STRING, "Firmware result of previous boot"},
- {"fw_prev_tried", IS_STRING, "Firmware tried on previous boot"},
+ {"fw_prev_tried", IS_STRING, "Firmware tried on previous boot (A or B)"},
{"fw_result", IS_STRING|CAN_WRITE, "Firmware result this boot"},
- {"fw_tried", IS_STRING, "Firmware tried this boot"},
+ {"fw_tried", IS_STRING, "Firmware tried this boot (A or B)"},
{"fw_try_count", CAN_WRITE, "Number of times to try fw_try_next"},
- {"fw_try_next", IS_STRING|CAN_WRITE, "Firmware to try next"},
+ {"fw_try_next", IS_STRING|CAN_WRITE, "Firmware to try next (A or B)"},
{"fw_vboot2", 0, "1 if firmware was selected by vboot2 or 0 otherwise"},
{"fwb_tries", CAN_WRITE, "Try firmware B count"},
{"fwid", IS_STRING, "Active firmware ID"},
@@ -72,6 +72,8 @@ const Param sys_param_list[] = {
{"loc_idx", CAN_WRITE, "Localization index for firmware screens"},
{"mainfw_act", IS_STRING, "Active main firmware"},
{"mainfw_type", IS_STRING, "Active main firmware type"},
+ {"minios_priority", IS_STRING|CAN_WRITE,
+ "miniOS image to try first (A or B)"},
{"nvram_cleared", CAN_WRITE, "Have NV settings been lost? Write 0 to clear"},
{"display_request", CAN_WRITE, "Should we initialize the display at boot?"},
{"phase_enforcement", 0,