chromeos/cse_board_reset.c: Clear EC AP_IDLE flag

When CSE jumps between RO and RW, it triggers global reset so the
AP goes down to S5 and back to S0. For Chromebox, when AP goes
down to S5 EC set AP_IDLE flag. This cause an issue to warm reset
the Chromebox device when it is in recovery mode and powered by
USB-C adapter. This patch allows AP to direct EC to clear AP_IDLE
flag before trigger reset.

BUG=b:296173534
BRANCH=firmware-dedede-136-6.B
TEST=Chromebox DUT which is powered by USB-C adapter boots up
     after warm reset in recovery mode

Change-Id: Ib0002c1b8313c6f25d2b8767c60639aed8a4f904
Signed-off-by: Derek Huang <derekhuang@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77632
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Reviewed-by: Reka Norman <rekanorman@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Daisuke Nojiri <dnojiri@google.com>
This commit is contained in:
Derek Huang 2023-09-01 07:55:40 +00:00 committed by Eric Lai
parent c6f4738f98
commit 2189640786
2 changed files with 11 additions and 0 deletions

View File

@ -379,3 +379,11 @@ config CSE_BPDT_VERSION
This config indicates the BPDT version used by CSE for a given SoC.
endif
config CSE_RESET_CLEAR_EC_AP_IDLE_FLAG
bool
default y if !SYSTEM_TYPE_LAPTOP
help
Select this if the variant is a Chromebox/base. This allows AP to direct EC
to clear AP_IDLE flag before triggering reset to make sure AP can boot up
after reset.

View File

@ -16,6 +16,9 @@ void cse_board_reset(void)
int ret;
struct cr50_firmware_version version;
if (CONFIG(CSE_RESET_CLEAR_EC_AP_IDLE_FLAG))
google_chromeec_clear_ec_ap_idle();
if (CONFIG(TPM2) && CONFIG(TPM_GOOGLE_CR50)) {
/* Initialize TPM and get the cr50 firmware version. */
ret = tlcl_lib_init();