target/riscv: Fix VSTIP bit in sstc extension.
VSTIP is only writable when both [mh]envcfg.STCE is enabled, or it will revert it's defined behavior as if sstc extension is not implemented. Signed-off-by: Jim Shu <jim.shu@sifive.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20250519143518.11086-4-jim.shu@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
af27fc569a
commit
3cb2edae74
1 changed files with 8 additions and 1 deletions
|
|
@ -3651,7 +3651,14 @@ static RISCVException rmw_mip64(CPURISCVState *env, int csrno,
|
|||
if (riscv_cpu_cfg(env)->ext_sstc && (env->priv == PRV_M) &&
|
||||
get_field(env->menvcfg, MENVCFG_STCE)) {
|
||||
/* sstc extension forbids STIP & VSTIP to be writeable in mip */
|
||||
mask = mask & ~(MIP_STIP | MIP_VSTIP);
|
||||
|
||||
/* STIP is not writable when menvcfg.STCE is enabled. */
|
||||
mask = mask & ~MIP_STIP;
|
||||
|
||||
/* VSTIP is not writable when both [mh]envcfg.STCE are enabled. */
|
||||
if (get_field(env->henvcfg, HENVCFG_STCE)) {
|
||||
mask = mask & ~MIP_VSTIP;
|
||||
}
|
||||
}
|
||||
|
||||
if (mask) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue