summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarthikeyan Ramasubramanian <kramasub@chromium.org>2019-05-22 11:33:40 -0600
committerCommit Bot <commit-bot@chromium.org>2019-07-15 23:31:34 +0000
commit73cf49cc231479bac1ec675df4b67a7f478a862d (patch)
tree3ca50bc4f978171637e080d73d565f58e0bf41b9
parent9d6dc0d222418f90f5080f6c25cd06ca14abf48b (diff)
downloadvboot-firmware-atlas-11827.B.tar.gz
lib/ec_sync_all: Reboot EC to RO after successful AUX FW updatefirmware-atlas-11827.B
Currently some chips that require AUX FW update request EC reboot to RO after the FW update is applied successfully while some chips do not. It is safe to request EC reboot to RO whenever AUX FW update is applied successfully so that all the chips that require AUX FW update gets reset to a clean state. Update tests to handle the updated code flow and return code correctly. BUG=b:128820536,b:119046668,b:136669276 BRANCH=atlas TEST=Ensure that the device boots to ChromeOS. Force a TCPC FW update and ensure that after it is successfully applied EC reboots to RO. Change-Id: I72849620d90284e49cd1a9b31fc5eadede455c51 Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1672056 Reviewed-by: Karthikeyan Ramasubramanian <kramasub@chromium.org> Commit-Queue: Karthikeyan Ramasubramanian <kramasub@chromium.org> Tested-by: Karthikeyan Ramasubramanian <kramasub@chromium.org> (cherry picked from commit ea164dcfa5d13d857de1c4969cb02d99ca7c9ad8) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1692003 Tested-by: caveh jalali <caveh@chromium.org> Reviewed-by: Matthew Blecker <matthewb@chromium.org> Commit-Queue: Matthew Blecker <matthewb@chromium.org> Auto-Submit: caveh jalali <caveh@chromium.org>
-rw-r--r--firmware/lib/ec_sync_all.c19
-rw-r--r--tests/ec_sync_tests.c5
2 files changed, 15 insertions, 9 deletions
diff --git a/firmware/lib/ec_sync_all.c b/firmware/lib/ec_sync_all.c
index 6c3fe74f..f981a52d 100644
--- a/firmware/lib/ec_sync_all.c
+++ b/firmware/lib/ec_sync_all.c
@@ -44,7 +44,7 @@ VbError_t ec_sync_all(struct vb2_context *ctx)
struct vb2_shared_data *sd = vb2_get_sd(ctx);
VbSharedDataHeader *shared = sd->vbsd;
VbAuxFwUpdateSeverity_t fw_update;
- VbError_t rv;
+ VbError_t rv, update_aux_fw_rv;
rv = ec_sync_check_aux_fw(ctx, &fw_update);
if (rv)
@@ -92,14 +92,19 @@ VbError_t ec_sync_all(struct vb2_context *ctx)
* Aux FW update may request RO reboot to force EC cold reset so also
* unload the option ROM if needed to prevent a second reboot.
*/
- rv = ec_sync_update_aux_fw(ctx);
- if (rv) {
- ec_sync_unload_oprom(ctx, shared, need_wait_screen);
- return rv;
- }
+ update_aux_fw_rv = ec_sync_update_aux_fw(ctx);
- /* Reboot to unload VGA Option ROM if needed */
+ /* Reboot to unload VGA Option ROM for both slow EC & AUX FW updates */
rv = ec_sync_unload_oprom(ctx, shared, need_wait_screen);
+ /* Something went wrong during AUX FW update */
+ if (update_aux_fw_rv)
+ return update_aux_fw_rv;
+ /*
+ * AUX FW Update is applied successfully. Request EC reboot to RO,
+ * so that the chips that had FW update gets reset to a clean state.
+ */
+ if (fw_update > VB_AUX_FW_NO_UPDATE)
+ return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
if (rv)
return rv;
diff --git a/tests/ec_sync_tests.c b/tests/ec_sync_tests.c
index a971b961..1cec7f24 100644
--- a/tests/ec_sync_tests.c
+++ b/tests/ec_sync_tests.c
@@ -427,7 +427,7 @@ static void VbSoftwareSyncTest(void)
ResetMocks();
ec_aux_fw_mock_severity = VB_AUX_FW_FAST_UPDATE;
- test_ssync(VBERROR_SUCCESS, 0,
+ test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, 0,
"Fast auxiliary FW update needed");
TEST_EQ(screens_count, 0,
" wait screen skipped");
@@ -436,7 +436,7 @@ static void VbSoftwareSyncTest(void)
ResetMocks();
ec_aux_fw_mock_severity = VB_AUX_FW_SLOW_UPDATE;
- test_ssync(VBERROR_SUCCESS, 0,
+ test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, 0,
"Slow auxiliary FW update needed");
TEST_EQ(ec_aux_fw_update_req, 1, " aux fw update requested");
TEST_EQ(ec_aux_fw_protected, 1, " aux fw protected");
@@ -444,6 +444,7 @@ static void VbSoftwareSyncTest(void)
" wait screen forced");
ResetMocks();
+ ec_aux_fw_mock_severity = VB_AUX_FW_FAST_UPDATE;
ec_aux_fw_retval = VBERROR_UNKNOWN;
test_ssync(VBERROR_UNKNOWN, VB2_RECOVERY_AUX_FW_UPDATE,
"Error updating AUX firmware");