On 7/8/25 3:15 PM, Krishna Chaitanya Chundru wrote: > > > On 6/30/2025 1:13 PM, Muhammad Usama Anjum wrote: >> Don't deinitialize the device context while going into suspend or >> hibernation cycles. Otherwise the resume may fail if at resume time, the >> memory pressure is high and no dma memory is available. >> >> Tested-on: WCN6855 WLAN.HSP.1.1-03926.13-QCAHSPSWPL_V2_SILICONZ_CE-2.52297.6 >> >> Fixes: 3000f85b8f47 ("bus: mhi: core: Add support for basic PM operations") >> Signed-off-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx> >> --- >> drivers/bus/mhi/host/init.c | 11 ++++++----- >> 1 file changed, 6 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/bus/mhi/host/init.c b/drivers/bus/mhi/host/init.c >> index 2e0f18c939e68..8f56e73fdc42e 100644 >> --- a/drivers/bus/mhi/host/init.c >> +++ b/drivers/bus/mhi/host/init.c >> @@ -1133,9 +1133,11 @@ int mhi_prepare_for_power_up(struct mhi_controller *mhi_cntrl) >> mutex_lock(&mhi_cntrl->pm_mutex); >> - ret = mhi_init_dev_ctxt(mhi_cntrl); > mhi init dev ctxt also initializes the ring pointers to base value, > I think we should take care of them also ? Are you referring to mhi_rings? They are getting initialized inside mhi_init_dev_ctxt() and de-initialized in __mhi_deinit_dev_ctxt(). That's why I've not handled them separately. > > - Krishna Chaitanya. >> - if (ret) >> - goto error_dev_ctxt; >> + if (!mhi_cntrl->mhi_ctxt) { >> + ret = mhi_init_dev_ctxt(mhi_cntrl); >> + if (ret) >> + goto error_dev_ctxt; >> + } >> ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, BHIOFF, &bhi_off); >> if (ret) { >> @@ -1212,8 +1214,6 @@ void mhi_deinit_dev_ctxt(struct mhi_controller *mhi_cntrl) >> { >> mhi_cntrl->bhi = NULL; >> mhi_cntrl->bhie = NULL; >> - >> - __mhi_deinit_dev_ctxt(mhi_cntrl); >> } >> void mhi_unprepare_after_power_down(struct mhi_controller *mhi_cntrl) >> @@ -1234,6 +1234,7 @@ void mhi_unprepare_after_power_down(struct mhi_controller *mhi_cntrl) >> } >> mhi_deinit_dev_ctxt(mhi_cntrl); >> + __mhi_deinit_dev_ctxt(mhi_cntrl); >> } >> EXPORT_SYMBOL_GPL(mhi_unprepare_after_power_down); >>