summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>2026-05-27 18:30:34 -0300
committerMichael Tokarev <mjt@tls.msk.ru>2026-06-17 08:31:57 +0300
commitb70e1f39951b2135d2db6fc60c1625e0572e4627 (patch)
tree91a2eeff56724ee7142b5a41d03325b85473a519
parentd7f41618b9fabb7befa3adc14bab88f676d40043 (diff)
downloadqemu-b70e1f39951b2135d2db6fc60c1625e0572e4627.tar.gz
qemu-b70e1f39951b2135d2db6fc60c1625e0572e4627.zip
target/riscv/tcg: disable svnapot if satp_mode < sv39
We did a recent change to disable svpbmt if satp_mode < sv39 that was discovered via a gitlab report. This time we don't have an opened bug but the problem is similar: RISC-V privileged ISA, chapter '"Svnapot" Extension for NAPOT Translation Contiguity, Version 1.0' states: "The Svnapot extension depends on the Sv39 extension." Do the same thing with svnapot, including the user warning in case we try to enable it without the required satp_mode: $ ./build/qemu-system-riscv64 -M virt,dumpdtb=fdt.dtb \ -cpu max,sv39=off,sv48=off,sv57=off,sv64=off,svnapot=on qemu-system-riscv64: warning: svnapot requires at least satp sv39, current satp mode: none Signed-off-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260527213034.2094103-1-daniel.barboza@oss.qualcomm.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com> (cherry picked from commit 601c8494c6c7e73f5b3f30b5823de2c13c003990) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--target/riscv/tcg/tcg-cpu.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/target/riscv/tcg/tcg-cpu.c b/target/riscv/tcg/tcg-cpu.c
index 24496b0d8a..b810592daf 100644
--- a/target/riscv/tcg/tcg-cpu.c
+++ b/target/riscv/tcg/tcg-cpu.c
@@ -884,6 +884,16 @@ void riscv_cpu_validate_set_extensions(RISCVCPU *cpu, Error **errp)
riscv_cpu_is_32bit(cpu)));
}
}
+
+ if (cpu->cfg.ext_svnapot && cpu->cfg.max_satp_mode < VM_1_10_SV39) {
+ cpu->cfg.ext_svnapot = false;
+ if (cpu_cfg_ext_is_user_set(CPU_CFG_OFFSET(ext_svnapot))) {
+ warn_report("svnapot requires at least satp sv39, "
+ "current satp mode: %s",
+ satp_mode_str(cpu->cfg.max_satp_mode,
+ riscv_cpu_is_32bit(cpu)));
+ }
+ }
#endif
/*
* Disable isa extensions based on priv spec after we