[PATCH 3/3] PCI: dwc: pci-dra7xx: Handle legacy and MSI IRQs together

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Currently, pci-dra7xx driver handles MSI and Legacy IRQs exclusive of
each other. This is not true, as there maybe both legacy and MSI IRQs
raised at the same time. Fix this by making sure that driver handles
both MSI and legacy IRQs in the IRQ handler.

Signed-off-by: Vignesh R <vigneshr@xxxxxx>
---
 drivers/pci/dwc/pci-dra7xx.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/pci/dwc/pci-dra7xx.c b/drivers/pci/dwc/pci-dra7xx.c
index 3420cbf7b60a..1ddb62620acc 100644
--- a/drivers/pci/dwc/pci-dra7xx.c
+++ b/drivers/pci/dwc/pci-dra7xx.c
@@ -261,8 +261,7 @@ static irqreturn_t dra7xx_pcie_msi_irq_handler(int irq, void *arg)
 	reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI);
 	dra7xx_pcie_writel(dra7xx, PCIECTRL_DRA7XX_CONF_IRQSTATUS_MSI, reg);
 
-	switch (reg) {
-	case MSI:
+	if (reg & MSI) {
 		/*
 		 * Need to make sure no MSI IRQs are pending before
 		 * exiting handler, else the wrapper will not catch new
@@ -279,17 +278,13 @@ static irqreturn_t dra7xx_pcie_msi_irq_handler(int irq, void *arg)
 					   reg);
 			return IRQ_HANDLED;
 		}
-		break;
-	case INTA:
-	case INTB:
-	case INTC:
-	case INTD:
+	}
+	if (reg & LEG_EP_INTERRUPTS) {
 		for_each_set_bit(bit, &reg, PCI_NUM_INTX) {
 			virq = irq_find_mapping(dra7xx->irq_domain, bit);
 			if (virq)
 				generic_handle_irq(virq);
 		}
-		break;
 	}
 
 	return IRQ_HANDLED;
-- 
2.16.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux