aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtish Patra <atishp@rivosinc.com>2025-02-06 01:58:47 -0800
committerAlistair Francis <alistair.francis@wdc.com>2025-03-04 15:42:54 +1000
commitabe9b81ee41b607eab1928f337837a19acae3208 (patch)
treef70d842655ed4a33c54d0151d0da2a0224f1a96f
parent59eaf1570456b701fe6dfa4a8f747e65633c385f (diff)
downloadqemu-abe9b81ee41b607eab1928f337837a19acae3208.zip
qemu-abe9b81ee41b607eab1928f337837a19acae3208.tar.gz
qemu-abe9b81ee41b607eab1928f337837a19acae3208.tar.bz2
target/riscv: Mask out upper sscofpmf bits during validation
As per the ISA definition, the upper 8 bits in hpmevent are defined by Sscofpmf for privilege mode filtering and overflow bits while the lower 56 bits are desginated for platform specific hpmevent values. For the reset case, mhpmevent value should have zero in lower 56 bits. Software may set the OF bit to indicate disable interrupt. Ensure that correct value is checked after masking while clearing the event encodings. Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Atish Patra <atishp@rivosinc.com> Message-ID: <20250206-pmu_minor_fixes-v2-2-1bb0f4aeb8b4@rivosinc.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
-rw-r--r--target/riscv/pmu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/target/riscv/pmu.c b/target/riscv/pmu.c
index cf71366..0408f96 100644
--- a/target/riscv/pmu.c
+++ b/target/riscv/pmu.c
@@ -390,7 +390,7 @@ int riscv_pmu_update_event_map(CPURISCVState *env, uint64_t value,
* Expected mhpmevent value is zero for reset case. Remove the current
* mapping.
*/
- if (!value) {
+ if (!(value & MHPMEVENT_IDX_MASK)) {
g_hash_table_foreach_remove(cpu->pmu_event_ctr_map,
pmu_remove_event_map,
GUINT_TO_POINTER(ctr_idx));