[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v3 26/43] target/riscv: Clear mstatus.MPRV when leaving M-mode for
From: |
Alistair Francis |
Subject: |
[PULL v3 26/43] target/riscv: Clear mstatus.MPRV when leaving M-mode for priv spec 1.12+ |
Date: |
Fri, 6 Jan 2023 13:13:40 +1000 |
From: Bin Meng <bmeng@tinylab.org>
Since priv spec v1.12, MRET and SRET now clear mstatus.MPRV when
leaving M-mode.
Signed-off-by: Bin Meng <bmeng@tinylab.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20221207090037.281452-2-bmeng@tinylab.org>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/op_helper.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c
index a047d38152..878bcb03b8 100644
--- a/target/riscv/op_helper.c
+++ b/target/riscv/op_helper.c
@@ -154,6 +154,9 @@ target_ulong helper_sret(CPURISCVState *env)
get_field(mstatus, MSTATUS_SPIE));
mstatus = set_field(mstatus, MSTATUS_SPIE, 1);
mstatus = set_field(mstatus, MSTATUS_SPP, PRV_U);
+ if (env->priv_ver >= PRIV_VERSION_1_12_0) {
+ mstatus = set_field(mstatus, MSTATUS_MPRV, 0);
+ }
env->mstatus = mstatus;
if (riscv_has_ext(env, RVH) && !riscv_cpu_virt_enabled(env)) {
@@ -203,6 +206,9 @@ target_ulong helper_mret(CPURISCVState *env)
mstatus = set_field(mstatus, MSTATUS_MPIE, 1);
mstatus = set_field(mstatus, MSTATUS_MPP, PRV_U);
mstatus = set_field(mstatus, MSTATUS_MPV, 0);
+ if ((env->priv_ver >= PRIV_VERSION_1_12_0) && (prev_priv != PRV_M)) {
+ mstatus = set_field(mstatus, MSTATUS_MPRV, 0);
+ }
env->mstatus = mstatus;
riscv_cpu_set_mode(env, prev_priv);
--
2.39.0
- [PULL v3 16/43] hw/riscv: virt: Remove the redundant ipi-id property, (continued)
- [PULL v3 16/43] hw/riscv: virt: Remove the redundant ipi-id property, Alistair Francis, 2023/01/05
- [PULL v3 18/43] target/riscv: Add some comments for sstatus CSR in riscv_cpu_dump_state(), Alistair Francis, 2023/01/05
- [PULL v3 17/43] target/riscv: support cache-related PMU events in virtual mode, Alistair Francis, 2023/01/05
- [PULL v3 22/43] hw/intc: sifive_plic: fix out-of-bound access of source_priority array, Alistair Francis, 2023/01/05
- [PULL v3 19/43] hw/misc: pfsoc: add fabric clocks to ioscb, Alistair Francis, 2023/01/05
- [PULL v3 21/43] hw/{misc, riscv}: pfsoc: add system controller as unimplemented, Alistair Francis, 2023/01/05
- [PULL v3 20/43] hw/riscv: pfsoc: add missing FICs as unimplemented, Alistair Francis, 2023/01/05
- [PULL v3 23/43] target/riscv: Fix mret exception cause when no pmp rule is configured, Alistair Francis, 2023/01/05
- [PULL v3 24/43] target/riscv: Set pc_succ_insn for !rvc illegal insn, Alistair Francis, 2023/01/05
- [PULL v3 25/43] target/riscv: Simplify helper_sret() a little bit, Alistair Francis, 2023/01/05
- [PULL v3 26/43] target/riscv: Clear mstatus.MPRV when leaving M-mode for priv spec 1.12+,
Alistair Francis <=
- [PULL v3 27/43] RISC-V: Add Zawrs ISA extension support, Alistair Francis, 2023/01/05
- [PULL v3 28/43] hw/riscv: Select MSI_NONBROKEN in SIFIVE_PLIC, Alistair Francis, 2023/01/05
- [PULL v3 29/43] hw/intc: Select MSI_NONBROKEN in RISC-V AIA interrupt controllers, Alistair Francis, 2023/01/05
- [PULL v3 30/43] hw/riscv: Fix opentitan dependency to SIFIVE_PLIC, Alistair Francis, 2023/01/05
- [PULL v3 31/43] hw/riscv: Sort machines Kconfig options in alphabetical order, Alistair Francis, 2023/01/05
- [PULL v3 33/43] hw/intc: sifive_plic: Drop PLICMode_H, Alistair Francis, 2023/01/05
- [PULL v3 37/43] hw/riscv: microchip_pfsoc: Fix the number of interrupt sources of PLIC, Alistair Francis, 2023/01/05
- [PULL v3 34/43] hw/intc: sifive_plic: Improve robustness of the PLIC config parser, Alistair Francis, 2023/01/05
- [PULL v3 36/43] hw/intc: sifive_plic: Update "num-sources" property default value, Alistair Francis, 2023/01/05
- [PULL v3 40/43] hw/riscv: virt: Fix the value of "riscv, ndev" in the dtb, Alistair Francis, 2023/01/05