All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] irqchip/versatile-fpga: Handle chained IRQs properly
@ 2020-03-18 17:09 ` Sungbo Eo
  0 siblings, 0 replies; 16+ messages in thread
From: Sungbo Eo @ 2020-03-18 17:09 UTC (permalink / raw)
  To: linux-oxnas, Linus Walleij, Thomas Gleixner, Jason Cooper,
	Marc Zyngier, linux-arm-kernel, linux-kernel
  Cc: Sungbo Eo, Neil Armstrong

Enclose the chained handler with chained_irq_{enter,exit}(), so that the
muxed interrupts get properly acked.

This patch also fixes a reboot bug on OX820 SoC, where the jiffies timer
interrupt is never acked. The kernel waits a clock tick forever in
calibrate_delay_converge(), which leads to a boot hang.

Signed-off-by: Sungbo Eo <mans0n@gorani.run>
Cc: Neil Armstrong <narmstrong@baylibre.com>
---
 drivers/irqchip/irq-versatile-fpga.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-versatile-fpga.c b/drivers/irqchip/irq-versatile-fpga.c
index 928858dada75..08faab2fec3e 100644
--- a/drivers/irqchip/irq-versatile-fpga.c
+++ b/drivers/irqchip/irq-versatile-fpga.c
@@ -6,6 +6,7 @@
 #include <linux/irq.h>
 #include <linux/io.h>
 #include <linux/irqchip.h>
+#include <linux/irqchip/chained_irq.h>
 #include <linux/irqchip/versatile-fpga.h>
 #include <linux/irqdomain.h>
 #include <linux/module.h>
@@ -68,12 +69,15 @@ static void fpga_irq_unmask(struct irq_data *d)
 
 static void fpga_irq_handle(struct irq_desc *desc)
 {
+	struct irq_chip *chip = irq_desc_get_chip(desc);
 	struct fpga_irq_data *f = irq_desc_get_handler_data(desc);
 	u32 status = readl(f->base + IRQ_STATUS);
 
+	chained_irq_enter(chip, desc);
+
 	if (status == 0) {
 		do_bad_IRQ(desc);
-		return;
+		goto out;
 	}
 
 	do {
@@ -82,6 +86,9 @@ static void fpga_irq_handle(struct irq_desc *desc)
 		status &= ~(1 << irq);
 		generic_handle_irq(irq_find_mapping(f->domain, irq));
 	} while (status);
+
+out:
+	chained_irq_exit(chip, desc);
 }
 
 /*
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2020-03-29 20:27 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-18 17:09 [PATCH] irqchip/versatile-fpga: Handle chained IRQs properly Sungbo Eo
2020-03-18 17:09 ` Sungbo Eo
2020-03-18 17:48 ` Marc Zyngier
2020-03-18 17:48   ` Marc Zyngier
2020-03-18 18:20   ` Sungbo Eo
2020-03-18 18:20     ` Sungbo Eo
2020-03-18 19:11     ` Marc Zyngier
2020-03-18 19:11       ` Marc Zyngier
2020-03-19  2:34       ` [PATCH v2] " Sungbo Eo
2020-03-19  2:34         ` Sungbo Eo
2020-03-19  8:44         ` Marc Zyngier
2020-03-19  8:44           ` Marc Zyngier
2020-03-19 22:56         ` [linux-oxnas] " Daniel Golle
2020-03-27 10:28         ` Linus Walleij
2020-03-27 10:28           ` Linus Walleij
2020-03-29 20:26         ` [tip: irq/core] " tip-bot2 for Sungbo Eo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.