target/riscv: Support MSTATUS.MPV/GVA only when RVH is enabled
MPV and GVA bits are added by hypervisor extension to mstatus and mstatush (if MXLEN=32). Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn> Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20230603134236.15719-3-liweiwei@iscas.ac.cn> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
869d76f207
commit
03dd405dd5
@ -1311,11 +1311,9 @@ static RISCVException write_mstatus(CPURISCVState *env, int csrno,
|
||||
}
|
||||
|
||||
if (xl != MXL_RV32 || env->debugger) {
|
||||
/*
|
||||
* RV32: MPV and GVA are not in mstatus. The current plan is to
|
||||
* add them to mstatush. For now, we just don't support it.
|
||||
*/
|
||||
mask |= MSTATUS_MPV | MSTATUS_GVA;
|
||||
if (riscv_has_ext(env, RVH)) {
|
||||
mask |= MSTATUS_MPV | MSTATUS_GVA;
|
||||
}
|
||||
if ((val & MSTATUS64_UXL) != 0) {
|
||||
mask |= MSTATUS64_UXL;
|
||||
}
|
||||
@ -1351,7 +1349,7 @@ static RISCVException write_mstatush(CPURISCVState *env, int csrno,
|
||||
target_ulong val)
|
||||
{
|
||||
uint64_t valh = (uint64_t)val << 32;
|
||||
uint64_t mask = MSTATUS_MPV | MSTATUS_GVA;
|
||||
uint64_t mask = riscv_has_ext(env, RVH) ? MSTATUS_MPV | MSTATUS_GVA : 0;
|
||||
|
||||
env->mstatus = (env->mstatus & ~mask) | (valh & mask);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user