diff options
author | Baochen Qiang <quic_bqiang@quicinc.com> | 2023-06-06 15:24:57 +0800 |
---|---|---|
committer | Pierre-Loup A. Griffais <pgriffais@valvesoftware.com> | 2023-11-02 16:07:53 -0700 |
commit | ccb6719ae5890cf536cf1e7d436d3c51613ed225 (patch) | |
tree | b04ca908e2b102d3f7de563bfbd1303636b910b7 /drivers/bus | |
parent | f68ff9e74a9f435a159cc08b0b7670dc744b662a (diff) | |
download | linux-ccb6719ae5890cf536cf1e7d436d3c51613ed225.tar.gz |
mhi: host: assert wake DB only in valid PM state in mhi_intvec_threaded_handler
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
Diffstat (limited to 'drivers/bus')
-rw-r--r-- | drivers/bus/mhi/host/main.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c index a7aa06b58d90..ee4b43b17e8a 100644 --- a/drivers/bus/mhi/host/main.c +++ b/drivers/bus/mhi/host/main.c @@ -482,13 +482,23 @@ irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv) enum mhi_state state; enum mhi_pm_state pm_state = 0; enum mhi_ee_type ee; + int ret; + bool can_wake; + + can_wake = MHI_WAKE_DB_SET_VALID(mhi_cntrl->pm_state) && + MHI_WAKE_DB_CLEAR_VALID(mhi_cntrl->pm_state); - mhi_device_get_sync(mhi_cntrl->mhi_dev); + if (can_wake) { + ret = mhi_device_get_sync(mhi_cntrl->mhi_dev); + if (ret) + printk("%s %d: mhi get failed %d\n", __func__, __LINE__, ret); + } write_lock_irq(&mhi_cntrl->pm_lock); if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { write_unlock_irq(&mhi_cntrl->pm_lock); - mhi_device_put(mhi_cntrl->mhi_dev); + if (can_wake) + mhi_device_put(mhi_cntrl->mhi_dev); goto exit_intvec; } @@ -505,7 +515,8 @@ irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv) MHI_PM_SYS_ERR_DETECT); } write_unlock_irq(&mhi_cntrl->pm_lock); - mhi_device_put(mhi_cntrl->mhi_dev); + if (can_wake) + mhi_device_put(mhi_cntrl->mhi_dev); if (pm_state != MHI_PM_SYS_ERR_DETECT) goto exit_intvec; |