target/riscv: Fix seed CSR sign extension
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 <nendensu@ispras.ru> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260802113130.7818-2-nendensu@ispras.ru> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Ivan Efremov committed
Aug 2, 2026 at 14:31 UTC
51362da8f73b13ad029287ee33e190a212894183
1 file changed
+5
-5
target/riscv/cpu_bits.h
+5
-5
@@ -1086,11 +1086,11 @@ typedef enum CTRType {
1086
(HVICTL_VTI | HVICTL_IID | HVICTL_IPRIOM | HVICTL_IPRIO)
1087
1088
/* seed CSR bits */
1089
-#define SEED_OPST (0b11 << 30)
1090
-#define SEED_OPST_BIST (0b00 << 30)
1091
-#define SEED_OPST_WAIT (0b01 << 30)
1092
-#define SEED_OPST_ES16 (0b10 << 30)
1093
-#define SEED_OPST_DEAD (0b11 << 30)
1089
+#define SEED_OPST (0b11U << 30)
1090
+#define SEED_OPST_BIST (0b00U << 30)
1091
+#define SEED_OPST_WAIT (0b01U << 30)
1092
+#define SEED_OPST_ES16 (0b10U << 30)
1093
+#define SEED_OPST_DEAD (0b11U << 30)
1094
/* PMU related bits */
1095
#define MIE_LCOFIE (1 << IRQ_PMU_OVF)
1096