aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Chang <frank.chang@sifive.com>2024-03-21 18:49:48 +0800
committerAlistair Francis <alistair.francis@wdc.com>2024-03-22 15:29:44 +1000
commit078189b327ae5c5727b51ec714d9663b1d0ca3df (patch)
tree624c3cd215b32fe20d8f39cf7864f4bb1fb6fefa
parent0a11629c915f61df798919db51a18ffe4649cb65 (diff)
hw/intc: Update APLIC IDC after claiming iforce register
Currently, QEMU only sets the iforce register to 0 and returns early when claiming the iforce register. However, this may leave mip.meip remains at 1 if a spurious external interrupt triggered by iforce register is the only pending interrupt to be claimed, and the interrupt cannot be lowered as expected. This commit fixes this issue by calling riscv_aplic_idc_update() to update the IDC status after the iforce register is claimed. Signed-off-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Jim Shu <jim.shu@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20240321104951.12104-1-frank.chang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-rw-r--r--hw/intc/riscv_aplic.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c
index 6a7fbfa861..fc5df0d598 100644
--- a/hw/intc/riscv_aplic.c
+++ b/hw/intc/riscv_aplic.c
@@ -488,6 +488,7 @@ static uint32_t riscv_aplic_idc_claimi(RISCVAPLICState *aplic, uint32_t idc)
if (!topi) {
aplic->iforce[idc] = 0;
+ riscv_aplic_idc_update(aplic, idc);
return 0;
}