hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/bus/mhi/core/pm.c
similarity index 98%rename from kernel/drivers/bus/mhi/core/pm.crename to kernel/drivers/bus/mhi/host/pm.c
....@@ -298,7 +298,8 @@
298298 read_lock_irq(&mhi_chan->lock);
299299
300300 /* Only ring DB if ring is not empty */
301
- if (tre_ring->base && tre_ring->wp != tre_ring->rp)
301
+ if (tre_ring->base && tre_ring->wp != tre_ring->rp &&
302
+ mhi_chan->ch_state == MHI_CH_STATE_ENABLED)
302303 mhi_ring_chan_db(mhi_cntrl, mhi_chan);
303304 read_unlock_irq(&mhi_chan->lock);
304305 }
....@@ -489,6 +490,10 @@
489490 u32 in_reset = -1;
490491 unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms);
491492
493
+ /* Skip MHI RESET if in RDDM state */
494
+ if (mhi_cntrl->rddm_image && mhi_get_exec_env(mhi_cntrl) == MHI_EE_RDDM)
495
+ goto skip_mhi_reset;
496
+
492497 dev_dbg(dev, "Triggering MHI Reset in device\n");
493498 mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET);
494499
....@@ -514,6 +519,7 @@
514519 mhi_write_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_INTVEC, 0);
515520 }
516521
522
+skip_mhi_reset:
517523 dev_dbg(dev,
518524 "Waiting for all pending event ring processing to complete\n");
519525 mhi_event = mhi_cntrl->mhi_event;