]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
hw/intc/aspeed: Fix IRQ handler mask check
authorSteven Lee <steven_lee@aspeedtech.com>
Thu, 20 Mar 2025 09:25:43 +0000 (17:25 +0800)
committerCédric Le Goater <clg@redhat.com>
Sun, 23 Mar 2025 17:42:16 +0000 (18:42 +0100)
Updated the IRQ handler mask check to AND with select variable.
This ensures that the interrupt service routine is correctly triggered
for the interrupts within the same irq group.

For example, both `eth0` and the debug UART are handled in `GICINT132`.
Without this fix, the debug console may hang if the `eth0` ISR is not
handled.

Signed-off-by: Steven Lee <steven_lee@aspeedtech.com>
Change-Id: Ic3609eb72218dfd68be6057d78b8953b18828709
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Fixes: d831c5fd8682 ("aspeed/intc: Add AST2700 support")
Link: https://lore.kernel.org/qemu-devel/20250320092543.4040672-2-steven_lee@aspeedtech.com
Signed-off-by: Cédric Le Goater <clg@redhat.com>
hw/intc/aspeed_intc.c

index 3fd417084f5b09a48b2edf6bd208b90858b5d0c8..f17bf439256a7e32112937e47aa1017d71f086c5 100644 (file)
@@ -111,7 +111,7 @@ static void aspeed_intc_set_irq_handler(AspeedINTCState *s,
     outpin_idx = intc_irq->outpin_idx;
     inpin_idx = intc_irq->inpin_idx;
 
-    if (s->mask[inpin_idx] || s->regs[status_reg]) {
+    if ((s->mask[inpin_idx] & select) || (s->regs[status_reg] & select)) {
         /*
          * a. mask is not 0 means in ISR mode
          * sources interrupt routine are executing.