Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 137bc015 authored by Subramanian Ananthanarayanan's avatar Subramanian Ananthanarayanan Committed by Gauri Joshi
Browse files

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: default avatarSubramanian Ananthanarayanan <skananth@codeaurora.org>
Signed-off-by: default avatarGauri Joshi <gaurjosh@codeaurora.org>
parent b3e7aed2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
+8 −4
Original line number Diff line number Diff line
@@ -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;
}