brcm2708: update linux 4.4 patches to latest version
[openwrt/openwrt.git] / target / linux / brcm2708 / patches-4.4 / 0005-irq-bcm2836-Prevent-spurious-interrupts-and-trap-the.patch
1 From 640ebb7ef07930c2f22362cadf8bfc3e46064dc0 Mon Sep 17 00:00:00 2001
2 From: Phil Elwell <phil@raspberrypi.org>
3 Date: Fri, 4 Dec 2015 17:41:50 +0000
4 Subject: [PATCH] irq-bcm2836: Prevent spurious interrupts, and trap them early
5
6 The old arch-specific IRQ macros included a dsb to ensure the
7 write to clear the mailbox interrupt completed before returning
8 from the interrupt. The BCM2836 irqchip driver needs the same
9 precaution to avoid spurious interrupts.
10
11 Spurious interrupts are still possible for other reasons,
12 though, so trap them early.
13 ---
14 drivers/irqchip/irq-bcm2836.c | 3 ++-
15 1 file changed, 2 insertions(+), 1 deletion(-)
16
17 --- a/drivers/irqchip/irq-bcm2836.c
18 +++ b/drivers/irqchip/irq-bcm2836.c
19 @@ -170,9 +170,10 @@ __exception_irq_entry bcm2836_arm_irqchi
20 u32 ipi = ffs(mbox_val) - 1;
21
22 writel(1 << ipi, mailbox0);
23 + dsb();
24 handle_IPI(ipi, regs);
25 #endif
26 - } else {
27 + } else if (stat) {
28 u32 hwirq = ffs(stat) - 1;
29
30 handle_IRQ(irq_linear_revmap(intc.domain, hwirq), regs);