[PATCH 3/5] target/riscv: mask inactive senvcfg.SSE on read
| Newsgroups | org.nongnu.qemu-devel,org.nongnu.qemu-riscv |
|---|---|
| Message-ID | <f06b7dff002bb35f1524b271faefe0a9571459e6.1787489230.git.wangyang25@otcaix.iscas.ac.cn> |
The CFI rules make senvcfg.SSE read as zero when menvcfg.SSE is clear. In VU mode it also reads as zero when henvcfg.SSE is clear. Mask the readback to match those rules. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4224 Signed-off-by: wangyang <[email protected]> --- target/riscv/tcg/csr.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target/riscv/tcg/csr.c b/target/riscv/tcg/csr.c index 5ffd858..7078736 100644 --- a/target/riscv/tcg/csr.c +++ b/target/riscv/tcg/csr.c @@ -3305,6 +3305,14 @@ static RISCVException read_senvcfg(CPURISCVState *env, int csrno, } *val = env->senvcfg; + + if (env_archcpu(env)->cfg.ext_zicfiss) { + if (!(env->menvcfg & MENVCFG_SSE) || + (env->virt_enabled && !(env->henvcfg & HENVCFG_SSE))) { + *val &= ~SENVCFG_SSE; + } + } + return RISCV_EXCP_NONE; } -- 2.55.0.windows.2