|
@@ -449,14 +449,17 @@ static irqreturn_t xilinx_pcie_intr_handler(int irq, void *data)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
- /* Clear interrupt FIFO register 1 */
|
|
|
- pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK,
|
|
|
- XILINX_PCIE_REG_RPIFR1);
|
|
|
-
|
|
|
- /* Handle INTx Interrupt */
|
|
|
- val = ((val & XILINX_PCIE_RPIFR1_INTR_MASK) >>
|
|
|
- XILINX_PCIE_RPIFR1_INTR_SHIFT) + 1;
|
|
|
- generic_handle_irq(irq_find_mapping(port->irq_domain, val));
|
|
|
+ if (!(val & XILINX_PCIE_RPIFR1_MSI_INTR)) {
|
|
|
+ /* Clear interrupt FIFO register 1 */
|
|
|
+ pcie_write(port, XILINX_PCIE_RPIFR1_ALL_MASK,
|
|
|
+ XILINX_PCIE_REG_RPIFR1);
|
|
|
+
|
|
|
+ /* Handle INTx Interrupt */
|
|
|
+ val = ((val & XILINX_PCIE_RPIFR1_INTR_MASK) >>
|
|
|
+ XILINX_PCIE_RPIFR1_INTR_SHIFT) + 1;
|
|
|
+ generic_handle_irq(irq_find_mapping(port->irq_domain,
|
|
|
+ val));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (status & XILINX_PCIE_INTR_MSI) {
|