diff options
author | Joel Kitching <kitching@google.com> | 2018-10-02 20:54:07 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-11-19 16:28:25 -0800 |
commit | 0f7779862ca4b4973f52c7b851c65ccb8d9cd147 (patch) | |
tree | 36e2c16888c1f4c8f50c95c0a5dce732390879b1 | |
parent | 9071205452595027cc8d52588f0c6fdf7581f905 (diff) | |
download | vboot-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.c | 8 | ||||
-rw-r--r-- | firmware/2lib/include/2nvstorage.h | 6 | ||||
-rw-r--r-- | firmware/2lib/include/2nvstorage_fields.h | 3 | ||||
-rw-r--r-- | host/lib/crossystem.c | 4 | ||||
-rw-r--r-- | tests/vb2_nvstorage_tests.c | 1 | ||||
-rw-r--r-- | utility/crossystem.c | 2 |
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)"}, |