• Vignesh Raghavendra's avatar
    PCI: dwc: pci-dra7xx: Fix MSI IRQ handling · 9a5595ab
    Vignesh Raghavendra authored
    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: default avatarKishon Vijay Abraham I <kishon@ti.com>
    Signed-off-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
    9a5595ab
pci-dra7xx.c 26.6 KB