[PATCH 1/2] target/riscv: Fix seed CSR sign extension
Ivan Efremov <[email protected]> Sun, 2 Aug 2026 14:31:28 +0300
| Newsgroups | org.nongnu.qemu-riscv,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
The SEED_OPST_* macros expanded to int expressions. When
bit 31 was present, converting a CSR seed value to target_ulong
on RV64 sign extended the value and incorrectly set the upper 32 bits.
Make the SEED_OPST_* constants unsigned so that CSR values are
zero extended on RV64.
Fixes: 77442380ecbe ("target/riscv: rvk: add CSR support for Zkr")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4121
Signed-off-by: Ivan Efremov <[email protected]>
---
target/riscv/cpu_bits.h | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h
index 3f146a43fe..c01050ce2b 100644
--- a/target/riscv/cpu_bits.h
+++ b/target/riscv/cpu_bits.h
@@ -1086,11 +1086,11 @@ typedef enum CTRType {
(HVICTL_VTI | HVICTL_IID | HVICTL_IPRIOM | HVICTL_IPRIO)
/* seed CSR bits */
-#define SEED_OPST (0b11 << 30)
-#define SEED_OPST_BIST (0b00 << 30)
-#define SEED_OPST_WAIT (0b01 << 30)
-#define SEED_OPST_ES16 (0b10 << 30)
-#define SEED_OPST_DEAD (0b11 << 30)
+#define SEED_OPST (0b11U << 30)
+#define SEED_OPST_BIST (0b00U << 30)
+#define SEED_OPST_WAIT (0b01U << 30)
+#define SEED_OPST_ES16 (0b10U << 30)
+#define SEED_OPST_DEAD (0b11U << 30)
/* PMU related bits */
#define MIE_LCOFIE (1 << IRQ_PMU_OVF)
--
2.43.0