Commit 9ed4e6fb authored by Hsin-Hsiung Wang's avatar Hsin-Hsiung Wang Committed by hsin-hsiung.wang
Browse files

fix(plat/mediatek/pmic_wrap): update idle flow



Update idle flow in case of last read command timeout.
Signed-off-by: default avatarHsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
Change-Id: Idb0552d70d59b23822c38269d0fa9fe9ac0d6975
parent c51afaff
...@@ -26,12 +26,30 @@ static uint32_t pwrap_check_idle(void *wacs_register, uint32_t timeout_us) ...@@ -26,12 +26,30 @@ static uint32_t pwrap_check_idle(void *wacs_register, uint32_t timeout_us)
while (retry != 0) { while (retry != 0) {
udelay(WAIT_IDLE_POLLING_DELAY_US); udelay(WAIT_IDLE_POLLING_DELAY_US);
reg_rdata = mmio_read_32((uintptr_t)wacs_register); 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; break;
} }
retry--; retry--;
}; };
done:
if (retry == 0) { if (retry == 0) {
/* timeout */ /* timeout */
return E_PWR_WAIT_IDLE_TIMEOUT; return E_PWR_WAIT_IDLE_TIMEOUT;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment