]> git.baikalelectronics.ru Git - kernel.git/commit
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)
commit27a6e8232c127ab1fb48e5106f51b847499b7b90
tree45f4fc49014817913df0229b96db86091be7ae5d
parent900abd43b6d837ba70928a9ee9599ba3be1d2fb6
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