summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Louvel <paul.louvel@bootlin.com>2026-07-08 12:15:20 +0200
committerChristophe Leroy (CS GROUP) <chleroy@kernel.org>2026-08-03 14:58:59 +0200
commitfeaa9dc2a792e1d0766960368f911bc6b4feaa20 (patch)
treee886f8d16c4aa088fbd6a176032195e0532df00e
parent0887d5f68c9c3413acf4d1e083dd83f1be4205ee (diff)
soc: fsl: qe: Handle spurious interrupts
When no interrupt bits are set in the event register, call handle_bad_irq() to account for the spurious interrupt before exiting the cascade handler. Signed-off-by: Paul Louvel <paul.louvel@bootlin.com> Reviewed-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org> Link: https://lore.kernel.org/r/20260708-qe-pic-gpios-v2-7-1972044cfbd1@bootlin.com Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
-rw-r--r--drivers/soc/fsl/qe/qe_ports_ic.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/soc/fsl/qe/qe_ports_ic.c b/drivers/soc/fsl/qe/qe_ports_ic.c
index bc8b68e5d1a9..29f4334db5a0 100644
--- a/drivers/soc/fsl/qe/qe_ports_ic.c
+++ b/drivers/soc/fsl/qe/qe_ports_ic.c
@@ -80,9 +80,15 @@ static void qepic_cascade(struct irq_desc *desc)
chained_irq_enter(chip, desc);
event = ioread32be(data->reg + CEPIER);
+ if (!event) {
+ handle_bad_irq(desc);
+ goto out;
+ }
+
for_each_set_bit(bit, &event, 32)
generic_handle_domain_irq(data->host, 31 - bit);
+out:
chained_irq_exit(chip, desc);
}