From: Alistair Francis Date: Sat, 25 Jul 2020 05:34:40 +0000 (-0700) Subject: hw/intc: ibex_plic: Update the pending irqs X-Git-Tag: v5.2.0-rc0~167^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c43388bbfd0999edacc269e7d06eeaaf19b9d320;p=thirdparty%2Fqemu.git hw/intc: ibex_plic: Update the pending irqs After a claim or a priority change we need to update the pending interrupts. This is based on the same patch for the SiFive PLIC: 55765822804f5a58594e "riscv: plic: Add a couple of mising sifive_plic_update calls" Signed-off-by: Alistair Francis Cc: Jessica Clarke Reviewed-by: Philippe Mathieu-Daudé Message-Id: <0693aa700a4c67c49b3f1c973a82b257fdb7198d.1595655188.git.alistair.francis@wdc.com> --- diff --git a/hw/intc/ibex_plic.c b/hw/intc/ibex_plic.c index 41079518c6a..578edd2ce02 100644 --- a/hw/intc/ibex_plic.c +++ b/hw/intc/ibex_plic.c @@ -121,6 +121,9 @@ static uint64_t ibex_plic_read(void *opaque, hwaddr addr, s->pending[pending_num] &= ~(1 << (s->claim % 32)); ret = s->claim; + + /* Update the interrupt status after the claim */ + ibex_plic_update(s); } return ret; @@ -140,6 +143,7 @@ static void ibex_plic_write(void *opaque, hwaddr addr, } else if (addr_between(addr, s->priority_base, s->priority_num)) { uint32_t irq = ((addr - s->priority_base) >> 2) + 1; s->priority[irq] = value & 7; + ibex_plic_update(s); } else if (addr_between(addr, s->enable_base, s->enable_num)) { uint32_t enable_reg = (addr - s->enable_base) / 4;