diff options
-rw-r--r-- | firmware/lib/ec_sync_all.c | 19 | ||||
-rw-r--r-- | tests/ec_sync_tests.c | 5 |
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"); |