FAILED: patch "[PATCH] bus: mhi: core: Fix power down latency" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 44b1eba44dc537edf076f131f1eeee7544d0e04f Mon Sep 17 00:00:00 2001
From: Loic Poulain <[email protected]>
Date: Mon, 21 Jun 2021 21:46:10 +0530
Subject: [PATCH] bus: mhi: core: Fix power down latency
On graceful power-down/disable transition, when an MHI reset is performed, the MHI device loses its context, including interrupt configuration. However, the current implementation is waiting for event(irq) driven state change to confirm reset has been completed, which never happens, and causes reset timeout, leading to unexpected high latency of the mhi_power_down procedure (up to 45 seconds).
Fix that by moving to the recently introduced poll_reg_field method, waiting for the reset bit to be cleared, in the same way as the power_on procedure.
drivers/bus/mhi/core/pm.c +5 -13
@@ -465,23 +465,15 @@ static void mhi_pm_disable_transition(struct mhi_controller *mhi_cntrl)/* Trigger MHI RESET so that the device will not access host memory */ if (!MHI_PM_IN_FATAL_STATE (mhi_cntrl->pm_state)) { -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 , -MHICTRL_RESET_SHIFT , - &in_reset) || - !in_reset, timeout); -if (!ret || in_reset) -dev_err (dev,"Device failed to exit MHI Reset state\n" ); + ret =mhi_poll_reg_field (mhi_cntrl, mhi_cntrl->regs,MHICTRL , +MHICTRL_RESET_MASK ,MHICTRL_RESET_SHIFT ,0 , +25000 ); +if (ret) +dev_err (dev,"Device failed to clear MHI Reset\n" );/* * Device will clear BHI_INTVEC as a part of RESET processing,