diff options
author | Rakesh Iyer <riyer@nvidia.com> | 2012-02-16 12:09:48 -0800 |
---|---|---|
committer | Lokesh Pathak <lpathak@nvidia.com> | 2012-02-23 22:25:37 -0800 |
commit | 199850ff2eec72260d84768e273c808ccc068b4c (patch) | |
tree | 7e57d32cd4c825a6196aa24440a9d0c46c77a1eb /arch/arm/mach-tegra/pcie.c | |
parent | 88f88b1dd1427f5ed387b346956a6e6e46008926 (diff) |
arm: tegra: pci: fix lost interrupts condition
Clear the interrupt status before posting events to driver code, to avoid
losing interrupts for devices with high interrupt rate.
Change-Id: I776dff33e273b7d1c0dd10615ce4405acdc867e8
Signed-off-by: Rakesh Iyer <riyer@nvidia.com>
Reviewed-on: http://git-master/r/84356
Reviewed-by: Dan Willemsen <dwillemsen@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/pcie.c')
-rw-r--r-- | arch/arm/mach-tegra/pcie.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c index f9f82a65c6cd..c11a48cd5f1b 100644 --- a/arch/arm/mach-tegra/pcie.c +++ b/arch/arm/mach-tegra/pcie.c @@ -1313,6 +1313,8 @@ static irqreturn_t pci_tegra_msi_isr(int irq, void *arg) while (reg != 0x00000000) { offset = find_first_bit((unsigned long int *)®, 32); index = i * 32 + offset; + /* clear the interrupt */ + afi_writel(1ul << index, AFI_MSI_VEC0_0 + i * 4); if (index < MSI_MAP_SIZE) { if (msi_map[index].used) generic_handle_irq(msi_map[index].irq); @@ -1323,8 +1325,6 @@ static irqreturn_t pci_tegra_msi_isr(int irq, void *arg) /* just clear it*/ printk(KERN_INFO "unexpected MSI (2)\n"); } - /* clear the interrupt */ - afi_writel(1ul << index, AFI_MSI_VEC0_0 + i * 4); /* see if there's any more pending in this vector */ reg = afi_readl(AFI_MSI_VEC0_0 + i * 4); } |