similarity index 98%rename from kernel/drivers/bus/mhi/core/pm.crename to kernel/drivers/bus/mhi/host/pm.c.. | .. |
---|
298 | 298 | read_lock_irq(&mhi_chan->lock); |
---|
299 | 299 | |
---|
300 | 300 | /* 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) |
---|
302 | 303 | mhi_ring_chan_db(mhi_cntrl, mhi_chan); |
---|
303 | 304 | read_unlock_irq(&mhi_chan->lock); |
---|
304 | 305 | } |
---|
.. | .. |
---|
489 | 490 | u32 in_reset = -1; |
---|
490 | 491 | unsigned long timeout = msecs_to_jiffies(mhi_cntrl->timeout_ms); |
---|
491 | 492 | |
---|
| 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 | + |
---|
492 | 497 | dev_dbg(dev, "Triggering MHI Reset in device\n"); |
---|
493 | 498 | mhi_set_mhi_state(mhi_cntrl, MHI_STATE_RESET); |
---|
494 | 499 | |
---|
.. | .. |
---|
514 | 519 | mhi_write_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_INTVEC, 0); |
---|
515 | 520 | } |
---|
516 | 521 | |
---|
| 522 | +skip_mhi_reset: |
---|
517 | 523 | dev_dbg(dev, |
---|
518 | 524 | "Waiting for all pending event ring processing to complete\n"); |
---|
519 | 525 | mhi_event = mhi_cntrl->mhi_event; |
---|