PCI: dwc: pci-dra7xx: Fix MSI IRQ handling
authorVignesh Raghavendra <vigneshr@ti.com>
Fri, 27 Mar 2020 09:54:34 +0000 (15:24 +0530)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Fri, 27 Mar 2020 14:40:23 +0000 (14:40 +0000)
commit9a5595ab21a9d1230db47ce8cd2059885176956f
tree45f4fc49014817913df0229b96db86091be7ae5d
parentbb6d3fb354c5ee8d6bde2d576eb7220ea09862b9
PCI: dwc: pci-dra7xx: Fix MSI IRQ handling

Due to an issue with PCIe wrapper logic built for the DWC PCIe IP on
dra7xx, the driver needs to ensure that there are no pending MSI IRQ
vector set (i.e PCIE_MSI_INTR0_STATUS reads 0 at least once) before
exiting IRQ handler otherwise the dra7xx PCIe wrapper will not register
new MSI IRQs even though PCIE_MSI_INTR0_STATUS reports IRQs are pending.

Therefore it's no longer possible to use default IRQ handler provided by
DWC library.

Add an irqchip implementation inside pci-dra7xx.c and install new MSI
IRQ handler to handle the above errata.

This fixes a bug, where PCIe wifi cards with 4 DMA queues like Intel
8260 used to throw following error and stall during ping/iperf3 tests.

[   97.776310] iwlwifi 0000:01:00.0: Queue 9 stuck for 2500 ms.

Tested-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
drivers/pci/controller/dwc/pci-dra7xx.c