summaryrefslogtreecommitdiffstats
path: root/configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch')
-rw-r--r--configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch b/configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch
new file mode 100644
index 0000000..49f4df9
--- /dev/null
+++ b/configs/platform-rpi/patches/linux-4.4/0009-irqchip-bcm2836-tolerate-IRQs-while-no-flag-is-set-i.patch
@@ -0,0 +1,34 @@
+From: Andrea Merello <andrea.merello@gmail.com>
+Date: Sat, 26 Dec 2015 13:47:23 -0800
+Subject: [PATCH] irqchip: bcm2836: tolerate IRQs while no flag is set in ISR
+
+On my RPi2 I got a lot of:
+unexpected IRQ trap at vector 00
+
+This happens because bcm2836_arm_irqchip_handle_irq() is sometimes
+invoked even if the ISR is clear, and this case is not handled.
+
+This patch explicitly handle this case, fixing the kernel complaints
+about the bad IRQ lookup.
+
+Signed-off-by: Andrea Merello <andrea.merello@gmail.com>
+Reviewed-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Alexander Aring <alex.aring@gmail.com>
+---
+ drivers/irqchip/irq-bcm2836.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c
+index c5ef4dfb5bb0..e314cce70201 100644
+--- a/drivers/irqchip/irq-bcm2836.c
++++ b/drivers/irqchip/irq-bcm2836.c
+@@ -177,7 +177,7 @@ __exception_irq_entry bcm2836_arm_irqchip_handle_irq(struct pt_regs *regs)
+ writel(1 << ipi, mailbox0);
+ handle_IPI(ipi, regs);
+ #endif
+- } else {
++ } else if (stat) {
+ u32 hwirq = ffs(stat) - 1;
+
+ handle_IRQ(irq_linear_revmap(intc.domain, hwirq), regs);