irq-bcm2836: Prevent spurious interrupts, and trap them early
authorPhil Elwell <phil@raspberrypi.org>
Fri, 4 Dec 2015 17:41:50 +0000 (17:41 +0000)
committerRaspbian kernel package updater <root@raspbian.org>
Sun, 8 Oct 2017 00:59:39 +0000 (00:59 +0000)
The old arch-specific IRQ macros included a dsb to ensure the
write to clear the mailbox interrupt completed before returning
from the interrupt. The BCM2836 irqchip driver needs the same
precaution to avoid spurious interrupts.

Spurious interrupts are still possible for other reasons,
though, so trap them early.

drivers/irqchip/irq-bcm2836.c

index d96b2c947e74e3edab3917551c64fbd1ced0f34c..93e3f7660c4230c9f1dd3b195958cb498949b0ca 100644 (file)
@@ -175,6 +175,7 @@ __exception_irq_entry bcm2836_arm_irqchip_handle_irq(struct pt_regs *regs)
                u32 ipi = ffs(mbox_val) - 1;
 
                writel(1 << ipi, mailbox0);
+               dsb(sy);
                handle_IPI(ipi, regs);
 #endif
        } else if (stat) {