[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/34] hw/intc/riscv_aplic: Fix in_clrip[x] read emulation
From: |
Alistair Francis |
Subject: |
[PULL 32/34] hw/intc/riscv_aplic: Fix in_clrip[x] read emulation |
Date: |
Fri, 8 Mar 2024 21:11:50 +1000 |
From: Anup Patel <apatel@ventanamicro.com>
The reads to in_clrip[x] registers return rectified input values of the
interrupt sources.
A rectified input value of an interrupt source is defined by the section
"4.5.2 Source configurations (sourcecfg[1]–sourcecfg[1023])" of the RISC-V
AIA specification as:
"rectified input value = (incoming wire value) XOR (source is inverted)"
Update the riscv_aplic_read_input_word() implementation to match the above.
Fixes: e8f79343cfc8 ("hw/intc: Add RISC-V AIA APLIC device emulation")
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Message-ID: <20240306095722.463296-3-apatel@ventanamicro.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
hw/intc/riscv_aplic.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c
index 775bb96164..6a7fbfa861 100644
--- a/hw/intc/riscv_aplic.c
+++ b/hw/intc/riscv_aplic.c
@@ -162,7 +162,7 @@ static bool is_kvm_aia(bool msimode)
static uint32_t riscv_aplic_read_input_word(RISCVAPLICState *aplic,
uint32_t word)
{
- uint32_t i, irq, ret = 0;
+ uint32_t i, irq, sourcecfg, sm, raw_input, irq_inverted, ret = 0;
for (i = 0; i < 32; i++) {
irq = word * 32 + i;
@@ -170,7 +170,20 @@ static uint32_t
riscv_aplic_read_input_word(RISCVAPLICState *aplic,
continue;
}
- ret |= ((aplic->state[irq] & APLIC_ISTATE_INPUT) ? 1 : 0) << i;
+ sourcecfg = aplic->sourcecfg[irq];
+ if (sourcecfg & APLIC_SOURCECFG_D) {
+ continue;
+ }
+
+ sm = sourcecfg & APLIC_SOURCECFG_SM_MASK;
+ if (sm == APLIC_SOURCECFG_SM_INACTIVE) {
+ continue;
+ }
+
+ raw_input = (aplic->state[irq] & APLIC_ISTATE_INPUT) ? 1 : 0;
+ irq_inverted = (sm == APLIC_SOURCECFG_SM_LEVEL_LOW ||
+ sm == APLIC_SOURCECFG_SM_EDGE_FALL) ? 1 : 0;
+ ret |= (raw_input ^ irq_inverted) << i;
}
return ret;
--
2.44.0
- [PULL 22/34] linux-user/riscv: Add Ztso extension to hwprobe, (continued)
- [PULL 22/34] linux-user/riscv: Add Ztso extension to hwprobe, Alistair Francis, 2024/03/08
- [PULL 23/34] tests: riscv64: Use 'zfa' instead of 'Zfa', Alistair Francis, 2024/03/08
- [PULL 24/34] linux-headers: Update to Linux v6.8-rc6, Alistair Francis, 2024/03/08
- [PULL 25/34] target/riscv/kvm: update KVM exts to Linux 6.8, Alistair Francis, 2024/03/08
- [PULL 26/34] target/riscv: move ratified/frozen exts to non-experimental, Alistair Francis, 2024/03/08
- [PULL 27/34] target/riscv: mcountinhibit, mcounteren, scounteren, hcounteren is 32-bit, Alistair Francis, 2024/03/08
- [PULL 28/34] trans_rvv.c.inc: mark_vs_dirty() before loads and stores, Alistair Francis, 2024/03/08
- [PULL 29/34] trans_rvv.c.inc: remove 'is_store' bool from load/store fns, Alistair Francis, 2024/03/08
- [PULL 30/34] target/riscv: Fix shift count overflow, Alistair Francis, 2024/03/08
- [PULL 31/34] hw/intc/riscv_aplic: Fix setipnum_le write emulation for APLIC MSI-mode, Alistair Francis, 2024/03/08
- [PULL 32/34] hw/intc/riscv_aplic: Fix in_clrip[x] read emulation,
Alistair Francis <=
- [PULL 33/34] target/riscv: Fix privilege mode of G-stage translation for debugging, Alistair Francis, 2024/03/08
- [PULL 34/34] target/riscv: fix ACPI MCFG table, Alistair Francis, 2024/03/08
- Re: [PULL 00/34] riscv-to-apply queue, Peter Maydell, 2024/03/08