aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Bradford <rbradford@rivosinc.com>2025-02-10 15:37:13 +0000
committerAlistair Francis <alistair.francis@wdc.com>2025-03-04 15:42:54 +1000
commit2c1b42144018ec5ab097e003b974e3a094d73b2f (patch)
treed3475c36ba8c09d6b15ec641ec86624b358feee4
parent8b65852196650417532ff924c8a2cb0117e2be19 (diff)
downloadqemu-2c1b42144018ec5ab097e003b974e3a094d73b2f.zip
qemu-2c1b42144018ec5ab097e003b974e3a094d73b2f.tar.gz
qemu-2c1b42144018ec5ab097e003b974e3a094d73b2f.tar.bz2
target/riscv: Respect mseccfg.RLB bit for TOR mode PMP entry
When running in TOR mode (Top of Range) the next PMP entry controls whether the entry is locked. However simply checking if the PMP_LOCK bit is set is not sufficient with the Smepmp extension which now provides a bit (mseccfg.RLB (Rule Lock Bypass)) to disregard the lock bits. In order to respect this bit use the convenience pmp_is_locked() function rather than directly checking PMP_LOCK since this function checks mseccfg.RLB. Signed-off-by: Rob Bradford <rbradford@rivosinc.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20250210153713.343626-1-rbradford@rivosinc.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-rw-r--r--target/riscv/pmp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c
index a185c24..85ab270 100644
--- a/target/riscv/pmp.c
+++ b/target/riscv/pmp.c
@@ -524,7 +524,7 @@ void pmpaddr_csr_write(CPURISCVState *env, uint32_t addr_index,
uint8_t pmp_cfg = env->pmp_state.pmp[addr_index + 1].cfg_reg;
is_next_cfg_tor = PMP_AMATCH_TOR == pmp_get_a_field(pmp_cfg);
- if (pmp_cfg & PMP_LOCK && is_next_cfg_tor) {
+ if (pmp_is_locked(env, addr_index + 1) && is_next_cfg_tor) {
qemu_log_mask(LOG_GUEST_ERROR,
"ignoring pmpaddr write - pmpcfg + 1 locked\n");
return;