mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
RISC-V: Implement existential predicates for CSRs
CSR predicate functions are added to the CSR table. mstatus.FS and counter enable checks are moved to predicate functions and two new predicates are added to check misa.S for s* CSRs and a new PMP CPU feature for pmp* CSRs. Processors that don't implement S-mode will trap on access to s* CSRs and processors that don't implement PMP will trap on accesses to pmp* CSRs. PMP checks are disabled in riscv_cpu_handle_mmu_fault when the PMP CPU feature is not present. Signed-off-by: Michael Clark <mjc@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
This commit is contained in:
parent
71877e2969
commit
a88365c199
4 changed files with 105 additions and 79 deletions
|
@ -126,6 +126,7 @@ static void rv32gcsu_priv1_09_1_cpu_init(Object *obj)
|
|||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_09_1);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_MMU);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
static void rv32gcsu_priv1_10_0_cpu_init(Object *obj)
|
||||
|
@ -135,6 +136,7 @@ static void rv32gcsu_priv1_10_0_cpu_init(Object *obj)
|
|||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_10_0);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_MMU);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
static void rv32imacu_nommu_cpu_init(Object *obj)
|
||||
|
@ -143,6 +145,7 @@ static void rv32imacu_nommu_cpu_init(Object *obj)
|
|||
set_misa(env, RV32 | RVI | RVM | RVA | RVC | RVU);
|
||||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_10_0);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
#elif defined(TARGET_RISCV64)
|
||||
|
@ -154,6 +157,7 @@ static void rv64gcsu_priv1_09_1_cpu_init(Object *obj)
|
|||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_09_1);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_MMU);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
static void rv64gcsu_priv1_10_0_cpu_init(Object *obj)
|
||||
|
@ -163,6 +167,7 @@ static void rv64gcsu_priv1_10_0_cpu_init(Object *obj)
|
|||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_10_0);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_MMU);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
static void rv64imacu_nommu_cpu_init(Object *obj)
|
||||
|
@ -171,6 +176,7 @@ static void rv64imacu_nommu_cpu_init(Object *obj)
|
|||
set_misa(env, RV64 | RVI | RVM | RVA | RVC | RVU);
|
||||
set_versions(env, USER_VERSION_2_02_0, PRIV_VERSION_1_10_0);
|
||||
set_resetvec(env, DEFAULT_RSTVEC);
|
||||
set_feature(env, RISCV_FEATURE_PMP);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue