diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2021-05-27 16:56:28 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2021-05-27 16:56:28 +0200 |
commit | 0f7d2e89111a5bd06735bc4a41893aed3129ace7 (patch) | |
tree | 75ddcce7abb7b60229e14f1dfe4a7ac997d530ce | |
parent | 1f8dceeac1dfa9093eeef340987019664b887083 (diff) | |
parent | 9ed4e6fb669b8fcafc4e8acfa6a36db305d27ac8 (diff) | |
download | trusted-firmware-a-0f7d2e89111a5bd06735bc4a41893aed3129ace7.tar.gz |
Merge "fix(plat/mediatek/pmic_wrap): update idle flow" into integration
-rw-r--r-- | plat/mediatek/common/drivers/pmic_wrap/pmic_wrap_init_v2.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/plat/mediatek/common/drivers/pmic_wrap/pmic_wrap_init_v2.c b/plat/mediatek/common/drivers/pmic_wrap/pmic_wrap_init_v2.c index fca69130a4..d9a79c4949 100644 --- a/plat/mediatek/common/drivers/pmic_wrap/pmic_wrap_init_v2.c +++ b/plat/mediatek/common/drivers/pmic_wrap/pmic_wrap_init_v2.c @@ -26,12 +26,30 @@ static uint32_t pwrap_check_idle(void *wacs_register, uint32_t timeout_us) while (retry != 0) { udelay(WAIT_IDLE_POLLING_DELAY_US); reg_rdata = mmio_read_32((uintptr_t)wacs_register); - if (GET_WACS_FSM(reg_rdata) == SWINF_FSM_IDLE) { + /* if last read command timeout,clear vldclr bit + * read command state machine:FSM_REQ-->wfdle-->WFVLDCLR; + * write:FSM_REQ-->idle + */ + switch (GET_WACS_FSM(reg_rdata)) { + case SWINF_FSM_WFVLDCLR: + mmio_write_32((uintptr_t)&mtk_pwrap->wacs2_vldclr, 0x1); + INFO("WACS_FSM = SWINF_FSM_WFVLDCLR\n"); + break; + case SWINF_FSM_WFDLE: + INFO("WACS_FSM = SWINF_FSM_WFDLE\n"); + break; + case SWINF_FSM_REQ: + INFO("WACS_FSM = SWINF_FSM_REQ\n"); + break; + case SWINF_FSM_IDLE: + goto done; + default: break; } retry--; }; +done: if (retry == 0) { /* timeout */ return E_PWR_WAIT_IDLE_TIMEOUT; |