Re: [v1 PATCH 1/1] bus: mhi: core: fix sys error handling latency

From: Krishna Chaitanya Chundru

Date: Wed Jun 10 2026 - 08:45:53 EST




On 6/3/2026 6:36 AM, Qingtao Cao wrote:
> Bring forward the idea to fix the power down latency in
> mhi_pm_disable_transition() further to mhi_pm_sys_error_transition()
> so that the transition into system error (triggered by AT!RESET)
> won't have to return only after the timeout of up to 24 seconds
Hi, 

Generally we should not see this delay, as device is actually clearing
reset. can you give more details what is the device you are using and kernel you
are using etc.

- Krishna Chaitanya.
> Signed-off-by: Qingtao Cao <qingtao.cao.au@xxxxxxxxx>
> ---
> drivers/bus/mhi/host/pm.c | 14 +++-----------
> 1 file changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/bus/mhi/host/pm.c b/drivers/bus/mhi/host/pm.c
> index f799503c8f36..9d29f1591a45 100644
> --- a/drivers/bus/mhi/host/pm.c
> +++ b/drivers/bus/mhi/host/pm.c
> @@ -651,21 +651,13 @@ static void mhi_pm_sys_error_transition(struct mhi_controller *mhi_cntrl)
>
> /* Trigger MHI RESET so that the device will not access host memory */
> if (reset_device) {
> - u32 in_reset = -1;
> - unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms);
> -
> dev_dbg(dev, "Triggering MHI Reset in device\n");
> mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET);
>
> /* Wait for the reset bit to be cleared by the device */
> - ret = wait_event_timeout(mhi_cntrl->state_event,
> - mhi_read_reg_field(mhi_cntrl,
> - mhi_cntrl->regs,
> - MHICTRL,
> - MHICTRL_RESET_MASK,
> - &in_reset) ||
> - !in_reset, timeout);
> - if (!ret || in_reset) {
> + ret = mhi_poll_reg_field(mhi_cntrl, mhi_cntrl->regs, MHICTRL,
> + MHICTRL_RESET_MASK, 0, 25000, mhi_cntrl->timeout_ms);
> + if (ret) {
> dev_err(dev, "Device failed to exit MHI Reset state\n");
> write_lock_irq(&mhi_cntrl->pm_lock);
> cur_state = mhi_tryset_pm_state(mhi_cntrl,