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