[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v7 08/11] target/riscv: Enforce WARL behavior for scounteren/hcou
From: |
Atish Patra |
Subject: |
[PATCH v7 08/11] target/riscv: Enforce WARL behavior for scounteren/hcounteren |
Date: |
Wed, 26 Jun 2024 16:57:28 -0700 |
scounteren/hcountern are also WARL registers similar to mcountern.
Only set the bits for the available counters during the write to
preserve the WARL behavior.
Signed-off-by: Atish Patra <atishp@rivosinc.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/csr.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index e4adfa324efe..6c1a884eec82 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -2994,7 +2994,11 @@ static RISCVException read_scounteren(CPURISCVState
*env, int csrno,
static RISCVException write_scounteren(CPURISCVState *env, int csrno,
target_ulong val)
{
- env->scounteren = val;
+ RISCVCPU *cpu = env_archcpu(env);
+
+ /* WARL register - disable unavailable counters */
+ env->scounteren = val & (cpu->pmu_avail_ctrs | COUNTEREN_CY | COUNTEREN_TM
|
+ COUNTEREN_IR);
return RISCV_EXCP_NONE;
}
@@ -3653,7 +3657,11 @@ static RISCVException read_hcounteren(CPURISCVState
*env, int csrno,
static RISCVException write_hcounteren(CPURISCVState *env, int csrno,
target_ulong val)
{
- env->hcounteren = val;
+ RISCVCPU *cpu = env_archcpu(env);
+
+ /* WARL register - disable unavailable counters */
+ env->hcounteren = val & (cpu->pmu_avail_ctrs | COUNTEREN_CY | COUNTEREN_TM
|
+ COUNTEREN_IR);
return RISCV_EXCP_NONE;
}
--
2.34.1
- [PATCH v7 00/11] Add RISC-V ISA extension smcntrpmf support, Atish Patra, 2024/06/26
- [PATCH v7 01/11] target/riscv: Combine set_mode and set_virt functions., Atish Patra, 2024/06/26
- [PATCH v7 02/11] target/riscv: Fix the predicate functions for mhpmeventhX CSRs, Atish Patra, 2024/06/26
- [PATCH v7 03/11] target/riscv: Add cycle & instret privilege mode filtering properties, Atish Patra, 2024/06/26
- [PATCH v7 04/11] target/riscv: Add cycle & instret privilege mode filtering definitions, Atish Patra, 2024/06/26
- [PATCH v7 05/11] target/riscv: Add cycle & instret privilege mode filtering support, Atish Patra, 2024/06/26
- [PATCH v7 06/11] target/riscv: Implement privilege mode filtering for cycle/instret, Atish Patra, 2024/06/26
- [PATCH v7 07/11] target/riscv: Save counter values during countinhibit update, Atish Patra, 2024/06/26
- [PATCH v7 08/11] target/riscv: Enforce WARL behavior for scounteren/hcounteren,
Atish Patra <=
- [PATCH v7 10/11] target/riscv: More accurately model priv mode filtering., Atish Patra, 2024/06/26
- [PATCH v7 09/11] target/riscv: Start counters from both mhpmcounter and mcountinhibit, Atish Patra, 2024/06/26
- [PATCH v7 11/11] target/riscv: Do not setup pmu timer if OF is disabled, Atish Patra, 2024/06/26