target/riscv: Trap on writes to stimecmp from VS when hvictl.VTI=1
Per the AIA specification, writes to stimecmp from VS level should
trap when hvictl.VTI is set since the write may cause vsip.STIP to
become unset.
Fixes: 3ec0fe18a3
("target/riscv: Add vstimecmp support")
Signed-off-by: Andrew Bresticker <abrestic@rivosinc.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20221215224541.1423431-2-abrestic@rivosinc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
06d85c24c2
commit
e471a8c985
@ -1037,6 +1037,9 @@ static RISCVException write_stimecmp(CPURISCVState *env, int csrno,
|
||||
RISCVCPU *cpu = env_archcpu(env);
|
||||
|
||||
if (riscv_cpu_virt_enabled(env)) {
|
||||
if (env->hvictl & HVICTL_VTI) {
|
||||
return RISCV_EXCP_VIRT_INSTRUCTION_FAULT;
|
||||
}
|
||||
return write_vstimecmp(env, csrno, val);
|
||||
}
|
||||
|
||||
@ -1057,6 +1060,9 @@ static RISCVException write_stimecmph(CPURISCVState *env, int csrno,
|
||||
RISCVCPU *cpu = env_archcpu(env);
|
||||
|
||||
if (riscv_cpu_virt_enabled(env)) {
|
||||
if (env->hvictl & HVICTL_VTI) {
|
||||
return RISCV_EXCP_VIRT_INSTRUCTION_FAULT;
|
||||
}
|
||||
return write_vstimecmph(env, csrno, val);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user