]> git.ipfire.org Git - thirdparty/qemu.git/log
thirdparty/qemu.git
4 weeks agofpu: Return struct from float128_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 09:52:38 +0000 (19:52 +1000)] 
fpu: Return struct from float128_unpack_canonical

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float128_unpack_raw
Richard Henderson [Sat, 25 Apr 2026 09:47:02 +0000 (19:47 +1000)] 
fpu: Return struct from float128_unpack_raw

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Inline floatx80_unpack_raw into only caller
Richard Henderson [Sat, 25 Apr 2026 09:44:29 +0000 (19:44 +1000)] 
fpu: Inline floatx80_unpack_raw into only caller

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float{32,64}_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 09:41:21 +0000 (19:41 +1000)] 
fpu: Return struct from float{32,64}_unpack_canonical

We must change float32 and float64 at once because
of the DEFINE_S390_DIVIDE_TO_INTEGER macro.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Inline float64_unpack_raw into callers
Richard Henderson [Sat, 25 Apr 2026 09:26:58 +0000 (19:26 +1000)] 
fpu: Inline float64_unpack_raw into callers

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Inline float32_unpack_raw into callers
Richard Henderson [Sat, 25 Apr 2026 09:11:56 +0000 (19:11 +1000)] 
fpu: Inline float32_unpack_raw into callers

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from bfloat16_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 09:09:53 +0000 (19:09 +1000)] 
fpu: Return struct from bfloat16_unpack_canonical

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Inline bfloat16_unpack_raw into callers
Richard Henderson [Sat, 25 Apr 2026 08:59:55 +0000 (18:59 +1000)] 
fpu: Inline bfloat16_unpack_raw into callers

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float16_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 08:57:26 +0000 (18:57 +1000)] 
fpu: Return struct from float16_unpack_canonical

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float16a_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 08:44:21 +0000 (18:44 +1000)] 
fpu: Return struct from float16a_unpack_canonical

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Inline float16_unpack_raw into callers
Richard Henderson [Sat, 25 Apr 2026 08:40:32 +0000 (18:40 +1000)] 
fpu: Inline float16_unpack_raw into callers

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float8_e5m2_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 08:34:00 +0000 (18:34 +1000)] 
fpu: Return struct from float8_e5m2_unpack_canonical

Inline float8_e5m2_unpack_raw at the same time.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float8_e4m3_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 08:24:37 +0000 (18:24 +1000)] 
fpu: Return struct from float8_e4m3_unpack_canonical

Inline float8_e4m3_unpack_raw at the same time.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return struct from float4_e2m1_unpack_canonical
Richard Henderson [Sat, 25 Apr 2026 08:21:09 +0000 (18:21 +1000)] 
fpu: Return struct from float4_e2m1_unpack_canonical

Inline float4_e2m1_unpack_raw at the same time.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Return structure from unpack_raw64
Richard Henderson [Sat, 25 Apr 2026 08:14:38 +0000 (18:14 +1000)] 
fpu: Return structure from unpack_raw64

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Constify frac{64,128,256}_* inputs
Richard Henderson [Sun, 26 Apr 2026 00:22:55 +0000 (10:22 +1000)] 
fpu: Constify frac{64,128,256}_* inputs

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop FRAC_GENERIC_64_128{_256}
Richard Henderson [Sat, 25 Apr 2026 13:17:56 +0000 (23:17 +1000)] 
fpu: Drop FRAC_GENERIC_64_128{_256}

This requires more complexity to handle const selectors, and
an indirection macro for each function.  Easier to just use
the preprocessor.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop PARTS_GENERIC_64_128{_256}
Richard Henderson [Sun, 26 Apr 2026 10:47:01 +0000 (20:47 +1000)] 
fpu: Drop PARTS_GENERIC_64_128{_256}

These macros are no longer used.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_float_to_float
Richard Henderson [Sun, 26 Apr 2026 10:46:16 +0000 (20:46 +1000)] 
fpu: Drop parts_float_to_float

Use parts{64,128}_float_to_float at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_log2
Richard Henderson [Sun, 26 Apr 2026 10:40:42 +0000 (20:40 +1000)] 
fpu: Drop parts_log2

Use parts64_log2 at each call site.

That leaves parts128_log2 unused, so move the whole function back
to softfloat.c and specialize for FloatParts64.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_scalbn
Richard Henderson [Sun, 26 Apr 2026 10:26:22 +0000 (20:26 +1000)] 
fpu: Drop parts_scalbn

Use parts{64,128}_scalbn at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_compare
Richard Henderson [Sun, 26 Apr 2026 10:25:02 +0000 (20:25 +1000)] 
fpu: Drop parts_compare

Use parts{64,128}_compare at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_minmax
Richard Henderson [Sun, 26 Apr 2026 10:23:20 +0000 (20:23 +1000)] 
fpu: Drop parts_minmax

Use parts{64,128}_minmax at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_uint_to_float
Richard Henderson [Sun, 26 Apr 2026 10:20:58 +0000 (20:20 +1000)] 
fpu: Drop parts_uint_to_float

Use parts{64,128}_uint_to_float at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_sint_to_float
Richard Henderson [Sun, 26 Apr 2026 10:19:01 +0000 (20:19 +1000)] 
fpu: Drop parts_sint_to_float

Use parts{64,128}_sint_to_float at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_float_to_sint_modulo
Richard Henderson [Sun, 26 Apr 2026 10:16:11 +0000 (20:16 +1000)] 
fpu: Drop parts_float_to_sint_modulo

Use parts64_float_to_sint_modulo at each call site.

That leaves parts128_float_to_sint_modulo unused,
so move the whole function back to softfloat.c and
specialize for FloatParts64.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_float_to_uint
Richard Henderson [Sun, 26 Apr 2026 10:05:38 +0000 (20:05 +1000)] 
fpu: Drop parts_float_to_uint

Use parts{64,128}_float_to_uint at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_float_to_sint
Richard Henderson [Sun, 26 Apr 2026 10:04:01 +0000 (20:04 +1000)] 
fpu: Drop parts_float_to_sint

Use parts{64,128}_float_to_sint at each call site.
Note that there was a duplicate macro redefinition.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_round_to_int
Richard Henderson [Sun, 26 Apr 2026 09:59:32 +0000 (19:59 +1000)] 
fpu: Drop parts_round_to_int

Use parts{64,128}_round_to_int at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_round_to_int_normal
Richard Henderson [Sun, 26 Apr 2026 09:57:48 +0000 (19:57 +1000)] 
fpu: Drop parts_round_to_int_normal

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_sqrt
Richard Henderson [Sun, 26 Apr 2026 09:53:25 +0000 (19:53 +1000)] 
fpu: Drop parts_sqrt

Use parts{64,128}_sqrt at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_modrem
Richard Henderson [Sun, 26 Apr 2026 09:51:20 +0000 (19:51 +1000)] 
fpu: Drop parts_modrem

Use parts{64,128}_modrem at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_div
Richard Henderson [Sun, 26 Apr 2026 09:47:41 +0000 (19:47 +1000)] 
fpu: Drop parts_div

Use parts{64,128}_div at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_muladd_scalbn
Richard Henderson [Sun, 26 Apr 2026 09:45:54 +0000 (19:45 +1000)] 
fpu: Drop parts_muladd_scalbn

Use parts{64,128}_muladd_scalbn at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_mul
Richard Henderson [Sun, 26 Apr 2026 09:43:39 +0000 (19:43 +1000)] 
fpu: Drop parts_mul

Use parts{64,128}_mul at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_addsub
Richard Henderson [Sun, 26 Apr 2026 09:40:59 +0000 (19:40 +1000)] 
fpu: Drop parts_addsub

Use parts{64,128}_addsub at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_{add,sub}_normal
Richard Henderson [Sun, 26 Apr 2026 07:50:50 +0000 (17:50 +1000)] 
fpu: Drop parts_{add,sub}_normal

Drop the forward declarations and the _Generic macros.
Add partsW() for use by muladd_scalbn.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Reverse the order of softfloat-parts* inclusions
Richard Henderson [Sun, 26 Apr 2026 07:45:18 +0000 (17:45 +1000)] 
fpu: Reverse the order of softfloat-parts* inclusions

Define the widest addition primitives first, so that
they're already defined before being used by the
narrower muladd primitive.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_pick_nan_muladd
Richard Henderson [Sun, 26 Apr 2026 09:34:15 +0000 (19:34 +1000)] 
fpu: Drop parts_pick_nan_muladd

Use partsN() at the only call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_pick_nan
Richard Henderson [Sun, 26 Apr 2026 09:32:32 +0000 (19:32 +1000)] 
fpu: Drop parts_pick_nan

Use parts{64,128}_pick_nan at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_return_nan
Richard Henderson [Sun, 26 Apr 2026 09:28:50 +0000 (19:28 +1000)] 
fpu: Drop parts_return_nan

Use parts{64,128}_return_nan at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_silence_nan
Richard Henderson [Sun, 26 Apr 2026 09:21:09 +0000 (19:21 +1000)] 
fpu: Drop parts_silence_nan

Use parts{64,128}_silence_nan at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_default_nan
Richard Henderson [Sun, 26 Apr 2026 08:48:00 +0000 (18:48 +1000)] 
fpu: Drop parts_default_nan

Use parts{64,128}_default_nan at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_uncanon_normal
Richard Henderson [Sat, 25 Apr 2026 11:44:24 +0000 (21:44 +1000)] 
fpu: Drop parts_uncanon_normal

Use partsN(uncanon_normal) at the single call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_uncanon
Richard Henderson [Sat, 25 Apr 2026 11:38:46 +0000 (21:38 +1000)] 
fpu: Drop parts_uncanon

Use parts{64,128}_uncanon at each call site.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agofpu: Drop parts_canonicalize
Richard Henderson [Sat, 25 Apr 2026 07:44:11 +0000 (17:44 +1000)] 
fpu: Drop parts_canonicalize

Use the specific parts{64,12}_canonicalize at each site.
Drop the forward declarations.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4 weeks agotcg: Remove unused tcg_gen_vec_*_tl() API
Philippe Mathieu-Daudé [Thu, 23 Apr 2026 10:19:04 +0000 (12:19 +0200)] 
tcg: Remove unused tcg_gen_vec_*_tl() API

No code uses the tcg_gen_vec_*_tl() API. Better to
remove it now, since to compile as translation unit
files once we need to avoid target_ulong uses.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260423101904.36131-1-philmd@linaro.org>

4 weeks agotcg/aarch64/tcg-target.c.inc: Manual replace of I3310, I3313
Jim MacArthur [Thu, 2 Apr 2026 14:20:29 +0000 (15:20 +0100)] 
tcg/aarch64/tcg-target.c.inc: Manual replace of I3310, I3313

These are not formats in themselves, but extra constants to OR in with
the existing ldst_imm format.

Signed-off-by: Jim MacArthur <jim.macarthur@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260402-aarch64-tcg-instruction-format-rename2-v1-2-0998a08a515c@linaro.org>

4 weeks agotcg/aarch64/tcg-target.c.inc: Replacement of I3XXX names
Jim MacArthur [Thu, 2 Apr 2026 14:20:28 +0000 (15:20 +0100)] 
tcg/aarch64/tcg-target.c.inc: Replacement of I3XXX names

Mechanical replacement of instruction format names of the form 'I3206'
etc with more useful names. Where possible, names from a64.decode are
used. Includes manual fixes to whitespace.

Signed-off-by: Jim MacArthur <jim.macarthur@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20260402-aarch64-tcg-instruction-format-rename2-v1-1-0998a08a515c@linaro.org>

4 weeks agohw/intc/xics: Add a check for an invalid server id
kiki [Tue, 28 Apr 2026 10:36:44 +0000 (16:06 +0530)] 
hw/intc/xics: Add a check for an invalid server id

A malformed IVE value can result in an invalid server field being
passed to icp_irq(). The function assumes the server id is valid and
may access invalid state otherwise, potentially leading to a crash.

Fix this by validating the server id before using it and ignoring
invalid values.

Reported-by: Zexiang Zhang <chan9yan9@gmail.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3324
Signed-off-by: Zexiang Zhang <chan9yan9@gmail.com>
Signed-off-by: Gautam Menghani <gautam@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/qemu-devel/20260428103645.50617-1-Gautam.Menghani@ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoppc/pnv: Add a nest MMU model
Caleb Schlossin [Tue, 20 Jan 2026 15:01:39 +0000 (09:01 -0600)] 
ppc/pnv: Add a nest MMU model

The nest MMU is used for translations needed by I/O subsystems
on Power10. The nest is the shared, on-chip infrastructure
that connects CPU cores, memory controllers, and I/O.

This patch sets up a basic skeleton with its xscom
area, mapping both needed xscom regions. Support required
for PowerVM bringup.

Use Power9 property for device tree to allow OPAL to
work with Power9 and Power10.

Reviewed-by: Chalapathi V <chalapathi.v@linux.ibm.com>
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
Signed-off-by: Chalapathi V <chalapathi.v@linux.ibm.com>
Signed-off-by: Caleb Schlossin <calebs@linux.ibm.com>
Reviewed-by: Aditya Gupta <adityag@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260120150139.714805-1-calebs@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agohw/ssi/pnv_spi: Fix fifo8 memory leak on unrealize
Caleb Schlossin [Tue, 20 Jan 2026 14:51:17 +0000 (08:51 -0600)] 
hw/ssi/pnv_spi: Fix fifo8 memory leak on unrealize

unrealize should free the fifo8 memory that was allocated by realize.

Fixes: 17befecda85 ("hw/ssi/pnv_spi: Replace PnvXferBuffer with Fifo8 structure")
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Reviewed-by: Chalapathi V <chalapathi.v@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Caleb Schlossin <calebs@linux.ibm.com>
Reviewed-by: Aditya Gupta <adityag@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260120145117.602960-1-calebs@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoMAINTAINERS: Add entry for MPIPL (PowerNV)
Aditya Gupta [Fri, 24 Apr 2026 08:38:37 +0000 (14:08 +0530)] 
MAINTAINERS: Add entry for MPIPL (PowerNV)

Add maintainer and reviewer for MPIPL subsystem.

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-11-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agotests/functional: Add test for MPIPL in PowerNV
Aditya Gupta [Fri, 24 Apr 2026 08:38:36 +0000 (14:08 +0530)] 
tests/functional: Add test for MPIPL in PowerNV

With MPIPL support implemented, enable fadump's functional test for PowerNV

Also, current functional test for powernv uses op-build's Linux 5.10 image,
which doesn't support adding "fadump=on" in argument due to this:

    Kernel is locked down from Kernel configuration; see man kernel_lockdown.7

Hence, instead of op-build's image, use the newer fedora vmlinuz as used
in FADump PSeries functional test

Also due to "bash#" string not showing up, rely on sh: no job control to
check if testcase has reached till shell

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-10-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agopnv/mpipl: Enable MPIPL support
Aditya Gupta [Fri, 24 Apr 2026 08:38:35 +0000 (14:08 +0530)] 
pnv/mpipl: Enable MPIPL support

With all MPIPL support in place, export a "dump" node in device tree,
signifying that PowerNV QEMU platform supports MPIPL

Also, export fw-load-area dt node, which has details about where the
kernel & initrd were loaded, so that kernel can verify whether the
kernel/initrd images were loaded within the boot memory region. QEMU
just exports these details in fw-load-area, the check for boot memory
region is done in kernel.

Since now device tree can change at pnv_reset, hence regenerate device
tree during pnv_reset

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-9-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agopnv/mpipl: Write the preserved CPU and MDRT state
Aditya Gupta [Fri, 24 Apr 2026 08:38:34 +0000 (14:08 +0530)] 
pnv/mpipl: Write the preserved CPU and MDRT state

Logic for preserving the CPU registers and memory regions has been done
in previous patches.

Write those data at the relevant memory address, such as PROC_DUMP_AREA
for CPU registers, and MDRT for preserved memory regions.

Also export "mpipl-boot" device tree node, for kernel to know that it's
a 'dump active' boot

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-8-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agopnv/mpipl: Set thread entry size to be allocated by firmware
Aditya Gupta [Fri, 24 Apr 2026 08:38:33 +0000 (14:08 +0530)] 
pnv/mpipl: Set thread entry size to be allocated by firmware

Set the "Thread Register State Entry Size" that is required by firmware
(OPAL), to know size of memory to allocate to capture CPU state, in the
event of a crash

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-7-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agopnv/mpipl: Preserve CPU registers after crash
Aditya Gupta [Fri, 24 Apr 2026 08:38:32 +0000 (14:08 +0530)] 
pnv/mpipl: Preserve CPU registers after crash

Kernel expects the platform to provide CPU registers after pausing
execution of the CPUs.

Currently only exporting the registers, used by Linux, for generating
the /proc/vmcore

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-6-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agopnv/mpipl: Preserve memory regions as per MDST/MDDT tables
Aditya Gupta [Fri, 24 Apr 2026 08:38:31 +0000 (14:08 +0530)] 
pnv/mpipl: Preserve memory regions as per MDST/MDDT tables

Implement copying of memory region, as mentioned by MDST and MDDT
tables.

Copy the memory regions from source to destination in chunks of 32MB

Note, qemu can fail preserving a particular entry due to any reason,
such as:
  * region length mis-matching in MDST & MDDT
  * failed copy due to access/decode/etc memory issues

HDAT doesn't specify any field in MDRT to notify host about such errors.

Though HDAT section "15.3.1.3 Memory Dump Results Table (MDRT)" says:
    The Memory Dump Results Table is a list of the memory ranges that
    have been included in the dump

Based on above statement, it looks like MDRT should include only those
regions which are successfully captured in the dump, hence, regions
which qemu fails to dump, just get skipped, and will not have a
corresponding entry in MDRT

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-5-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoppc/pnv: Handle stash command in PowerNV SBE
Aditya Gupta [Fri, 24 Apr 2026 08:38:30 +0000 (14:08 +0530)] 
ppc/pnv: Handle stash command in PowerNV SBE

Earlier since the SBE_CMD_STASH_MPIPL_CONFIG command was not handled, so
skiboot used to not get any response from SBE:

    [  106.350742821,3] SBE: Message timeout [chip id = 0], cmd = d7, subcmd = 7
    [  106.352067746,3] SBE: Failed to send stash MPIPL config [chip id = 0x0, rc = 254]

Fix this by handling the command in PowerNV SBE, and sending a response so
skiboot knows SBE has handled the STASH command

The stashed skiboot base is later used to access the relocated MDST/MDDT
tables when MPIPL is implemented.

The purpose of stashing relocated base address is explained in following
skiboot commit:

    author Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Fri Jul 12 16:47:51 2019 +0530
    committer Oliver O'Halloran <oohall@gmail.com> Thu Aug 15 17:53:39 2019 +1000

    SBE: Send OPAL relocated base address to SBE

      OPAL relocates itself during boot. During memory preserving IPL hostboot needs
      to access relocated OPAL base address to get MDST, MDDT tables. Hence send
      relocated base address to SBE via 'stash MPIPL config' chip-op. During next
      IPL SBE will send stashed data to hostboot... so that hostboot can access
      these data.

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-4-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoppc/mpipl: Implement S0 SBE interrupt
Aditya Gupta [Fri, 24 Apr 2026 08:38:29 +0000 (14:08 +0530)] 
ppc/mpipl: Implement S0 SBE interrupt

During MPIPL (aka fadump), after a kernel crash, the kernel does
opal_cec_reboot2 opal call, signifying an abnormal termination.
When OPAL receives this opal call, it further triggers SBE S0 interrupt,
to trigger a MPIPL boot.

Currently S0 interrupt is unimplemented in QEMU.

Implement S0 interrupt as 'pause_vcpus' + 'guest_reset' in QEMU, as the
SBE's implementation of S0 seems to be basically "stop all clocks" and
then "host reset".

pause_vcpus is done in a later patch when register preserving support is
added

See 'stopClocksS0' in SBE source code for more information.

Also log both S0 and S1 interrupts.

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-3-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoppc/pnv: Move SBE host doorbell function to top of file
Aditya Gupta [Fri, 24 Apr 2026 08:38:28 +0000 (14:08 +0530)] 
ppc/pnv: Move SBE host doorbell function to top of file

Moved 'pnv_sbe_set_host_doorbell' as-it-is to above
'pnv_sbe_power9_xscom_ctrl_write'.

This is done since in a future patch, S0 interrupt implementation uses
'pnv_sbe_set_host_doorbell', hence the host doorbell function needs to
be declared/defined before 'pnv_sbe_power9_xscom_ctrl_write' where we
implement the S0 interrupt.

No functional change.

Reviewed-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Aditya Gupta <adityag@linux.ibm.com>
Tested-by: Shivang Upadhyay <shivangu@linux.ibm.com>
Link: https://lore.kernel.org/qemu-devel/20260424083837.214947-2-adityag@linux.ibm.com
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
4 weeks agoqapi/iothread: introduce poll-weight parameter for aio-poll
Jaehoon Kim [Thu, 23 Apr 2026 19:59:18 +0000 (14:59 -0500)] 
qapi/iothread: introduce poll-weight parameter for aio-poll

Introduce a configurable poll-weight parameter for adaptive polling
in IOThread. This parameter replaces the hardcoded POLL_WEIGHT_SHIFT
constant, allowing runtime control over how much the most recent
event interval affects the next polling duration calculation.

The poll-weight parameter uses a shift value where larger values
decrease the weight of the current interval, enabling more gradual
adjustments. When set to 0, a default value of 3 is used (meaning
the current interval contributes approximately 1/8 to the weighted
average).

This patch also removes the hardcoded default value checks from
adjust_polling_time(). Instead, poll-grow, poll-shrink, and
poll-weight now use default values initialized in iothread.c
during IOThread creation.

Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20260423195918.661299-4-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
4 weeks agoaio-poll: refine iothread polling using weighted handler intervals
Jaehoon Kim [Thu, 23 Apr 2026 19:59:17 +0000 (14:59 -0500)] 
aio-poll: refine iothread polling using weighted handler intervals

Improve adaptive polling by updating each AioHandler's poll.ns
every loop iteration using weighted averages. This reduces CPU
consumption while minimizing performance impact.

Background:
Starting from QEMU 10.0, poll.ns was introduced per event handler
to mitigate excessive fluctuations in IOThread polling times
observed in earlier versions (QEMU 9.x). However, the current
design has limitations:

1. poll.ns is updated only when an event occurs, making it
   difficult to treat block_ns as a reliable event interval.
2. The IOThread's next polling time is determined by the maximum
   poll.ns among all AioHandlers, meaning idle AioHandlers with
   high poll.ns can have an outsized impact on polling duration.
3. For io_uring, idle AioHandlers are cleared after
   POLL_IDLE_INTERVAL_NS (7s), but for ppoll/epoll there is no
   such mechanism, leading to increased CPU consumption from idle
   nodes.

Implementation:
This patch treats block_ns as an event interval and updates each
AioHandler's poll.ns in every loop iteration:

- Active handlers (with events): poll.ns is updated using a
  weighted average of the current block_ns and previous poll.ns,
  smoothing out adjustments and preventing excessive fluctuations.
- Inactive handlers (no events): poll.ns accumulates block_ns
  without weighting, allowing rapid isolation of idle nodes. When
  poll.ns exceeds poll_max_ns, it resets to 0, preventing
  sporadically active handlers from unnecessarily prolonging
  iothread polling.
- The iothread polling duration is set based on the largest poll.ns
  among active handlers. The shrink divider defaults to 2, matching
  the grow rate, to reduce frequent poll_ns resets for slow devices.

The implementation renames poll_idle_timeout to last_dispatch_timestamp
for use as an active handler identifier.

Testing:
POLL_WEIGHT_SHIFT=3 (12.5% weight) was selected based on testing
comparing baseline vs weight=2/3 across various workloads:
Performance results (RHEL 10.1 + QEMU 10.0.0, FCP/FICON, 1-8 iothreads,
numjobs 1/4/8 averaged):
                    | poll-weight=2      | poll-weight=3
--------------------|--------------------|-----------------
Throughput avg      | -2.4% (all tests)  | -2.2% (all tests)
CPU consumption avg | -10.9% (all tests) | -9.4% (all tests)

Both configurations achieve ~10% CPU reduction with minimal throughput
impact (~2%). Weight=3 is chosen as default for slightly better
throughput while maintaining substantial CPU savings.

Additional validation testing on s390x SSD with fio (bs=8k, iodepth=8,
numjobs=1) shows how poll_weight affects polling time (poll.ns)
behavior:

RandRead workload:
+-------------+-----------+-----------+-------------+-------------+
| poll_weight | #samples  | Mean (ns) | 50th % (ns) | 90th % (ns) |
+-------------+-----------+-----------+-------------+-------------+
| 1           | 4.79M     |  8,034    |  5,116      | 20,509      |
| 2           | 5.01M     | 12,584    | 11,078      | 24,693      |
| 3           | 5.01M     | 15,647    | 14,863      | 28,695      |
| 4           | 5.12M     | 16,430    | 15,556      | 30,848      |
| 5           | 5.14M     | 16,461    | 15,306      | 32,123      |
+-------------+-----------+-----------+-------------+-------------+
RandWrite workload:
+-------------+-----------+-----------+-------------+-------------+
| poll_weight | #samples  | Mean (ns) | 50th % (ns) | 90th % (ns) |
+-------------+-----------+-----------+-------------+-------------+
| 1           | 6.37M     |  2,049    |  1,262      |  4,301      |
| 2           | 7.46M     |  4,118    |  3,226      |  7,476      |
| 3           | 7.97M     |  7,034    |  5,984      | 11,645      |
| 4           | 7.96M     | 12,789    | 11,362      | 20,040      |
| 5           | 7.82M     | 22,992    | 20,644      | 32,768      |
+-------------+-----------+-----------+-------------+-------------+

Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Message-ID: <20260423195918.661299-3-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
4 weeks agoaio-poll: avoid unnecessary polling time computation
Jaehoon Kim [Thu, 23 Apr 2026 19:59:16 +0000 (14:59 -0500)] 
aio-poll: avoid unnecessary polling time computation

Nodes are no longer added to poll_aio_handlers when adaptive polling is
disabled, preventing unnecessary try_poll_mode() calls. This avoids
iterating over all nodes to compute max_ns unnecessarily when polling
is disabled.

Signed-off-by: Jaehoon Kim <jhkim@linux.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-ID: <20260423195918.661299-2-jhkim@linux.ibm.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
4 weeks agotests/qtest: Make qtest_get_arch() cleverer
Peter Maydell [Mon, 27 Apr 2026 15:00:07 +0000 (16:00 +0100)] 
tests/qtest: Make qtest_get_arch() cleverer

The qtest_get_arch() function tries to determine the architecture
under test by extracting it from the binary name as provided in
QTEST_QEMU_BINARY.  The current logic finds the last '-' in the
string and assumes everything beyond it is the architecture name.
Although we also look for the substring "-system-", the only effect
this check has is that we will exit with an error if it is not
present.

Because the logic at the moment is very simplistic, although
it is possible to provide more complex commands than a bare
QEMU binary path, such as:
  QTEST_QEMU_BINARY='rr record ./qemu-system-x86_64'
it is not possible to provide extra arguments to QEMU, such as:
  QTEST_QEMU_BINARY='./qemu-system-x86_64 -d trace:foo'

Because the "-system-" check and the "find the architecture" check
are not the same, the latter example will pass the "we found
-system-" check and not notice that the "architecture name" it has
found starts further on in the string; so rather than printing an
error it will return "d trace:foo" to the test.

Improve the "find the architecture name" logic to look for the
rightmost occurrence of the substring "-system-" in
QTEST_QEMU_BINARY, and take the architecture name as starting there
and continuing until the first whitespace character or the end of the
string.

Because we now need to potentially modify the environment variable
string to terminate the architecture name if it is not the last part
of the string, we make a copy of it which we cache in a static
variable.  This lets us avoid having to modify all the callers to get
them to take ownership of the returned string.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Link: https://lore.kernel.org/qemu-devel/20260427150007.1185559-1-peter.maydell@linaro.org
Signed-off-by: Fabiano Rosas <farosas@suse.de>
4 weeks agotests/qtest: Add Intel IOMMU bare-metal test
Fengyuan Yu [Wed, 25 Mar 2026 07:09:06 +0000 (15:09 +0800)] 
tests/qtest: Add Intel IOMMU bare-metal test

Add a qtest suite for the Intel IOMMU (VT-d) device on the Q35 machine.
The test exercises both Legacy and Scalable translation modes using
iommu-testdev and the qos-intel-iommu helpers, without requiring any
guest kernel or firmware.

The test validates:
- Legacy-mode Root Entry Table and Context Entry Table configuration
- Scalable-mode Context Entry, PASID Directory, and PASID Table setup
- Legacy-mode 4-level page table walks for 48-bit address translation
- Scalable-mode second-level and first-level 4-level page table walks
- Pass-through mode in both Legacy and Scalable modes
- DMA transaction execution with memory content verification

Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Fengyuan Yu <15fengyuan@gmail.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Tao Tang <tangtao1634@phytium.com.cn>
Link: https://lore.kernel.org/qemu-devel/ce3c44f3b07734a4f0ee43f55b21c856034af1b1.1774421649.git.15fengyuan@gmail.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
4 weeks agotests/qtest/libqos: Add Intel IOMMU helper library
Fengyuan Yu [Wed, 25 Mar 2026 07:09:05 +0000 (15:09 +0800)] 
tests/qtest/libqos: Add Intel IOMMU helper library

Introduce a libqos helper module for Intel IOMMU (VT-d) bare-metal
testing via iommu-testdev. The helper provides routines to:

- Build Legacy-mode structures: Root Entry Tables, Context Entry Tables,
  and 4-level page tables for 48-bit address translation
- Build Scalable-mode structures: Scalable Context Entries, PASID
  Directory Entries, PASID Table Entries, and 4-level page tables for
  both second-level and first-level translation
- Program VT-d registers (Root Table Address, Invalidation Queue,
  Fault Event MSI, Global Command) following the VT-d specification,
  with GSTS read-back verification for each step
- Execute DMA translations through iommu-testdev and verify results
  by reading back guest memory

The module supports all major VT-d translation modes through the
QVTDTransMode enum:
- Legacy pass-through
- Legacy translated with 4-level paging
- Scalable pass-through
- Scalable Second-Level Translation
- Scalable First-Level Translation

Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Fengyuan Yu <15fengyuan@gmail.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
Reviewed-by: Tao Tang <tangtao1634@phytium.com.cn>
Link: https://lore.kernel.org/qemu-devel/c4f7bf5d7985891a2db291193669ebe15dd2ba15.1774421649.git.15fengyuan@gmail.com
Signed-off-by: Fabiano Rosas <farosas@suse.de>
4 weeks agoMerge tag 'pull-riscv-to-apply-20260429-1' of https://github.com/alistair23/qemu...
Stefan Hajnoczi [Wed, 29 Apr 2026 13:22:50 +0000 (09:22 -0400)] 
Merge tag 'pull-riscv-to-apply-20260429-1' of https://github.com/alistair23/qemu into staging

RISC-V PR for 11.1.

* Use standard EN_PRI bit for PRI IOMMU
* Add draft RISC-V Zbr ext as xbr0p93
* Forbid to use legacy native endianness API
* Fix irq_overflow_left residual value bug in IOMMU
* Add IPSR.PMIP RW1C support to IOMMU
* Use kvm timer frequency when kvm enabled
* Fix stale ptshift and base on page walk restart
* Fix heap OOB in ACLINT MTIMER multi-socket
* Reject RISC-V HTIF invalid signature ranges
* Fix RV32 henvcfg/stateen CSR handling
* Add Zvfbfa extension support
* Allow fractional LMUL on vector SHA instructions
* Add Tenstorrent mvendorid
* Warn if a ELF format file is loaded as a binary
* Initialize riscv_excp_names[] and riscv_intr_names[] using designated initializer
* Mask xepc[0] only when Zc* extension is enabled
* Generate access fault if sc comparison fails
* Don't OR mip.SEIP when mvien is one
* Use ELEN for Fractional LMUL check
* Fix Zjpm implementation
* Handle mask/source overlap of vector reduction instructions

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCgAdFiEEaukCtqfKh31tZZKWr3yVEwxTgBMFAmnxjOkACgkQr3yVEwxT
# gBMf6Q/+IdCh9/rzqJFyBcHxkbQGMncGzBsmLHmeCIgUc7gPxF8Cw6zFbJ3p2H3m
# ry4pnrqp8juKlDfuDcQyXgoQSWJ5MqkrQZaxUUomEhZPoJr3XrWXcp9nVPAOOtni
# WQR/AW0rsm97ujaAN/OSQKUFOfUVzRSOrSZg0xSg3fmYTia7CEKVKByQnfNlKLvk
# 6RRax8Dlcmmn2Q9AXWV5oaEH8ZDorC6GRN2p805LLzdEWmkY5wMKaHAnTXs8qErm
# wK4E+CWmFW2f5h1Mg0MvuV5Ko6TDFD7wghSM/HV7Aykdvwg2bO2MUmEt0zMQwtMU
# OOx/UihFDcPBDLjnrVTsLEf02ol98W6gkqAxhpiGez5PGzfYX7xNMFHHj6RqA/dC
# kThR5CfThVY+Daw9F26b8kovq/xlaeM6nZM5L4qtMpZbojZbZ414H15prBlJoYF9
# R1amO14+VNuZBrPIXFOLbPk8T5DmM8Km9V/oaV6Ra/vkSF43tmiqrV/s4+NbBIZB
# H42JDlruats9kTFeMggZS4VVkgkNgelM4cvvfK8KAhp6sdmub/cPxlZcYsnuOuD3
# lJEBWO3bDNpEHsHCLrwYVlS3dZQXWo+KifHElK8lMOW3b/93rjlzgLRERvdaVxpb
# NlCOjGwGxfb/Z7r1ylcrbK2DONP0kuoZDpVfacqZ8UXbxnyvosg=
# =oT5a
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 29 Apr 2026 00:45:29 EDT
# gpg:                using RSA key 6AE902B6A7CA877D6D659296AF7C95130C538013
# gpg: Good signature from "Alistair Francis <alistair@alistair23.me>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: 6AE9 02B6 A7CA 877D 6D65  9296 AF7C 9513 0C53 8013

* tag 'pull-riscv-to-apply-20260429-1' of https://github.com/alistair23/qemu: (51 commits)
  target/riscv: rvv: Handle mask/source overlap of vector reduction instructions
  target/riscv: Fix pointer masking translation mode check bug
  target/riscv: Rename riscv_pm_get_virt_pmm() to riscv_pm_get_vm_ldst_pmm()
  target/riscv: Fix pointer masking for virtual-machine load/store insns
  target/riscv: Fix pointer masking PMM field selection logic
  target/riscv: Add a helper to return the current effective priv mode
  target/riscv: fix address masking
  target/riscv: Use ELEN for Fractional LMUL check
  target/riscv: Don't OR mip.SEIP when mvien is one
  target/riscv: Generate access fault if sc comparison fails
  target/riscv: Mask xepc[0] only when Zc* extension is enabled
  target/riscv: Initialize riscv_excp_names[] and riscv_intr_names[] using designated initializer
  target/riscv: fix RV32 stateen CSR handling
  hw/riscv/boot: Warn if a ELF format file is loaded as a binary
  target/riscv: tt-ascalon: Add Tenstorrent mvendorid
  target/riscv: rvv: Allow fractional LMUL on vector SHA instructions
  target/riscv: Expose Zvfbfa extension as a cpu property
  target/riscv: rvv: Support Zvfbfa vector bf16 operations
  target/riscv: Introduce BF16 canonical NaN for Zvfbfa extension
  target/riscv: Introduce altfmt into DisasContext
  ...

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
4 weeks agoMerge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging
Stefan Hajnoczi [Wed, 29 Apr 2026 13:20:02 +0000 (09:20 -0400)] 
Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging

UI-related fixes and cleanups

# -----BEGIN PGP SIGNATURE-----
#
# iQIzBAABCgAdFiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAmnwyk4ACgkQ2ujhCXWW
# nOVTKA/9G/Pudx64a/nGlX2Hs8BwT3v25gAfoZu8Evf2Hw0ttBqhrXze1op398tM
# h33OeemJYaOVK+B/ITxOvocLDXD+I3CeEoZxDhWpd7nBEubwAXAnwgMDeneSpLnd
# JJD/xAhXkTAGn8rB/afKiZ3mqXVqVOrcnH77uN/fIQJvPVZ6C5UGn027+WxuuTb8
# paAgK+n+RqVsSpYIqfbRAeA0TknjRlRIhcvJImDkRPcdeUCIiNHSV+zkkIQ2avd/
# HTf+278rBLlJtMISzcqIPDHwtCol5C6OVxBAJz+ngqT2tbKklji2+oQNjna98RBO
# lRX30YS8hPiqBH5/7iR00zdIBBMRvsr+xKYI7b4GdybVClgsPixDyFrEXEuWv7kQ
# 9ygLLjqY07xWIU1Tw0+g+Zu+XLFpFuWER6CqI+Ax2Gb6yGA1BvS+QlDnfOPomdwA
# k+FzsnSeCUAeZHWOTOd2cHaoi/OYYjmmY3GqEtCQAHA+EZnzrB7VkebCo816RH5L
# qUKi5AThXh3cw2FAv/tBMzrpTo5/p0lIRv0F9ZgxzoMyoRTrJ+6IM2X1dgGq4zEM
# QJtAOMbxSecmHtPVUfuckLb7lVUkfwvTJGNd/f7bxX/OxzpFiW1Ret6R9wlCjx/p
# LlavenFlbkv/7FQQSHMoqRxr6vGByHfq7bAd1tE1mAt2Qi4jfWQ=
# =HyM4
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue 28 Apr 2026 10:55:10 EDT
# gpg:                using RSA key 87A9BD933F87C606D276F62DDAE8E10975969CE5
# gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" [full]
# gpg:                 aka "Marc-André Lureau <marcandre.lureau@gmail.com>" [full]
# Primary key fingerprint: 87A9 BD93 3F87 C606 D276  F62D DAE8 E109 7596 9CE5

* tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu:
  ui/gtk: Turn clipboard flag into runtime option
  ui/gtk: Use non-blocking clipboard retrieval
  audio: Use unsigned PCM bias
  audio: Clamp unsigned sample conversion
  audio: Avoid unsigned sample wraparound
  ui/dbus: fix warning for clients without "Interfaces" property
  ui/console: move console_handle_touch_event() to input
  ui/console: return completion status from gfx_update callback
  ui/console: remove qemu_console_is_visible()
  ui: rename init_keyboard_layout->kbd_layout_new()
  ui: minor code simplification
  ui: make unregister_displaychangelistener() skip unregistered
  ui: make qemu_default_pixelformat() static inline
  ui: move DisplaySurface functions to display-surface.c
  ui: move FONT_WIDTH/HEIGHT to vgafont.h

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
4 weeks agotarget/riscv: rvv: Handle mask/source overlap of vector reduction instructions
Anton Blanchard [Fri, 17 Apr 2026 12:06:26 +0000 (12:06 +0000)] 
target/riscv: rvv: Handle mask/source overlap of vector reduction instructions

Masked vector reduction instructions must not use v0 as a source register.
Check rs1 and rs2 against the mask register when vm=0.

Signed-off-by: Anton Blanchard <antonb@tenstorrent.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Message-ID: <20260417120626.77415-1-antonb@tenstorrent.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Fix pointer masking translation mode check bug
Frank Chang [Tue, 21 Apr 2026 09:37:15 +0000 (17:37 +0800)] 
target/riscv: Fix pointer masking translation mode check bug

When running with virtualization in VS/VU mode, or when executing the
virtual-machine load/store instructions (HLV.* and HSV.*), the type of
address that determines which pointer masking rules apply should be
checked against vsatp rather than satp.

As a result, sign extension also applies to the virtual-machine
load/store instructions.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Radim Krčmář <rkrcmar@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-7-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Rename riscv_pm_get_virt_pmm() to riscv_pm_get_vm_ldst_pmm()
Frank Chang [Tue, 21 Apr 2026 09:37:14 +0000 (17:37 +0800)] 
target/riscv: Rename riscv_pm_get_virt_pmm() to riscv_pm_get_vm_ldst_pmm()

Rename riscv_pm_get_virt_pmm() to riscv_pm_get_vm_ldst_pmm() to better
reflect its actual usage. This function is used when checking the PMM
field for virtual-machine load/store instructions (HLV.* and HSV.*),
rather than for VS/VU modes.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-6-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Fix pointer masking for virtual-machine load/store insns
Frank Chang [Tue, 21 Apr 2026 09:37:13 +0000 (17:37 +0800)] 
target/riscv: Fix pointer masking for virtual-machine load/store insns

The effective privilege of explicit memory accesses made by
virtual-machine load/store instructions (HLV.* and HSV.*) is controlled
by hstatus.SPVP. mstatus.MPRV does not affect these virtual-machine
load/store instructions.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-5-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Fix pointer masking PMM field selection logic
Frank Chang [Tue, 21 Apr 2026 09:37:12 +0000 (17:37 +0800)] 
target/riscv: Fix pointer masking PMM field selection logic

mstatus.MPV only records the previous virtualization state, and does not
affect pointer masking according to the Zjpm specification.

This patch rewrites riscv_pm_get_pmm() to follow the architectural
definition of Smmpm, Smnpm, and Ssnpm.

The resulting PMM selection logic for each mode is summarized below:

  * mstatus.MXR = 1: pointer masking disabled

  * Smmpm + Smnpm + Ssnpm:
      M-mode:  mseccfg.PMM
      S-mode:  menvcfg.PMM
      U-mode:  senvcfg.PMM
      VS-mode: henvcfg.PMM
      VU-mode: senvcfg.PMM

  * Smmpm + Smnpm (RVS implemented):
      M-mode:  mseccfg.PMM
      S-mode:  menvcfg.PMM
      U/VS/VU: disabled (Ssnpm not present)

  * Smmpm + Smnpm (RVS not implemented):
      M-mode:  mseccfg.PMM
      U-mode:  menvcfg.PMM
      S/VS/VU: disabled (no S-mode)

  * Smmpm only:
      M-mode:  mseccfg.PMM
      Other existing modes: pointer masking disabled

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-4-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Add a helper to return the current effective priv mode
Frank Chang [Tue, 21 Apr 2026 09:37:11 +0000 (17:37 +0800)] 
target/riscv: Add a helper to return the current effective priv mode

This helper returns the current effective privilege mode.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-3-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: fix address masking
Yong-Xuan Wang [Tue, 21 Apr 2026 09:37:10 +0000 (17:37 +0800)] 
target/riscv: fix address masking

The pmlen should get the corresponding value before shifting address.

Signed-off-by: Yong-Xuan Wang <yongxuan.wang@sifive.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421093715.2995067-2-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Use ELEN for Fractional LMUL check
Alistair Francis [Wed, 15 Apr 2026 23:37:40 +0000 (09:37 +1000)] 
target/riscv: Use ELEN for Fractional LMUL check

The RISC-V spec states that

"""
For a given supported fractional LMUL setting, implementations
must support SEW settings between SEWMIN and LMUL * ELEN, inclusive.
"""

We were previously checking VLEN, instead of ELEN, so let's update to
check ELEN instead of VLEN for fractional scaling.

Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3196
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260415233740.3027321-5-alistair.francis@wdc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Don't OR mip.SEIP when mvien is one
Alistair Francis [Wed, 15 Apr 2026 23:37:39 +0000 (09:37 +1000)] 
target/riscv: Don't OR mip.SEIP when mvien is one

The RISC-V spec states that

"""
But when bit 9 of mvien is one, bit SEIP in mip is read-only and does
not include the value of bit 9 of mvip. Rather, the value of mip.SEIP
is simply the supervisor external interrupt signal from the hart’s
external interrupt controller (APLIC or IMSIC).
"""

As such let's mark the mip.SEIP in rmw_mip64().

Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/2828
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Message-ID: <20260415233740.3027321-4-alistair.francis@wdc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Generate access fault if sc comparison fails
Alistair Francis [Wed, 15 Apr 2026 23:37:37 +0000 (09:37 +1000)] 
target/riscv: Generate access fault if sc comparison fails

The RISC-V spec states:

"For the purposes of memory protection, a failed SC.W may be treated
like a store."

So if the comparison in sc.w fails we should still check for alignment
and do a probe access to check permissions.

Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3323
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3136
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Message-ID: <20260415233740.3027321-2-alistair.francis@wdc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Mask xepc[0] only when Zc* extension is enabled
Frank Chang [Tue, 21 Apr 2026 07:49:40 +0000 (15:49 +0800)] 
target/riscv: Mask xepc[0] only when Zc* extension is enabled

IALIGN is 16 when the CPU supports the Zc* extension. Only xepc[0]
should be masked when the Zc* extension is enabled.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421074940.2916287-1-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Initialize riscv_excp_names[] and riscv_intr_names[] using designated...
Frank Chang [Tue, 21 Apr 2026 07:11:07 +0000 (15:11 +0800)] 
target/riscv: Initialize riscv_excp_names[] and riscv_intr_names[] using designated initializer

Use designated initializers to initialize riscv_excp_names[] and
riscv_intr_names[] so that we don't have to explicitly add "reserved"
items. Also, add the missing trap names: sw_check, hw_error,
virt_illegal_instruction, semihost, s_guest_external, and
counter_overflow.

Signed-off-by: Frank Chang <frank.chang@sifive.com>
Reviewed-by: Max Chou <max.chou@sifive.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260421071107.2848439-1-frank.chang@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: fix RV32 stateen CSR handling
Bruno Sa [Fri, 10 Apr 2026 11:08:42 +0000 (12:08 +0100)] 
target/riscv: fix RV32 stateen CSR handling

The RV32 stateen CSRs are split between the low-half CSR and the
corresponding xH CSR, but the current implementation still handles some
upper-half bits through the low-half write paths and also accepts the
xH CSRs on RV64.

Fix this by:
- rejecting mstateen*h and hstateen*h accesses on RV64
- keeping the RV64-only writable bits in the low-half write paths
- handling the RV32 upper-half writable bits in write_mstateen0h() and
  write_hstateen0h()
- dropping unsupported writable bits from write_sstateen0()

Signed-off-by: Bruno Sa <bruno.vilaca.sa@gmail.com>
Message-ID: <20260410110928.1014170-1-bruno.vilaca.sa@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agohw/riscv/boot: Warn if a ELF format file is loaded as a binary
Nicholas Piggin [Wed, 15 Apr 2026 06:48:35 +0000 (16:48 +1000)] 
hw/riscv/boot: Warn if a ELF format file is loaded as a binary

It is possible that an ELF file can not be loaded, in that
case the loader falls back to loading the file as a binary
blob. Print a warning in this case because it is likely that
it is not intended.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260415064838.652297-4-joel@jms.id.au>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: tt-ascalon: Add Tenstorrent mvendorid
Joel Stanley [Wed, 14 Jan 2026 02:05:15 +0000 (12:35 +1030)] 
target/riscv: tt-ascalon: Add Tenstorrent mvendorid

JEP106 has two vendor IDs for Tenstorrent. We will use Bank 16, company 33:

  ((16 - 1) << 7) | 33 = 0x7a1

As JEP106 requires registration to download, the number can confirmed by
looking at the OpenOCD sources[1].

Alternatively, referring to the JEDEC document the hex IDs are listed with the
parity (MSB) bit added. Company 33 has hex 0xa1:

 ((16 - 1) << 7) | (0xa1 & ~0x80) = 0x7a1

Add it to the Ascalon CPU definition as the mvendorid CSR.

[1] https://github.com/openocd-org/openocd/blob/1ebff3ab33c77e3f8fb4e1ddda262b606b572af1/src/helper/jep106.inc#L1935

Signed-off-by: Joel Stanley <joel@jms.id.au>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Michael Ellerman <mpe@oss.tenstorrent.com>
Message-ID: <20260114020516.982305-1-joel@jms.id.au>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: rvv: Allow fractional LMUL on vector SHA instructions
Anton Blanchard [Sun, 4 Jan 2026 23:37:24 +0000 (23:37 +0000)] 
target/riscv: rvv: Allow fractional LMUL on vector SHA instructions

Vector SHA instructions incorrectly raise an illegal instruction exception
when LMUL < 1. The ISA only states that LMUL*VLEN >= EGW:

  For element-group instructions, LMUL*VLEN must always be at least as
  large as EGW, otherwise an illegal-instruction exception is raised, even
  if vl=0.

There is already a check for this:

  MAXSZ(s) >= egw_bytes

so just remove the check for a fractional LMUL.

Signed-off-by: Anton Blanchard <antonb@tenstorrent.com>
Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Message-ID: <20260104233724.192886-1-antonb@tenstorrent.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Expose Zvfbfa extension as a cpu property
Max Chou [Thu, 2 Apr 2026 12:52:34 +0000 (20:52 +0800)] 
target/riscv: Expose Zvfbfa extension as a cpu property

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-10-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: rvv: Support Zvfbfa vector bf16 operations
Max Chou [Thu, 2 Apr 2026 12:52:33 +0000 (20:52 +0800)] 
target/riscv: rvv: Support Zvfbfa vector bf16 operations

According to the Zvfbfa ISA spec v0.1, the following vector floating
point instructions have different behaviors depend on the ALTFMT and
VSEW fields of VTYPE CSR.

When altfmt=1 and SEW=8, all vector floating-point instructions become
reserved, except for the following, which are redefined to use the
BF16 format for any operand that would otherwise have used the FP16
format:
- vfwcvt.f.x[u].v, vfncvt.x[u].f.w, vfncvt.rtz.x[u].f.w

When altfmt=1 and SEW=16, all vector floating-point instructions become
reserved, except for the following, which are redefined to use the
BF16 format for any operand that would otherwise have used the FP16
format:
- vfadd.v[vf], vfsub.v[vf], vfmin.v[vf], vfmax.v[vf], vmfeq.v[vf],
  vmfle.v[vf], vmflt.v[vf], vmfne.v[vf], vmfgt.vf, vmfge.vf,
  vfmul.v[vf], vfrsub.vf, vfmadd.v[vf], vfnmadd.v[vf], vfmsub.v[vf],
  vfnmsub.v[vf], vfmacc.v[vf], vfnmacc.v[vf], vfmsac.v[vf],
  vfnmsac.v[vf], vfwadd.v[vf], vfwsub.v[vf], vfwadd.w[vf],
  vfwsub.w[vf], vfwmul.v[vf], vfwmacc.v[vf], vfwnmacc.v[vf],
  vfwmsac.v[vf], vfwnmsac.v[vf], vfwcvt.f.f.v, vfncvt.f.f.w,
  vfncvt.rod.f.f.w, vfrsqrt7.v, vfrec7.v, vfclass.v

The following instructions marked with * have the same semantics
regardless of altfmt.
*- vfmv.f.s,
   vfwmaccbf16.v[vf] (only if Zvfbfwma is implemented)
   vfwcvtbf16.f.f.v (only if Zvfbfmin is implemented)
   vfncvtbf16.f.f.w (only if Zvfbfmin is implemented)

The following instructions marked with ** differ only in that
improperly NaN-boxed f-register operands must substitute the BF16
canonical NaN instead of the FP16 canonical NaN.
**- vfsgnj.v[vf], vfsgnjn.v[vf], vfsgnjx.v[vf], vfslide1up.vf,
    vfslide1down.vf, vfmv.v.f, vfmerge.vfm, vfmv.s.f

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-9-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Introduce BF16 canonical NaN for Zvfbfa extension
Max Chou [Thu, 2 Apr 2026 12:52:32 +0000 (20:52 +0800)] 
target/riscv: Introduce BF16 canonical NaN for Zvfbfa extension

According to the Zvfbfa ISA spec (v0.1), improperly NaN-boxed
f-register operands must substitute the BF16 canonical NaN instead of
the FP16 canonical NaN for some vector floating-point instructions.

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-8-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Introduce altfmt into DisasContext
Max Chou [Thu, 2 Apr 2026 12:52:31 +0000 (20:52 +0800)] 
target/riscv: Introduce altfmt into DisasContext

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-7-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Use the tb->cs_base as the extend tb flags
Max Chou [Thu, 2 Apr 2026 12:52:30 +0000 (20:52 +0800)] 
target/riscv: Use the tb->cs_base as the extend tb flags

We have more than 32-bits worth of state per TB, so use the
tb->cs_base, which is otherwise unused for RISC-V, as the extend flag.

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-6-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: rvv: Introduce reset_ill_vtype to reset illegal vtype CSR
Max Chou [Thu, 2 Apr 2026 12:52:29 +0000 (20:52 +0800)] 
target/riscv: rvv: Introduce reset_ill_vtype to reset illegal vtype CSR

Replace the same vill reset flow by reset_ill_vtype function.

Reviewed-by: Daniel Henrique Barboza <daniel.barboza@oss.qualcomm.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-5-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: rvv: Add new VTYPE CSR field - altfmt
Max Chou [Thu, 2 Apr 2026 12:52:28 +0000 (20:52 +0800)] 
target/riscv: rvv: Add new VTYPE CSR field - altfmt

According to the Zvfbfa ISA spec v0.1, the vtype CSR adds a new field:
altfmt for BF16 support.
This update changes the layout of the vtype CSR fields.

- Removed VEDIV field (bits 8-9) since EDIV extension is not planned to
  be part of the base V extension
- Added ALTFMT field at bit 8
- Changed RESERVED field to start from bit 9 instead of bit 10

When Zvfbfa is disabled, bits 8+ are treated as reserved (preserving
existing behavior for altfmt bit). When Zvfbfa is enabled, only bits 9+
are reserved.

Reference:
- https://github.com/riscvarchive/riscv-v-spec/blob/master/ediv.adoc

Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-4-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Add the Zvfbfa extension implied rule
Max Chou [Thu, 2 Apr 2026 12:52:27 +0000 (20:52 +0800)] 
target/riscv: Add the Zvfbfa extension implied rule

According to the Zvfbfa isa spec:
The Zvfbfa extension requires the Zve32f and Zfbfmin extensions.

Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-3-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: Add cfg properties for Zvfbfa extensions
Max Chou [Thu, 2 Apr 2026 12:52:26 +0000 (20:52 +0800)] 
target/riscv: Add cfg properties for Zvfbfa extensions

The Zvfbfa extension adds more complete BF16 vector compute support
and requires the Zve32f and Zfbfmin extensions.

Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Nutty Liu <nutty.liu@hotmail.com>
Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Max Chou <max.chou@sifive.com>
Message-ID: <20260402125234.1371897-2-max.chou@sifive.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: preserve RV32 henvcfgh on henvcfg writes
Bruno Sa [Thu, 9 Apr 2026 15:53:42 +0000 (16:53 +0100)] 
target/riscv: preserve RV32 henvcfgh on henvcfg writes

On RV32, STCE/ADUE/PBMTE/DTE are implemented in henvcfgh. A write to
henvcfg should therefore only update the low 32 bits of env->henvcfg.

The current write_henvcfg() path overwrites env->henvcfg with the
low-half value and clears any bits previously written via henvcfgh.

Preserve the upper 32 bits on RV32 henvcfg writes and keep the existing
RV64 behaviour unchanged.

Signed-off-by: Bruno Sa <bruno.vilaca.sa@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260409155344.2849233-2-bruno.vilaca.sa@gmail.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agoriscv_htif: reject invalid signature ranges (end <= begin)
Munkhbaatar Enkhbaatar [Tue, 9 Dec 2025 08:53:49 +0000 (16:53 +0800)] 
riscv_htif: reject invalid signature ranges (end <= begin)

Prevents huge allocations and crashes caused by malformed HTIF signature
addresses.

Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3205
Signed-off-by: Munkhbaatar Enkhbaatar <munkhuu0825@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20251209085349.61510-1-munkhuu0825@gmail.com>
[ Squashed with following commit to fix build failures
    hw/char/riscv_htif: Fix format specifier for uint64_t

    Message-ID: <20260415134826.1742308-1-chao.liu.zevorn@gmail.com>
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
]
Tested-by: Tao Tang <tangtao1634@phytium.com.cn>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Chao Liu <chao.liu.zevorn@gmail.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agohw/intc: fix heap OOB in ACLINT MTIMER multi-socket
Sebastián Alba Vives [Wed, 1 Apr 2026 05:38:53 +0000 (23:38 -0600)] 
hw/intc: fix heap OOB in ACLINT MTIMER multi-socket

The MMIO read/write handlers index timecmp[] with the absolute hartid
(hartid_base + offset) but the array is allocated with num_harts
elements. In multi-socket configurations with hartid_base > 0 this
causes heap OOB access in the QEMU process.

Fix by using the relative offset for array indexing.

Cc: qemu-security@nongnu.org
Signed-off-by: Sebastián Alba Vives <sebasjosue84@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260401053853.10473-2-sebasjosue84@gmail.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agotarget/riscv: fix stale ptshift and base on page walk restart
Sebastián Alba Vives [Wed, 1 Apr 2026 05:38:52 +0000 (23:38 -0600)] 
target/riscv: fix stale ptshift and base on page walk restart

When the atomic compare-and-swap for updating A/D bits in the page
table entry fails due to a concurrent PTE modification by another
vCPU, get_physical_address() jumps to the 'restart' label to re-walk
the page table from the root.

However, neither 'ptshift' nor 'base' are re-initialized before the
restart. After the walk completes, ptshift has been decremented to
its final value and base has been overwritten with an inner PTE PPN.
On goto restart, the for loop resets i=0 but ptshift and base remain
stale, causing the restarted walk to compute incorrect PTE addresses.

In an SMP guest with MTTCG and Svadu active, this can result in
incorrect physical address mappings or guest crashes.

Fix by saving the root base address and re-initializing both ptshift
and base on each restart.

Fixes: 0c3e702aca ("RISC-V CPU Helpers")
Signed-off-by: Sebastián Alba Vives <sebasjosue84@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-ID: <20260401053853.10473-1-sebasjosue84@gmail.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
4 weeks agohw/riscv/virt-acpi-build.c: Use kvm timer frequency when kvm enabled
Yicong Yang [Wed, 25 Mar 2026 08:13:14 +0000 (16:13 +0800)] 
hw/riscv/virt-acpi-build.c: Use kvm timer frequency when kvm enabled

The timer frequency is decided by the host(kvm) rather than a fixed
RISCV_ACLINT_DEFAULT_TIMEBASE_FREQ on kvm accelerated VM. So build
RCHT with KVM provided timer frequency if KVM is enabled, just like
how we build the timer node on DT based VM.

Fixes: ebfd39289370 ("hw/riscv/virt: virt-acpi-build.c: Add RHCT Table")
Signed-off-by: Yicong Yang <yang.yicong@picoheart.com>
Reviewed-by: Andrew Jones <andrew.jones@oss.qualcomm.com>
Message-ID: <20260325081314.57089-1-yang.yicong@picoheart.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>