summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2018-10-02 20:54:07 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-11-19 16:28:25 -0800
commit0f7779862ca4b4973f52c7b851c65ccb8d9cd147 (patch)
tree36e2c16888c1f4c8f50c95c0a5dce732390879b1
parent9071205452595027cc8d52588f0c6fdf7581f905 (diff)
downloadvboot-0f7779862ca4b4973f52c7b851c65ccb8d9cd147.tar.gz
CHERRY-PICK: vboot: create NVRAM flag to pause after EC software sync
Previously, it is impossible to programmatically enable/disable Alt OS mode in eve. This is because only EC-RW supports the kbatboot keyboard matrix functionality. But, as part of the campfire boot flow, the keyboard matrix is retrieved *immediately* after jumping into EC-RW. We need to insert a small pause in order to allow for some entity (autotest/servo) to send a kbatboot command, simulating the Alt OS keyboard press hotkey. BUG=b:117140648,b:118786884 TEST=Manually use crossystem to set post_ec_sync_delay=1 Reboot, and wait for the delay to begin Run `kbatboot 1 4 1` in EC console Check that AP console contains: "vb2_post_ec_sync_hooks: post_ec_sync_delay 5000 ms..." TEST=make clean && make runtests Note that we are only cherry-picking the changes which affect crossystem in this CL. Firmware changes will still live in campfire-eve branch only. Change-Id: I1305357199d87b80b4edc4e311015106ab07de65 Reviewed-on: https://chromium-review.googlesource.com/c/1256644 Commit-Queue: Joel Kitching <kitching@chromium.org> Tested-by: Joel Kitching <kitching@chromium.org> Trybot-Ready: Joel Kitching <kitching@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> (cherry picked from commit 64d7369976b88b21d8d8a860252023776a2f119e) Reviewed-on: https://chromium-review.googlesource.com/1328389 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r--firmware/2lib/2nvstorage.c8
-rw-r--r--firmware/2lib/include/2nvstorage.h6
-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.c2
6 files changed, 23 insertions, 1 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c
index e721ca6a..182b9218 100644
--- a/firmware/2lib/2nvstorage.c
+++ b/firmware/2lib/2nvstorage.c
@@ -222,6 +222,10 @@ uint32_t vb2_nv_get(struct vb2_context *ctx, enum vb2_nv_param param)
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);
+
+ case VB2_NV_POST_EC_SYNC_DELAY:
+ return GETBIT(VB2_NV_OFFS_MISC,
+ VB2_NV_MISC_POST_EC_SYNC_DELAY);
}
/*
@@ -429,6 +433,10 @@ void vb2_nv_set(struct vb2_context *ctx,
case VB2_NV_DISABLE_ALT_OS_REQUEST:
SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_DISABLE_ALT_OS);
break;
+
+ case VB2_NV_POST_EC_SYNC_DELAY:
+ SETBIT(VB2_NV_OFFS_MISC, VB2_NV_MISC_POST_EC_SYNC_DELAY);
+ break;
}
/*
diff --git a/firmware/2lib/include/2nvstorage.h b/firmware/2lib/include/2nvstorage.h
index 9d8374c0..a5879192 100644
--- a/firmware/2lib/include/2nvstorage.h
+++ b/firmware/2lib/include/2nvstorage.h
@@ -119,6 +119,12 @@ enum vb2_nv_param {
VB2_NV_ENABLE_ALT_OS_REQUEST,
/* Disable AltOS Mode on next boot. */
VB2_NV_DISABLE_ALT_OS_REQUEST,
+ /*
+ * Add a short delay after EC software sync for any interaction
+ * with EC-RW (persistent). Currently used on eve for programmatically
+ * testing Alt OS booting.
+ */
+ VB2_NV_POST_EC_SYNC_DELAY,
};
/* Set default boot in developer mode */
diff --git a/firmware/2lib/include/2nvstorage_fields.h b/firmware/2lib/include/2nvstorage_fields.h
index 4f7b9e22..f370cd26 100644
--- a/firmware/2lib/include/2nvstorage_fields.h
+++ b/firmware/2lib/include/2nvstorage_fields.h
@@ -101,12 +101,13 @@ 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 = 0xc0) */
+/* Fields in VB2_NV_OFFS_MISC (unused = 0x80) */
#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
+#define VB2_NV_MISC_POST_EC_SYNC_DELAY 0x40
#endif /* VBOOT_REFERENCE_VBOOT_2NVSTORAGE_FIELDS_H_ */
diff --git a/host/lib/crossystem.c b/host/lib/crossystem.c
index d87c3f26..0ed88e65 100644
--- a/host/lib/crossystem.c
+++ b/host/lib/crossystem.c
@@ -577,6 +577,8 @@ int VbGetSystemPropertyInt(const char *name)
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);
+ } else if (!strcasecmp(name, "post_ec_sync_delay")) {
+ value = vb2_get_nv_storage(VB2_NV_POST_EC_SYNC_DELAY);
}
return value;
@@ -737,6 +739,8 @@ int VbSetSystemPropertyInt(const char *name, int value)
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);
+ } else if (!strcasecmp(name, "post_ec_sync_delay")) {
+ return vb2_set_nv_storage(VB2_NV_POST_EC_SYNC_DELAY, value);
}
return -1;
diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c
index c945cfe2..9d1b1bb0 100644
--- a/tests/vb2_nvstorage_tests.c
+++ b/tests/vb2_nvstorage_tests.c
@@ -63,6 +63,7 @@ static struct nv_field nvfields[] = {
"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"},
+ {VB2_NV_POST_EC_SYNC_DELAY, 0, 1, 0, "enable post-ec sync delay"},
{0, 0, 0, 0, NULL}
};
diff --git a/utility/crossystem.c b/utility/crossystem.c
index 4ab5d7f3..d7443487 100644
--- a/utility/crossystem.c
+++ b/utility/crossystem.c
@@ -55,6 +55,8 @@ const Param sys_param_list[] = {
{"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"},
+ {"post_ec_sync_delay", CAN_WRITE,
+ "Short delay after EC software sync (persistent, writable, eve only)"},
{"fmap_base", 0, "Main firmware flashmap physical address", "0x%08x"},
{"fw_prev_result", IS_STRING, "Firmware result of previous boot (vboot2)"},
{"fw_prev_tried", IS_STRING, "Firmware tried on previous boot (vboot2)"},