openwrt/target/linux/ar71xx/patches-4.9/955-qca953x-fix-potential-missing-irq-dispatch.patch

28 lines
681 B
Diff
Raw Normal View History

--- a/arch/mips/ath79/irq.c
+++ b/arch/mips/ath79/irq.c
@@ -69,15 +69,21 @@ static void qca953x_ip2_irq_dispatch(str
u32 status;
status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS);
+ status &= QCA953X_PCIE_WMAC_INT_PCIE_ALL | QCA953X_PCIE_WMAC_INT_WMAC_ALL;
+
+ if (status == 0) {
+ spurious_interrupt();
+ return;
+ }
if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) {
ath79_ddr_wb_flush(3);
generic_handle_irq(ATH79_IP2_IRQ(0));
- } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
+ }
+
+ if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
ath79_ddr_wb_flush(4);
generic_handle_irq(ATH79_IP2_IRQ(1));
- } else {
- spurious_interrupt();
}
}