summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/pcie.c
diff options
context:
space:
mode:
authorRakesh Iyer <riyer@nvidia.com>2012-02-16 12:09:48 -0800
committerLokesh Pathak <lpathak@nvidia.com>2012-02-23 22:25:37 -0800
commit199850ff2eec72260d84768e273c808ccc068b4c (patch)
tree7e57d32cd4c825a6196aa24440a9d0c46c77a1eb /arch/arm/mach-tegra/pcie.c
parent88f88b1dd1427f5ed387b346956a6e6e46008926 (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.c4
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 *)&reg, 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);
}