mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 22:23:14 -04:00
msm: mhi_dev: Fix interrupt storm during Enable/disable
mhi_dev_backup_mmio() and mhi_dev_restore_mmio() does backup/restore of INTR registers of MHI device, causing it to restore interrupts that are not valid during PCIE PM_RST_DEAST event. The fix is to skip the INTR register space. Change-Id: I2a8cde174cf4c6acd7acce13ad0195ed6a9a6f0b Signed-off-by: Subramanian Ananthanarayanan <skananth@codeaurora.org> Signed-off-by: Gauri Joshi <gaurjosh@codeaurora.org>
This commit is contained in:
parent
b3e7aed275
commit
137bc0157e
2 changed files with 10 additions and 5 deletions
|
|
@ -412,7 +412,8 @@ static inline void mhi_dev_ring_inc_index(struct mhi_dev_ring *ring,
|
|||
#define TRACE_DATA_MAX 128
|
||||
#define MHI_DEV_DATA_MAX 512
|
||||
|
||||
#define MHI_DEV_MMIO_RANGE 0xc80
|
||||
#define MHI_DEV_MMIO_RANGE 0xb80
|
||||
#define MHI_DEV_MMIO_OFFSET 0x100
|
||||
|
||||
struct ring_cache_req {
|
||||
struct completion *done;
|
||||
|
|
|
|||
|
|
@ -598,7 +598,8 @@ int mhi_dev_restore_mmio(struct mhi_dev *dev)
|
|||
mhi_dev_mmio_mask_interrupts(dev);
|
||||
|
||||
for (i = 0; i < (MHI_DEV_MMIO_RANGE/4); i++) {
|
||||
reg_cntl_addr = dev->mmio_base_addr + (i * 4);
|
||||
reg_cntl_addr = dev->mmio_base_addr +
|
||||
MHI_DEV_MMIO_OFFSET + (i * 4);
|
||||
reg_cntl_value = dev->mmio_backup[i];
|
||||
writel_relaxed(reg_cntl_value, reg_cntl_addr);
|
||||
}
|
||||
|
|
@ -619,13 +620,16 @@ EXPORT_SYMBOL(mhi_dev_restore_mmio);
|
|||
int mhi_dev_backup_mmio(struct mhi_dev *dev)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
void __iomem *reg_cntl_addr;
|
||||
|
||||
if (WARN_ON(!dev))
|
||||
return -EINVAL;
|
||||
|
||||
for (i = 0; i < MHI_DEV_MMIO_RANGE/4; i++)
|
||||
dev->mmio_backup[i] =
|
||||
readl_relaxed(dev->mmio_base_addr + (i * 4));
|
||||
for (i = 0; i < MHI_DEV_MMIO_RANGE/4; i++) {
|
||||
reg_cntl_addr = (void __iomem *) (dev->mmio_base_addr +
|
||||
MHI_DEV_MMIO_OFFSET + (i * 4));
|
||||
dev->mmio_backup[i] = readl_relaxed(reg_cntl_addr);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue