* [PULL 00/49] Misc HW patches for 2026-03-08
@ 2026-03-08 22:33 Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 01/49] hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines Philippe Mathieu-Daudé
` (49 more replies)
0 siblings, 50 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
The following changes since commit 1ae4271ab8dbfbf5dc28b36baa7f3fd5fd2215e1:
Merge tag 'pull-11.0-virtio-gpu-updates-060326-1' of https://gitlab.com/stsquad/qemu into staging (2026-03-07 11:22:16 +0000)
are available in the Git repository at:
https://github.com/philmd/qemu.git tags/hw-misc-20260308
for you to fetch changes up to 27c64fa59d1b14c4656908e1dfca49482a96df61:
hw/char: Drop disable property of Diva GSP card (2026-03-08 23:11:14 +0100)
Following checkpatch errors ignored (first spurious, other ones pre-existing):
ERROR: "foo * bar" should be "foo *bar"
#40: FILE: hw/display/ati_2d.c:60:
+ + dst_y * surface_stride(ds),
ERROR: switch and case should be at the same indent
#27: FILE: hw/net/xilinx_axienet.c:143:
switch (regnum) {
+ case 2:
+ case 3:
ERROR: braces {} are necessary for all arms of this statement
#43: FILE: hw/char/serial.c:164:
+ if (s->lcr & UART_LCR_EPS)
[...]
else
[...]
----------------------------------------------------------------
Misc HW patches
- Remove versioned machines released in QEMU 3.0
- Build various stubs and ACPI objects once
- Pair of bug fixes in ATI VGA model
- Cleanups in 16550A UART model
- Clarify PA-RISC CPU models (adding the PA-8500)
- Various memory leaks / overflows fixed
- MAINTAINERS updates
----------------------------------------------------------------
Akihiko Odaki (1):
ui/cocoa: Do not automatically zoom for HiDPI
Anton Johansson (3):
hppa: Introduce HPPACPUDef
hppa: Get physical address space bits from HPPACPUDef
hppa: Use 44 bit physical addresses for PA-8700
BALATON Zoltan (1):
ati-vga: Allow setting EDID parameters directly
Bernhard Beschow (11):
hw/arm/Kconfig: Fix serial selection for NPCM8XX
hw/char/{diva-gsp, serial-pci-multi}: Fix deinitialization order
hw/arm/aspeed_ast27x0-{ssp, tsp}: Do not access SerialMM internals
directly
util/fifo8: Make all read-only methods const-correct
hw/char/serial: Remove explicit cast from void pointer
hw/char/serial: Prefer fifo8 methods over open-coding
hw/char/serial: Reuse fifo8_num_used()
hw/char/serial: Remove unhelpful comment
hw/char/serial: Add constants for Line Control Register
hw/char/serial: Remove redundant reset
hw/char/serial: Avoid implicit conversion when tracing
Chad Jablonski (8):
ati-vga: Fix framebuffer mapping by using hardware-correct aperture
sizes
ati-vga: Fix DST_PITCH and SRC_PITCH reads
ati-vga: Read aliased values from DP_GUI_MASTER_CNTL
ati-vga: Latch src and dst pitch and offset on master_cntl default
ati-vga: Implement foreground and background color register writes
ati-vga: Add scissor clipping register support
ati-vga: Remove dst_x/y updates after blit
ati-vga: Consolidate dirty region tracking in ati_2d_blt
Daniel P. Berrangé (1):
hw/i386: drop unused PC_CPU_MODEL_IDS macro
David Hamilton (1):
hw/misc/ivshmem-pci: Handle error from
kvm_irqchip_add_irqfd_notifier_gsi()
Gerd Hoffmann (1):
hw/uefi: add variable digest to vmstate
Helge Deller (2):
hw/hppa: Avoid leaking a diva-gsp device
hw/char: Drop disable property of Diva GSP card
Jim MacArthur (1):
hw/net/xilinx_axienet: Prevent writes to PHY Identification registers
Peter Maydell (2):
hw/net/xilinx_ethlite: Check for oversized TX packets
hw/m68k/mcf_intc: Use qdev input gpios for input IRQs
Philippe Mathieu-Daudé (15):
hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines
hw/i386/pc: Remove pc_compat_3_0[] array
target/i386/kvm: Remove X86CPU::hyperv_synic_kvm_only field
hw/core/machine: Remove the hw_compat_3_0[] array
meson: Include various directories providing stubs before libqemuutil
hw/acpi: Move acpi_send_event() function out of acpi_interface.c
hw/acpi: Move qbus_build_aml() function out of acpi_interface.c
hw/acpi: Always link QOM interfaces with system binaries
hw/nvram: Build fw_cfg-acpi.c once
hw/acpi: Build stubs once
hw/net: Build stubs once
hw/*: Build stubs once
semihosting: Build stubs once
hw/s390x/s390-pci-vfio: Avoid including CONFIG_DEVICES in hw/ header
audio/jack: Fix use of qemu_thread_set_name() on macOS
Thomas Huth (2):
MAINTAINERS: Replace @tuxfamily.org address
MAINTAINERS: Update the maintainer for the CHRP NVRAM section
MAINTAINERS | 10 +-
meson.build | 16 +--
hw/display/ati_int.h | 16 ++-
hw/display/ati_regs.h | 7 +
include/hw/acpi/acpi.h | 1 +
include/hw/acpi/acpi_dev_interface.h | 2 -
include/hw/core/boards.h | 3 -
include/hw/i386/pc.h | 3 -
include/hw/m68k/mcf.h | 5 +-
include/hw/pci-host/astro.h | 2 +
include/hw/s390x/s390-pci-vfio.h | 20 ---
include/qemu/fifo8.h | 10 +-
target/hppa/cpu-qom.h | 8 +-
target/hppa/cpu.h | 35 ++++-
target/i386/cpu.h | 1 -
audio/jackaudio.c | 2 +-
hw/acpi/acpi_interface.c | 19 ---
hw/acpi/aml-build.c | 11 ++
hw/acpi/core.c | 10 ++
hw/arm/aspeed_ast27x0-ssp.c | 7 +-
hw/arm/aspeed_ast27x0-tsp.c | 7 +-
hw/char/diva-gsp.c | 9 +-
hw/char/serial-pci-multi.c | 2 +-
hw/char/serial.c | 47 +++----
hw/core/machine.c | 3 -
hw/display/ati.c | 126 ++++++++++++++++--
hw/display/ati_2d.c | 60 ++++-----
hw/hppa/machine.c | 55 ++++----
hw/i386/pc.c | 16 ---
hw/i386/pc_piix.c | 9 --
hw/i386/pc_q35.c | 9 --
hw/m68k/mcf5208.c | 24 ++--
hw/m68k/mcf_intc.c | 8 +-
hw/misc/ivshmem-pci.c | 13 +-
.../rocker/{qmp-norocker.c => rocker-stubs.c} | 0
hw/net/xilinx_axienet.c | 4 +
hw/net/xilinx_ethlite.c | 12 +-
hw/pci-host/astro.c | 8 +-
hw/s390x/s390-pci-vfio-stubs.c | 32 +++++
hw/uefi/var-service-vars.c | 37 +++++
linux-user/hppa/elfload.c | 2 +-
target/hppa/cpu.c | 55 ++++++--
target/hppa/mem_helper.c | 39 ++----
target/i386/cpu.c | 2 -
target/i386/kvm/kvm.c | 15 +--
tests/qtest/machine-none-test.c | 2 +-
util/fifo8.c | 10 +-
hw/acpi/meson.build | 28 ++--
hw/arm/Kconfig | 2 +-
hw/char/trace-events | 4 +-
hw/cxl/meson.build | 4 +-
hw/i386/kvm/meson.build | 5 +-
hw/mem/meson.build | 4 +-
hw/net/meson.build | 3 +-
hw/net/trace-events | 1 +
hw/nvram/meson.build | 4 +-
hw/pci/meson.build | 2 +-
hw/s390x/meson.build | 1 +
hw/smbios/meson.build | 10 +-
hw/usb/meson.build | 3 +-
hw/virtio/meson.build | 9 +-
semihosting/meson.build | 9 +-
tests/functional/hppa/test_seabios.py | 4 +-
ui/cocoa.m | 9 +-
64 files changed, 538 insertions(+), 358 deletions(-)
rename hw/net/rocker/{qmp-norocker.c => rocker-stubs.c} (100%)
create mode 100644 hw/s390x/s390-pci-vfio-stubs.c
--
2.53.0
^ permalink raw reply [flat|nested] 52+ messages in thread
* [PULL 01/49] hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 02/49] hw/i386/pc: Remove pc_compat_3_0[] array Philippe Mathieu-Daudé
` (48 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
These machines has been supported for a period of more than 6 years.
According to our versioned machine support policy (see commit
ce80c4fa6ff "docs: document special exception for machine type
deprecation & removal") they can now be removed.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20260307150042.78030-2-philmd@linaro.org>
---
hw/i386/pc_piix.c | 9 ---------
hw/i386/pc_q35.c | 9 ---------
2 files changed, 18 deletions(-)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 961432176cf..29c8e997131 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -668,15 +668,6 @@ static void pc_i440fx_machine_3_1_options(MachineClass *m)
DEFINE_I440FX_MACHINE(3, 1);
-static void pc_i440fx_machine_3_0_options(MachineClass *m)
-{
- pc_i440fx_machine_3_1_options(m);
- compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
- compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
-}
-
-DEFINE_I440FX_MACHINE(3, 0);
-
#ifdef CONFIG_XEN
static void xenfv_machine_4_2_options(MachineClass *m)
{
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 261d759a223..f102da8e4a1 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -614,12 +614,3 @@ static void pc_q35_machine_3_1_options(MachineClass *m)
}
DEFINE_Q35_MACHINE(3, 1);
-
-static void pc_q35_machine_3_0_options(MachineClass *m)
-{
- pc_q35_machine_3_1_options(m);
- compat_props_add(m->compat_props, hw_compat_3_0, hw_compat_3_0_len);
- compat_props_add(m->compat_props, pc_compat_3_0, pc_compat_3_0_len);
-}
-
-DEFINE_Q35_MACHINE(3, 0);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 02/49] hw/i386/pc: Remove pc_compat_3_0[] array
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 01/49] hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 03/49] target/i386/kvm: Remove X86CPU::hyperv_synic_kvm_only field Philippe Mathieu-Daudé
` (47 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
The pc_compat_3_0[] array was only used by the pc-q35-3.0
and pc-i440fx-3.0 machines, which got removed. Remove it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20260307150042.78030-3-philmd@linaro.org>
---
include/hw/i386/pc.h | 3 ---
hw/i386/pc.c | 7 -------
2 files changed, 10 deletions(-)
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 113813c07d7..5623660f5dd 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -277,9 +277,6 @@ extern const size_t pc_compat_4_0_len;
extern GlobalProperty pc_compat_3_1[];
extern const size_t pc_compat_3_1_len;
-extern GlobalProperty pc_compat_3_0[];
-extern const size_t pc_compat_3_0_len;
-
#define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
static void pc_machine_##suffix##_class_init(ObjectClass *oc, \
const void *data) \
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 819e729a6e3..a38634e3577 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -214,13 +214,6 @@ GlobalProperty pc_compat_3_1[] = {
};
const size_t pc_compat_3_1_len = G_N_ELEMENTS(pc_compat_3_1);
-GlobalProperty pc_compat_3_0[] = {
- { TYPE_X86_CPU, "x-hv-synic-kvm-only", "on" },
- { "Skylake-Server" "-" TYPE_X86_CPU, "pku", "off" },
- { "Skylake-Server-IBRS" "-" TYPE_X86_CPU, "pku", "off" },
-};
-const size_t pc_compat_3_0_len = G_N_ELEMENTS(pc_compat_3_0);
-
/*
* @PC_FW_DATA:
* Size of the chunk of memory at the top of RAM for the BIOS ACPI tables
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 03/49] target/i386/kvm: Remove X86CPU::hyperv_synic_kvm_only field
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 01/49] hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 02/49] hw/i386/pc: Remove pc_compat_3_0[] array Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 04/49] hw/core/machine: Remove the hw_compat_3_0[] array Philippe Mathieu-Daudé
` (46 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
The X86CPU::hyperv_synic_kvm_only boolean (see commit 9b4cf107b09
"hyperv: only add SynIC in compatible configurations") was only set
in the pc_compat_3_0[] array, via the 'x-hv-synic-kvm-only=on'
property. We removed all machines using that array, lets remove that
property and all the code around it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20260307150042.78030-4-philmd@linaro.org>
---
target/i386/cpu.h | 1 -
target/i386/cpu.c | 2 --
target/i386/kvm/kvm.c | 15 ++++-----------
3 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index f2679cc5b72..2b70d56e9b0 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -2335,7 +2335,6 @@ struct ArchCPU {
uint32_t hyperv_spinlock_attempts;
char *hyperv_vendor;
- bool hyperv_synic_kvm_only;
uint64_t hyperv_features;
bool hyperv_passthrough;
OnOffAuto hyperv_no_nonarch_cs;
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 01b64940b17..c77addd2c25 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -10589,8 +10589,6 @@ static const Property x86_cpu_properties[] = {
* to the specific Windows version being used."
*/
DEFINE_PROP_INT32("x-hv-max-vps", X86CPU, hv_max_vps, -1),
- DEFINE_PROP_BOOL("x-hv-synic-kvm-only", X86CPU, hyperv_synic_kvm_only,
- false),
DEFINE_PROP_BOOL("x-intel-pt-auto-level", X86CPU, intel_pt_auto_level,
true),
DEFINE_PROP_BOOL("x-l1-cache-per-thread", X86CPU, l1_cache_per_core, true),
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 27b1b848d6a..a29f757c168 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -1278,10 +1278,7 @@ static struct kvm_cpuid2 *get_supported_hv_cpuid_legacy(CPUState *cs)
}
if (has_msr_hv_synic) {
- unsigned int cap = cpu->hyperv_synic_kvm_only ?
- KVM_CAP_HYPERV_SYNIC : KVM_CAP_HYPERV_SYNIC2;
-
- if (kvm_check_extension(cs->kvm_state, cap) > 0) {
+ if (kvm_check_extension(cs->kvm_state, KVM_CAP_HYPERV_SYNIC2) > 0) {
entry_feat->eax |= HV_SYNIC_AVAILABLE;
}
}
@@ -1543,7 +1540,6 @@ bool kvm_hyperv_expand_features(X86CPU *cpu, Error **errp)
/* Additional dependencies not covered by kvm_hyperv_properties[] */
if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC) &&
- !cpu->hyperv_synic_kvm_only &&
!hyperv_feat_enabled(cpu, HYPERV_FEAT_VPINDEX)) {
error_setg(errp, "Hyper-V %s requires Hyper-V %s",
kvm_hyperv_properties[HYPERV_FEAT_SYNIC].desc,
@@ -1608,8 +1604,7 @@ static int hyperv_fill_cpuids(CPUState *cs,
c->eax |= HV_HYPERCALL_AVAILABLE;
/* SynIC and Vmbus devices require messages/signals hypercalls */
- if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC) &&
- !cpu->hyperv_synic_kvm_only) {
+ if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) {
c->ebx |= HV_POST_MESSAGES | HV_SIGNAL_EVENTS;
}
@@ -1752,16 +1747,14 @@ static int hyperv_init_vcpu(X86CPU *cpu)
}
if (hyperv_feat_enabled(cpu, HYPERV_FEAT_SYNIC)) {
- uint32_t synic_cap = cpu->hyperv_synic_kvm_only ?
- KVM_CAP_HYPERV_SYNIC : KVM_CAP_HYPERV_SYNIC2;
- ret = kvm_vcpu_enable_cap(cs, synic_cap, 0);
+ ret = kvm_vcpu_enable_cap(cs, KVM_CAP_HYPERV_SYNIC2, 0);
if (ret < 0) {
error_report("failed to turn on HyperV SynIC in KVM: %s",
strerror(-ret));
return ret;
}
- if (!cpu->hyperv_synic_kvm_only && !hyperv_is_synic_enabled()) {
+ if (!hyperv_is_synic_enabled()) {
ret = hyperv_x86_synic_add(cpu);
if (ret < 0) {
error_report("failed to create HyperV SynIC: %s",
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 04/49] hw/core/machine: Remove the hw_compat_3_0[] array
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2026-03-08 22:33 ` [PULL 03/49] target/i386/kvm: Remove X86CPU::hyperv_synic_kvm_only field Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 05/49] meson: Include various directories providing stubs before libqemuutil Philippe Mathieu-Daudé
` (45 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
The hw_compat_3_0[] array was only used by the pc-q35-3.0
and pc-i440fx-3.0 machines, which got removed. Remove it.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20260307150042.78030-5-philmd@linaro.org>
---
include/hw/core/boards.h | 3 ---
hw/core/machine.c | 3 ---
2 files changed, 6 deletions(-)
diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h
index f4ee68bbea5..9ad2a7d5c97 100644
--- a/include/hw/core/boards.h
+++ b/include/hw/core/boards.h
@@ -871,7 +871,4 @@ extern const size_t hw_compat_4_0_len;
extern GlobalProperty hw_compat_3_1[];
extern const size_t hw_compat_3_1_len;
-extern GlobalProperty hw_compat_3_0[];
-extern const size_t hw_compat_3_0_len;
-
#endif
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 4770618b559..162600425b0 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -238,9 +238,6 @@ GlobalProperty hw_compat_3_1[] = {
};
const size_t hw_compat_3_1_len = G_N_ELEMENTS(hw_compat_3_1);
-GlobalProperty hw_compat_3_0[] = {};
-const size_t hw_compat_3_0_len = G_N_ELEMENTS(hw_compat_3_0);
-
MachineState *current_machine;
static char *machine_get_kernel(Object *obj, Error **errp)
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 05/49] meson: Include various directories providing stubs before libqemuutil
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2026-03-08 22:33 ` [PULL 04/49] hw/core/machine: Remove the hw_compat_3_0[] array Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 06/49] hw/acpi: Move acpi_send_event() function out of acpi_interface.c Philippe Mathieu-Daudé
` (44 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Stubs are provided by libqemuutil. We want to use the generic meson
machinery to provide stubs once, instead of per sub-directories. Move
the 'subdir' calls earlier so when these directories are processed
they can add units to the global stub_ss[] source set.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20260225035739.42848-2-philmd@linaro.org>
---
meson.build | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/meson.build b/meson.build
index 0029c970b08..102f0cbb13e 100644
--- a/meson.build
+++ b/meson.build
@@ -3754,6 +3754,14 @@ subdir('authz')
subdir('crypto')
subdir('ui')
subdir('gdbstub')
+subdir('semihosting')
+subdir('audio')
+subdir('io')
+subdir('chardev')
+subdir('fsdev')
+subdir('dump')
+subdir('accel')
+
if have_system
subdir('hw')
else
@@ -3799,12 +3807,6 @@ if have_system or have_user
subdir('target')
endif
-subdir('audio')
-subdir('io')
-subdir('chardev')
-subdir('fsdev')
-subdir('dump')
-
if have_block
block_ss.add(files(
'block.c',
@@ -3874,11 +3876,9 @@ subdir('migration')
subdir('monitor')
subdir('net')
subdir('replay')
-subdir('semihosting')
subdir('stats')
subdir('tcg')
subdir('fpu')
-subdir('accel')
subdir('plugins')
subdir('ebpf')
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 06/49] hw/acpi: Move acpi_send_event() function out of acpi_interface.c
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2026-03-08 22:33 ` [PULL 05/49] meson: Include various directories providing stubs before libqemuutil Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 07/49] hw/acpi: Move qbus_build_aml() " Philippe Mathieu-Daudé
` (43 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
acpi_interface.c should only register QOM interfaces. Move
the acpi_send_event() function to core.c with the other
event handlers, and its declaration in 'hw/acpi/acpi.h'.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20260225035739.42848-3-philmd@linaro.org>
---
include/hw/acpi/acpi.h | 1 +
include/hw/acpi/acpi_dev_interface.h | 2 --
hw/acpi/acpi_interface.c | 9 ---------
hw/acpi/core.c | 10 ++++++++++
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/include/hw/acpi/acpi.h b/include/hw/acpi/acpi.h
index b036116dfb8..dc3672db521 100644
--- a/include/hw/acpi/acpi.h
+++ b/include/hw/acpi/acpi.h
@@ -182,6 +182,7 @@ void acpi_gpe_reset(ACPIREGS *ar);
void acpi_gpe_ioport_writeb(ACPIREGS *ar, uint32_t addr, uint32_t val);
uint32_t acpi_gpe_ioport_readb(ACPIREGS *ar, uint32_t addr);
+void acpi_send_event(DeviceState *dev, AcpiEventStatusBits event);
void acpi_send_gpe_event(ACPIREGS *ar, qemu_irq irq,
AcpiEventStatusBits status);
diff --git a/include/hw/acpi/acpi_dev_interface.h b/include/hw/acpi/acpi_dev_interface.h
index 5927e40eaff..65debb90a8d 100644
--- a/include/hw/acpi/acpi_dev_interface.h
+++ b/include/hw/acpi/acpi_dev_interface.h
@@ -27,8 +27,6 @@ DECLARE_CLASS_CHECKERS(AcpiDeviceIfClass, ACPI_DEVICE_IF,
typedef struct AcpiDeviceIf AcpiDeviceIf;
-void acpi_send_event(DeviceState *dev, AcpiEventStatusBits event);
-
/**
* AcpiDeviceIfClass:
*
diff --git a/hw/acpi/acpi_interface.c b/hw/acpi/acpi_interface.c
index 8637ff18fca..e58e8aaee23 100644
--- a/hw/acpi/acpi_interface.c
+++ b/hw/acpi/acpi_interface.c
@@ -4,15 +4,6 @@
#include "qemu/module.h"
#include "qemu/queue.h"
-void acpi_send_event(DeviceState *dev, AcpiEventStatusBits event)
-{
- AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(dev);
- if (adevc->send_event) {
- AcpiDeviceIf *adev = ACPI_DEVICE_IF(dev);
- adevc->send_event(adev, event);
- }
-}
-
void qbus_build_aml(BusState *bus, Aml *scope)
{
BusChild *kid;
diff --git a/hw/acpi/core.c b/hw/acpi/core.c
index 6b65e587f2a..a6a62a742d1 100644
--- a/hw/acpi/core.c
+++ b/hw/acpi/core.c
@@ -22,6 +22,7 @@
#include "qemu/osdep.h"
#include "hw/core/irq.h"
#include "hw/acpi/acpi.h"
+#include "hw/acpi/acpi_dev_interface.h"
#include "hw/nvram/fw_cfg.h"
#include "qemu/config-file.h"
#include "qapi/error.h"
@@ -753,3 +754,12 @@ void acpi_update_sci(ACPIREGS *regs, qemu_irq irq)
(regs->pm1.evt.en & ACPI_BITMASK_TIMER_ENABLE) &&
!(pm1a_sts & ACPI_BITMASK_TIMER_STATUS));
}
+
+void acpi_send_event(DeviceState *dev, AcpiEventStatusBits event)
+{
+ AcpiDeviceIfClass *adevc = ACPI_DEVICE_IF_GET_CLASS(dev);
+ if (adevc->send_event) {
+ AcpiDeviceIf *adev = ACPI_DEVICE_IF(dev);
+ adevc->send_event(adev, event);
+ }
+}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 07/49] hw/acpi: Move qbus_build_aml() function out of acpi_interface.c
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2026-03-08 22:33 ` [PULL 06/49] hw/acpi: Move acpi_send_event() function out of acpi_interface.c Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 08/49] hw/acpi: Always link QOM interfaces with system binaries Philippe Mathieu-Daudé
` (42 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
acpi_interface.c should only register QOM interfaces. Move
the qbus_build_aml() function to aml-build.c with the other
AML build-related helpers.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20260225035739.42848-4-philmd@linaro.org>
---
hw/acpi/acpi_interface.c | 10 ----------
hw/acpi/aml-build.c | 11 +++++++++++
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/hw/acpi/acpi_interface.c b/hw/acpi/acpi_interface.c
index e58e8aaee23..a44679017ea 100644
--- a/hw/acpi/acpi_interface.c
+++ b/hw/acpi/acpi_interface.c
@@ -2,16 +2,6 @@
#include "hw/acpi/acpi_dev_interface.h"
#include "hw/acpi/acpi_aml_interface.h"
#include "qemu/module.h"
-#include "qemu/queue.h"
-
-void qbus_build_aml(BusState *bus, Aml *scope)
-{
- BusChild *kid;
-
- QTAILQ_FOREACH(kid, &bus->children, sibling) {
- call_dev_aml_func(DEVICE(kid->child), scope);
- }
-}
static void register_types(void)
{
diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c
index ea1c415b211..4b374050881 100644
--- a/hw/acpi/aml-build.c
+++ b/hw/acpi/aml-build.c
@@ -25,12 +25,14 @@
#include "hw/acpi/acpi.h"
#include "qemu/bswap.h"
#include "qemu/bitops.h"
+#include "qemu/queue.h"
#include "system/numa.h"
#include "hw/core/boards.h"
#include "hw/acpi/tpm.h"
#include "hw/pci/pci_host.h"
#include "hw/pci/pci_bus.h"
#include "hw/pci/pci_bridge.h"
+#include "hw/acpi/acpi_aml_interface.h"
#include "qemu/cutils.h"
static GArray *build_alloc_array(void)
@@ -2647,3 +2649,12 @@ Aml *aml_error_device(void)
return dev;
}
+
+void qbus_build_aml(BusState *bus, Aml *scope)
+{
+ BusChild *kid;
+
+ QTAILQ_FOREACH(kid, &bus->children, sibling) {
+ call_dev_aml_func(DEVICE(kid->child), scope);
+ }
+}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 08/49] hw/acpi: Always link QOM interfaces with system binaries
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2026-03-08 22:33 ` [PULL 07/49] hw/acpi: Move qbus_build_aml() " Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 09/49] hw/nvram: Build fw_cfg-acpi.c once Philippe Mathieu-Daudé
` (41 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Now that acpi_interface.c only contains QOM interfaces,
unconditionally link it with system binaries, regardless
of whether CONFIG_ACPI is set or not. It is now easier to
deselect hardware models depending on ACPI.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20260225035739.42848-5-philmd@linaro.org>
---
hw/acpi/meson.build | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/hw/acpi/meson.build b/hw/acpi/meson.build
index 66c978aae83..e1e848327b9 100644
--- a/hw/acpi/meson.build
+++ b/hw/acpi/meson.build
@@ -1,6 +1,5 @@
acpi_ss = ss.source_set()
acpi_ss.add(files(
- 'acpi_interface.c',
'aml-build.c',
'bios-linker-loader.c',
'core.c',
@@ -36,4 +35,4 @@ system_ss.add(when: 'CONFIG_ACPI_PCI_BRIDGE', if_false: files('pci-bridge-stub.c
system_ss.add_all(when: 'CONFIG_ACPI', if_true: acpi_ss)
system_ss.add(when: 'CONFIG_GHES_CPER', if_true: files('ghes_cper.c'))
system_ss.add(when: 'CONFIG_GHES_CPER', if_false: files('ghes_cper_stub.c'))
-system_ss.add(files('acpi-qmp-cmds.c'))
+system_ss.add(files('acpi-qmp-cmds.c', 'acpi_interface.c'))
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 09/49] hw/nvram: Build fw_cfg-acpi.c once
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2026-03-08 22:33 ` [PULL 08/49] hw/acpi: Always link QOM interfaces with system binaries Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 10/49] hw/acpi: Build stubs once Philippe Mathieu-Daudé
` (40 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20260225035739.42848-6-philmd@linaro.org>
---
hw/nvram/meson.build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/nvram/meson.build b/hw/nvram/meson.build
index b66f23605b7..26343359875 100644
--- a/hw/nvram/meson.build
+++ b/hw/nvram/meson.build
@@ -18,8 +18,8 @@ system_ss.add(when: 'CONFIG_XLNX_EFUSE_ZYNQMP', if_true: files(
system_ss.add(when: 'CONFIG_XLNX_BBRAM', if_true: files('xlnx-bbram.c'))
specific_ss.add(when: 'CONFIG_PSERIES', if_true: files('spapr_nvram.c'))
-specific_ss.add(when: 'CONFIG_ACPI', if_true: files('fw_cfg-acpi.c'))
+system_ss.add(when: 'CONFIG_ACPI', if_true: files('fw_cfg-acpi.c'))
system_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
'aspeed_otp.c',
- ))
\ No newline at end of file
+ ))
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 10/49] hw/acpi: Build stubs once
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (8 preceding siblings ...)
2026-03-08 22:33 ` [PULL 09/49] hw/nvram: Build fw_cfg-acpi.c once Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 11/49] hw/net: " Philippe Mathieu-Daudé
` (39 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Move stubs to the global stub_ss[] source set. These files
are now built once for all binaries, instead of one time
per system binary.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20260225035739.42848-7-philmd@linaro.org>
---
hw/acpi/meson.build | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/hw/acpi/meson.build b/hw/acpi/meson.build
index e1e848327b9..1c5251909b4 100644
--- a/hw/acpi/meson.build
+++ b/hw/acpi/meson.build
@@ -6,33 +6,36 @@ acpi_ss.add(files(
'utils.c',
))
acpi_ss.add(when: 'CONFIG_ACPI_CPU_HOTPLUG', if_true: files('cpu.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_CPU_HOTPLUG', if_false: files('acpi-cpu-hotplug-stub.c'))
+stub_ss.add(files('acpi-cpu-hotplug-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_MEMORY_HOTPLUG', if_true: files('memory_hotplug.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_MEMORY_HOTPLUG', if_false: files('acpi-mem-hotplug-stub.c'))
+stub_ss.add(files('acpi-mem-hotplug-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_NVDIMM', if_true: files('nvdimm.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_NVDIMM', if_false: files('acpi-nvdimm-stub.c'))
+stub_ss.add(files('acpi-nvdimm-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_PCI', if_true: files('pci.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_CXL', if_true: files('cxl.c'), if_false: files('cxl-stub.c'))
+acpi_ss.add(when: 'CONFIG_ACPI_CXL', if_true: files('cxl.c'))
+stub_ss.add(files('cxl-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_VMGENID', if_true: files('vmgenid.c'))
acpi_ss.add(when: 'CONFIG_ACPI_VMCLOCK', if_true: files('vmclock.c'))
acpi_ss.add(when: 'CONFIG_ACPI_HW_REDUCED', if_true: files('generic_event_device.c'))
acpi_ss.add(when: 'CONFIG_ACPI_HMAT', if_true: files('hmat.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_APEI', if_true: files('ghes.c'), if_false: files('ghes-stub.c'))
+acpi_ss.add(when: 'CONFIG_ACPI_APEI', if_true: files('ghes.c'))
+stub_ss.add(files('ghes-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_PIIX4', if_true: files('piix4.c'))
acpi_ss.add(when: 'CONFIG_ACPI_PCI_BRIDGE', if_true: files('pci-bridge.c'))
acpi_ss.add(when: 'CONFIG_ACPI_PCIHP', if_true: files('pcihp.c'))
-acpi_ss.add(when: 'CONFIG_ACPI_PCIHP', if_false: files('acpi-pci-hotplug-stub.c'))
+stub_ss.add(files('acpi-pci-hotplug-stub.c'))
acpi_ss.add(when: 'CONFIG_ACPI_VIOT', if_true: files('viot.c'))
acpi_ss.add(when: 'CONFIG_ACPI_ICH9', if_true: files('ich9.c', 'ich9_tco.c', 'ich9_timer.c'))
acpi_ss.add(when: 'CONFIG_ACPI_ERST', if_true: files('erst.c'))
-acpi_ss.add(when: 'CONFIG_IPMI', if_true: files('ipmi.c'), if_false: files('ipmi-stub.c'))
-acpi_ss.add(when: 'CONFIG_PC', if_false: files('acpi-x86-stub.c'))
+acpi_ss.add(when: 'CONFIG_IPMI', if_true: files('ipmi.c'))
+stub_ss.add(files('ipmi-stub.c'))
+stub_ss.add(files('acpi-x86-stub.c'))
if have_tpm
acpi_ss.add(files('tpm.c'))
endif
-system_ss.add(when: 'CONFIG_ACPI', if_false: files('acpi-stub.c', 'aml-build-stub.c', 'ghes-stub.c', 'acpi_interface.c'))
-system_ss.add(when: 'CONFIG_ACPI_PCI_BRIDGE', if_false: files('pci-bridge-stub.c'))
+stub_ss.add(files('acpi-stub.c', 'aml-build-stub.c', 'ghes-stub.c'))
+stub_ss.add(files('pci-bridge-stub.c'))
system_ss.add_all(when: 'CONFIG_ACPI', if_true: acpi_ss)
system_ss.add(when: 'CONFIG_GHES_CPER', if_true: files('ghes_cper.c'))
-system_ss.add(when: 'CONFIG_GHES_CPER', if_false: files('ghes_cper_stub.c'))
+stub_ss.add(files('ghes_cper_stub.c'))
system_ss.add(files('acpi-qmp-cmds.c', 'acpi_interface.c'))
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 11/49] hw/net: Build stubs once
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (9 preceding siblings ...)
2026-03-08 22:33 ` [PULL 10/49] hw/acpi: Build stubs once Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 12/49] hw/*: " Philippe Mathieu-Daudé
` (38 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Move stubs to the global stub_ss[] source set. These files
are now built once for all binaries, instead of one time
per system binary.
qmp-norocker.c only contains stubs, rename it accordingly.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20260225035739.42848-9-philmd@linaro.org>
---
hw/net/rocker/{qmp-norocker.c => rocker-stubs.c} | 0
hw/net/meson.build | 3 ++-
2 files changed, 2 insertions(+), 1 deletion(-)
rename hw/net/rocker/{qmp-norocker.c => rocker-stubs.c} (100%)
diff --git a/hw/net/rocker/qmp-norocker.c b/hw/net/rocker/rocker-stubs.c
similarity index 100%
rename from hw/net/rocker/qmp-norocker.c
rename to hw/net/rocker/rocker-stubs.c
diff --git a/hw/net/meson.build b/hw/net/meson.build
index bf6a625a92a..31025874699 100644
--- a/hw/net/meson.build
+++ b/hw/net/meson.build
@@ -66,7 +66,8 @@ system_ss.add(when: 'CONFIG_ROCKER', if_true: files(
'rocker/rocker_fp.c',
'rocker/rocker_of_dpa.c',
'rocker/rocker_world.c',
-), if_false: files('rocker/qmp-norocker.c'))
+))
+stub_ss.add(files('rocker/rocker-stubs.c'))
system_ss.add(files('rocker/rocker-hmp-cmds.c'))
subdir('can')
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 12/49] hw/*: Build stubs once
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (10 preceding siblings ...)
2026-03-08 22:33 ` [PULL 11/49] hw/net: " Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 13/49] semihosting: " Philippe Mathieu-Daudé
` (37 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Move stubs to the global stub_ss[] source set. These files
are now built once for all binaries, instead of one time
per system binary.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20260225035739.42848-10-philmd@linaro.org>
---
hw/cxl/meson.build | 4 ++--
hw/i386/kvm/meson.build | 5 +----
hw/mem/meson.build | 4 ++--
hw/pci/meson.build | 2 +-
hw/smbios/meson.build | 10 +++++-----
hw/usb/meson.build | 3 ++-
hw/virtio/meson.build | 9 +++------
7 files changed, 16 insertions(+), 21 deletions(-)
diff --git a/hw/cxl/meson.build b/hw/cxl/meson.build
index 3e375f61a98..5f61273a68d 100644
--- a/hw/cxl/meson.build
+++ b/hw/cxl/meson.build
@@ -7,7 +7,7 @@ system_ss.add(when: 'CONFIG_CXL',
'cxl-cdat.c',
'cxl-events.c',
'switch-mailbox-cci.c',
- ),
- if_false: files(
+ ))
+stub_ss.add(files(
'cxl-host-stubs.c',
))
diff --git a/hw/i386/kvm/meson.build b/hw/i386/kvm/meson.build
index a4a2e23c06e..a34b3504cba 100644
--- a/hw/i386/kvm/meson.build
+++ b/hw/i386/kvm/meson.build
@@ -15,9 +15,6 @@ i386_kvm_ss.add(when: 'CONFIG_XEN_EMU', if_true: files(
i386_ss.add_all(when: 'CONFIG_KVM', if_true: i386_kvm_ss)
-xen_stubs_ss = ss.source_set()
-xen_stubs_ss.add(when: 'CONFIG_XEN_EMU', if_false: files(
+stub_ss.add(files(
'xen-stubs.c',
))
-
-specific_ss.add_all(when: 'CONFIG_SYSTEM_ONLY', if_true: xen_stubs_ss)
diff --git a/hw/mem/meson.build b/hw/mem/meson.build
index 1c1c6da24b5..8c2beeb7d4d 100644
--- a/hw/mem/meson.build
+++ b/hw/mem/meson.build
@@ -4,9 +4,9 @@ mem_ss.add(when: 'CONFIG_DIMM', if_true: files('pc-dimm.c'))
mem_ss.add(when: 'CONFIG_NPCM7XX', if_true: files('npcm7xx_mc.c'))
mem_ss.add(when: 'CONFIG_NVDIMM', if_true: files('nvdimm.c'))
mem_ss.add(when: 'CONFIG_CXL_MEM_DEVICE', if_true: files('cxl_type3.c'))
-system_ss.add(when: 'CONFIG_CXL_MEM_DEVICE', if_false: files('cxl_type3_stubs.c'))
+stub_ss.add(files('cxl_type3_stubs.c'))
-system_ss.add(when: 'CONFIG_MEM_DEVICE', if_false: files('memory-device-stubs.c'))
+stub_ss.add(files('memory-device-stubs.c'))
system_ss.add_all(when: 'CONFIG_MEM_DEVICE', if_true: mem_ss)
system_ss.add(when: 'CONFIG_SPARSE_MEM', if_true: files('sparse-mem.c'))
diff --git a/hw/pci/meson.build b/hw/pci/meson.build
index b9c34b2acfe..a6cbd89c0a3 100644
--- a/hw/pci/meson.build
+++ b/hw/pci/meson.build
@@ -19,4 +19,4 @@ pci_ss.add(files('pcie_doe.c'))
system_ss.add(when: 'CONFIG_PCI_EXPRESS', if_true: files('pcie_port.c', 'pcie_host.c'))
system_ss.add_all(when: 'CONFIG_PCI', if_true: pci_ss)
-system_ss.add(when: 'CONFIG_PCI', if_false: files('pci-stub.c'))
+stub_ss.add(files('pci-stub.c'))
diff --git a/hw/smbios/meson.build b/hw/smbios/meson.build
index a59039f6692..9bf4b1ad1e5 100644
--- a/hw/smbios/meson.build
+++ b/hw/smbios/meson.build
@@ -1,12 +1,12 @@
smbios_ss = ss.source_set()
smbios_ss.add(files('smbios.c'))
smbios_ss.add(when: 'CONFIG_IPMI',
- if_true: files('smbios_type_38.c'),
- if_false: files('smbios_type_38-stub.c'))
+ if_true: files('smbios_type_38.c'))
+stub_ss.add(files('smbios_type_38-stub.c'))
smbios_ss.add(when: 'CONFIG_SMBIOS_LEGACY',
- if_true: files('smbios_legacy.c'),
- if_false: files('smbios_legacy_stub.c'))
+ if_true: files('smbios_legacy.c'))
+stub_ss.add(files('smbios_legacy_stub.c'))
system_ss.add_all(when: 'CONFIG_SMBIOS', if_true: smbios_ss)
-system_ss.add(when: 'CONFIG_SMBIOS', if_false: files('smbios-stub.c'))
+stub_ss.add(files('smbios-stub.c'))
diff --git a/hw/usb/meson.build b/hw/usb/meson.build
index 17360a5b5a4..ba55c28ef69 100644
--- a/hw/usb/meson.build
+++ b/hw/usb/meson.build
@@ -9,7 +9,8 @@ system_ss.add(when: 'CONFIG_USB', if_true: files(
'desc-msos.c',
'libhw.c',
'pcap.c',
-), if_false: files('bus-stub.c'))
+))
+stub_ss.add(files('bus-stub.c'))
# usb host adapters
system_ss.add(when: 'CONFIG_USB_UHCI', if_true: files('hcd-uhci.c'))
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 821366f5e90..415e359e9fc 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -48,8 +48,6 @@ if have_vhost
system_virtio_ss.add(files('vhost-vdpa.c'))
system_virtio_ss.add(files('vhost-shadow-virtqueue.c'))
endif
-else
- system_virtio_ss.add(files('vhost-stub.c'))
endif
system_virtio_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock.c'))
system_virtio_ss.add(when: 'CONFIG_VIRTIO_RNG', if_true: files('virtio-rng.c'))
@@ -92,10 +90,9 @@ virtio_pci_ss.add(when: 'CONFIG_VIRTIO_MD', if_true: files('virtio-md-pci.c'))
system_virtio_ss.add_all(when: 'CONFIG_VIRTIO_PCI', if_true: virtio_pci_ss)
system_ss.add_all(when: 'CONFIG_VIRTIO', if_true: system_virtio_ss)
-system_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
-system_ss.add(when: 'CONFIG_VIRTIO', if_false: files('virtio-stub.c'))
-system_ss.add(when: ['CONFIG_VIRTIO_MD', 'CONFIG_VIRTIO_PCI'],
- if_false: files('virtio-md-stubs.c'))
+stub_ss.add(files('vhost-stub.c'))
+stub_ss.add(files('virtio-stub.c'))
+stub_ss.add(files('virtio-md-stubs.c'))
system_ss.add(files('virtio-hmp-cmds.c'))
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 13/49] semihosting: Build stubs once
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (11 preceding siblings ...)
2026-03-08 22:33 ` [PULL 12/49] hw/*: " Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 14/49] hw/s390x/s390-pci-vfio: Avoid including CONFIG_DEVICES in hw/ header Philippe Mathieu-Daudé
` (36 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
Move stubs to the global stub_ss[] source set. These files
are now built once for all binaries, instead of one time
per system binary.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20260225035739.42848-12-philmd@linaro.org>
---
semihosting/meson.build | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/semihosting/meson.build b/semihosting/meson.build
index 99f10e2e2bb..15e3be26989 100644
--- a/semihosting/meson.build
+++ b/semihosting/meson.build
@@ -1,4 +1,4 @@
-common_ss.add(when: 'CONFIG_SEMIHOSTING', if_false: files('stubs-all.c'))
+stub_ss.add(files('stubs-all.c'))
user_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files(
'user.c',
'guestfd.c'))
@@ -8,12 +8,13 @@ system_ss.add(when: 'CONFIG_SEMIHOSTING', if_true: files(
'guestfd.c',
'uaccess.c',
'syscalls.c',
-), if_false: files(
+))
+stub_ss.add(files(
'stubs-system.c',
))
system_ss.add(when: 'CONFIG_ARM_COMPATIBLE_SEMIHOSTING',
- if_true: files('arm-compat-semi.c'),
- if_false: files('arm-compat-semi-stub.c'))
+ if_true: files('arm-compat-semi.c'))
+stub_ss.add(files('arm-compat-semi-stub.c'))
specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_USER_ONLY'],
if_true: files('syscalls.c'))
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 14/49] hw/s390x/s390-pci-vfio: Avoid including CONFIG_DEVICES in hw/ header
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (12 preceding siblings ...)
2026-03-08 22:33 ` [PULL 13/49] semihosting: " Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 15/49] hw/misc/ivshmem-pci: Handle error from kvm_irqchip_add_irqfd_notifier_gsi() Philippe Mathieu-Daudé
` (35 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
By turning the inline functions into stubs we can avoid the
use of target-specific CONFIG_DEVICES include in a hw/ header,
allowing to build the source files including it as common objects.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Farhan Ali<alifm@linux.ibm.com>
Message-Id: <20260225031658.32095-4-philmd@linaro.org>
---
include/hw/s390x/s390-pci-vfio.h | 20 --------------------
hw/s390x/s390-pci-vfio-stubs.c | 32 ++++++++++++++++++++++++++++++++
hw/s390x/meson.build | 1 +
3 files changed, 33 insertions(+), 20 deletions(-)
create mode 100644 hw/s390x/s390-pci-vfio-stubs.c
diff --git a/include/hw/s390x/s390-pci-vfio.h b/include/hw/s390x/s390-pci-vfio.h
index ae1b126ff70..f7d6149daf6 100644
--- a/include/hw/s390x/s390-pci-vfio.h
+++ b/include/hw/s390x/s390-pci-vfio.h
@@ -13,32 +13,12 @@
#define HW_S390_PCI_VFIO_H
#include "hw/s390x/s390-pci-bus.h"
-#include CONFIG_DEVICES
-#ifdef CONFIG_VFIO
bool s390_pci_update_dma_avail(int fd, unsigned int *avail);
S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
S390PCIBusDevice *pbdev);
void s390_pci_end_dma_count(S390pciState *s, S390PCIDMACount *cnt);
bool s390_pci_get_host_fh(S390PCIBusDevice *pbdev, uint32_t *fh);
void s390_pci_get_clp_info(S390PCIBusDevice *pbdev);
-#else
-static inline bool s390_pci_update_dma_avail(int fd, unsigned int *avail)
-{
- return false;
-}
-static inline S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
- S390PCIBusDevice *pbdev)
-{
- return NULL;
-}
-static inline void s390_pci_end_dma_count(S390pciState *s,
- S390PCIDMACount *cnt) { }
-static inline bool s390_pci_get_host_fh(S390PCIBusDevice *pbdev, uint32_t *fh)
-{
- return false;
-}
-static inline void s390_pci_get_clp_info(S390PCIBusDevice *pbdev) { }
-#endif
#endif
diff --git a/hw/s390x/s390-pci-vfio-stubs.c b/hw/s390x/s390-pci-vfio-stubs.c
new file mode 100644
index 00000000000..d9882b7aad0
--- /dev/null
+++ b/hw/s390x/s390-pci-vfio-stubs.c
@@ -0,0 +1,32 @@
+/*
+ * s390 vfio-pci stubs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "hw/s390x/s390-pci-vfio.h"
+
+bool s390_pci_update_dma_avail(int fd, unsigned int *avail)
+{
+ return false;
+}
+
+S390PCIDMACount *s390_pci_start_dma_count(S390pciState *s,
+ S390PCIBusDevice *pbdev)
+{
+ return NULL;
+}
+
+void s390_pci_end_dma_count(S390pciState *s, S390PCIDMACount *cnt)
+{
+}
+
+bool s390_pci_get_host_fh(S390PCIBusDevice *pbdev, uint32_t *fh)
+{
+ return false;
+}
+
+void s390_pci_get_clp_info(S390PCIBusDevice *pbdev)
+{
+}
diff --git a/hw/s390x/meson.build b/hw/s390x/meson.build
index 1bc85837996..57cc2a6be3d 100644
--- a/hw/s390x/meson.build
+++ b/hw/s390x/meson.build
@@ -34,6 +34,7 @@ s390x_ss.add(when: 'CONFIG_S390_CCW_VIRTIO', if_true: files(
))
s390x_ss.add(when: 'CONFIG_TERMINAL3270', if_true: files('3270-ccw.c'))
s390x_ss.add(when: 'CONFIG_VFIO', if_true: files('s390-pci-vfio.c'))
+stub_ss.add(files('s390-pci-vfio-stubs.c'))
s390x_ss.add(when: 'CONFIG_VFIO_AP', if_false: files('ap-stub.c'))
virtio_ss = ss.source_set()
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 15/49] hw/misc/ivshmem-pci: Handle error from kvm_irqchip_add_irqfd_notifier_gsi()
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (13 preceding siblings ...)
2026-03-08 22:33 ` [PULL 14/49] hw/s390x/s390-pci-vfio: Avoid including CONFIG_DEVICES in hw/ header Philippe Mathieu-Daudé
@ 2026-03-08 22:33 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 16/49] hw/i386: drop unused PC_CPU_MODEL_IDS macro Philippe Mathieu-Daudé
` (34 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:33 UTC (permalink / raw)
To: qemu-devel
From: David Hamilton <dahamilt0@gmail.com>
The return value of kvm_irqchip_add_irqfd_notifier_gsi() was being
ignored. Propagate the error to the caller via errp.
Also change setup_interrupt() to return bool to follow QEMU error
handling conventions, making error checks at call sites simpler.
Resolves the TODO comment at the call site.
Signed-off-by: David Hamilton <dahamilt0@gmail.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20260225121323.5395-2-dahamilt0@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/misc/ivshmem-pci.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/misc/ivshmem-pci.c b/hw/misc/ivshmem-pci.c
index a3a43f53bd1..c987eebb983 100644
--- a/hw/misc/ivshmem-pci.c
+++ b/hw/misc/ivshmem-pci.c
@@ -442,13 +442,14 @@ static void ivshmem_add_kvm_msi_virq(IVShmemState *s, int vector,
s->msi_vectors[vector].pdev = pdev;
}
-static void setup_interrupt(IVShmemState *s, int vector, Error **errp)
+static bool setup_interrupt(IVShmemState *s, int vector, Error **errp)
{
EventNotifier *n = &s->peers[s->vm_id].eventfds[vector];
bool with_irqfd = kvm_msi_via_irqfd_enabled() &&
ivshmem_has_feature(s, IVSHMEM_MSI);
PCIDevice *pdev = PCI_DEVICE(s);
Error *err = NULL;
+ int ret;
IVSHMEM_DPRINTF("setting up interrupt for vector: %d\n", vector);
@@ -460,18 +461,22 @@ static void setup_interrupt(IVShmemState *s, int vector, Error **errp)
ivshmem_add_kvm_msi_virq(s, vector, &err);
if (err) {
error_propagate(errp, err);
- return;
+ return false;
}
if (!msix_is_masked(pdev, vector)) {
- kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, n, NULL,
+ ret = kvm_irqchip_add_irqfd_notifier_gsi(kvm_state, n, NULL,
s->msi_vectors[vector].virq);
- /* TODO handle error */
+ if (ret < 0) {
+ error_setg(errp, "Failed to configure irqfd notifier");
+ return false;
+ }
}
} else {
/* it will be delayed until msix is enabled, in write_config */
IVSHMEM_DPRINTF("with irqfd, delayed until msix enabled\n");
}
+ return true;
}
static void process_msg_shmem(IVShmemState *s, int fd, Error **errp)
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 16/49] hw/i386: drop unused PC_CPU_MODEL_IDS macro
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (14 preceding siblings ...)
2026-03-08 22:33 ` [PULL 15/49] hw/misc/ivshmem-pci: Handle error from kvm_irqchip_add_irqfd_notifier_gsi() Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 17/49] ati-vga: Fix framebuffer mapping by using hardware-correct aperture sizes Philippe Mathieu-Daudé
` (33 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Daniel P. Berrangé <berrange@redhat.com>
This is redundant since the 2.4 machine types were dropped.
Fixes: 4c82e7b34b1bf35d97e026196f5bf10ea916512c
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260225165400.605941-1-berrange@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/i386/pc.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index a38634e3577..052226baa57 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -73,15 +73,6 @@
#include "hw/xen/xen-bus.h"
#endif
-/*
- * Helper for setting model-id for CPU models that changed model-id
- * depending on QEMU versions up to QEMU 2.4.
- */
-#define PC_CPU_MODEL_IDS(v) \
- { "qemu32-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
- { "qemu64-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
- { "athlon-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },
-
GlobalProperty pc_compat_10_2[] = {};
const size_t pc_compat_10_2_len = G_N_ELEMENTS(pc_compat_10_2);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 17/49] ati-vga: Fix framebuffer mapping by using hardware-correct aperture sizes
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (15 preceding siblings ...)
2026-03-08 22:34 ` [PULL 16/49] hw/i386: drop unused PC_CPU_MODEL_IDS macro Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 18/49] ati-vga: Fix DST_PITCH and SRC_PITCH reads Philippe Mathieu-Daudé
` (32 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
Rage 128 cards always request 64MB for their linear (framebuffer)
aperture and R100 cards always request 128MB. This is regardless
of the amount of physical VRAM on the board. The following are results
from real hardware tests:
Card VRAM PCI BAR0 CONFIG_MEMSIZE CONFIG_APER_SIZE AGP_APER_OFFSET
----------------------- ---- -------- -------------- ---------------- ---------------
Rage 128 Pro Ultra TF 32MB 64MB 0x02000000 0x02000000 0x02000000
Rage 128 RF/SG AGP 16MB 64MB 0x01000000 0x02000000 0x02000000
Radeon R100 QD [Radeon 7200] 64MB 128MB 0x04000000 0x04000000 N/A
Radeon RV100 QY [Radeon 7000/VE] 32MB 128MB 0x02000000 0x04000000 N/A
Previously the linear aperture (BAR0) would match the VRAM size.
This discrepancy caused issues with the X.org and XFree86 r128 drivers.
These drivers apply a mask of 0xfc000000 (2^26 = 64MB) to the linear
aperture address. If that address is not on a 64MB boundary the
framebuffer points to an incorrect memory location.
Testing shows that the Radeon R100 also has a BAR0 larger than VRAM
(128MB in this case) and the X.org radeon driver also masks to 64MB.
For Rage 128, CONFIG_APER_SIZE also differs from the previous value and
the behavior stated in the documentation. The Rage 128 register guide
states that it should contain the size of the VRAM + AGP memory. The cards
tested above show that this isn't the case. These tests also included
enabling/disabling AGP with 8MB of memory. It didn't change the
contents of CONFIG_APER_SIZE.
For both Rage 128 and R100 the CONFIG_APER_SIZE is half of the PCI BAR0 size.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-2-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_int.h | 5 +++++
hw/display/ati.c | 16 ++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h
index f5a47b82b08..708cc1dd3a3 100644
--- a/hw/display/ati_int.h
+++ b/hw/display/ati_int.h
@@ -10,6 +10,7 @@
#define ATI_INT_H
#include "qemu/timer.h"
+#include "qemu/units.h"
#include "hw/pci/pci_device.h"
#include "hw/i2c/bitbang_i2c.h"
#include "vga_int.h"
@@ -29,6 +30,9 @@
/* Radeon RV100 (VE) */
#define PCI_DEVICE_ID_ATI_RADEON_QY 0x5159
+#define ATI_RAGE128_LINEAR_APER_SIZE (64 * MiB)
+#define ATI_R100_LINEAR_APER_SIZE (128 * MiB)
+
#define TYPE_ATI_VGA "ati-vga"
OBJECT_DECLARE_SIMPLE_TYPE(ATIVGAState, ATI_VGA)
@@ -97,6 +101,7 @@ struct ATIVGAState {
QEMUCursor *cursor;
QEMUTimer vblank_timer;
bitbang_i2c_interface bbi2c;
+ MemoryRegion linear_aper;
MemoryRegion io;
MemoryRegion mm;
ATIVGARegs regs;
diff --git a/hw/display/ati.c b/hw/display/ati.c
index e9c3ad2cd15..8438a77de04 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -361,7 +361,7 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
PCI_BASE_ADDRESS_0, size) & 0xfffffff0;
break;
case CONFIG_APER_SIZE:
- val = s->vga.vram_size / 2;
+ val = memory_region_size(&s->linear_aper) / 2;
break;
case CONFIG_REG_1_BASE:
val = pci_default_read_config(&s->dev,
@@ -952,6 +952,7 @@ static void ati_vga_realize(PCIDevice *dev, Error **errp)
{
ATIVGAState *s = ATI_VGA(dev);
VGACommonState *vga = &s->vga;
+ uint64_t aper_size;
#ifndef CONFIG_PIXMAN
if (s->use_pixman != 0) {
@@ -1011,7 +1012,18 @@ static void ati_vga_realize(PCIDevice *dev, Error **errp)
/* io space is alias to beginning of mmregs */
memory_region_init_alias(&s->io, OBJECT(s), "ati.io", &s->mm, 0, 0x100);
- pci_register_bar(dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &vga->vram);
+ /*
+ * The framebuffer is at the beginning of the linear aperture. For
+ * Rage128 the upper half of the aperture is reserved for an AGP
+ * window (which we do not emulate.)
+ */
+ aper_size = s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF ?
+ ATI_RAGE128_LINEAR_APER_SIZE : ATI_R100_LINEAR_APER_SIZE;
+ memory_region_init(&s->linear_aper, OBJECT(dev), "ati-linear-aperture0",
+ aper_size);
+ memory_region_add_subregion(&s->linear_aper, 0, &vga->vram);
+
+ pci_register_bar(dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->linear_aper);
pci_register_bar(dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->io);
pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->mm);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 18/49] ati-vga: Fix DST_PITCH and SRC_PITCH reads
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (16 preceding siblings ...)
2026-03-08 22:34 ` [PULL 17/49] ati-vga: Fix framebuffer mapping by using hardware-correct aperture sizes Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 19/49] ati-vga: Read aliased values from DP_GUI_MASTER_CNTL Philippe Mathieu-Daudé
` (31 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
Reading DST_PITCH and SRC_PITCH on the Rage 128 is broken. The read
handlers attempt to construct the value from pitch and tile bits in
the register state but mistakenly AND them instead of ORing them. This
means the pitch is always zero on read.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-3-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/display/ati.c b/hw/display/ati.c
index 8438a77de04..777a6b0a2ea 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -438,7 +438,7 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
case DST_PITCH:
val = s->regs.dst_pitch;
if (s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF) {
- val &= s->regs.dst_tile << 16;
+ val |= s->regs.dst_tile << 16;
}
break;
case DST_WIDTH:
@@ -468,7 +468,7 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
case SRC_PITCH:
val = s->regs.src_pitch;
if (s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF) {
- val &= s->regs.src_tile << 16;
+ val |= s->regs.src_tile << 16;
}
break;
case DP_BRUSH_BKGD_CLR:
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 19/49] ati-vga: Read aliased values from DP_GUI_MASTER_CNTL
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (17 preceding siblings ...)
2026-03-08 22:34 ` [PULL 18/49] ati-vga: Fix DST_PITCH and SRC_PITCH reads Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 20/49] ati-vga: Latch src and dst pitch and offset on master_cntl default Philippe Mathieu-Daudé
` (30 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
DP_GUI_MASTER_CNTL aliases several fields from DP_DATATYPE and DP_MIX.
These were being written correctly but not returned on a read of
DP_GUI_MASTER_CNTL.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-4-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_regs.h | 5 +++++
hw/display/ati.c | 8 +++++++-
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h
index d7127748ffe..0a0825db048 100644
--- a/hw/display/ati_regs.h
+++ b/hw/display/ati_regs.h
@@ -386,6 +386,9 @@
#define DST_16BPP 0x00000004
#define DST_24BPP 0x00000005
#define DST_32BPP 0x00000006
+#define DP_DST_DATATYPE 0x0000000f
+#define DP_BRUSH_DATATYPE 0x00000f00
+#define DP_SRC_DATATYPE 0x00030000
#define BRUSH_SOLIDCOLOR 0x00000d00
@@ -437,6 +440,8 @@
#define DP_SRC_RECT 0x00000200
#define DP_SRC_HOST 0x00000300
#define DP_SRC_HOST_BYTEALIGN 0x00000400
+#define DP_SRC_SOURCE 0x00000700
+#define DP_ROP3 0x00ff0000
/* LVDS_GEN_CNTL constants */
#define LVDS_BL_MOD_LEVEL_MASK 0x0000ff00
diff --git a/hw/display/ati.c b/hw/display/ati.c
index 777a6b0a2ea..028efd13e19 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -460,7 +460,13 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
val = s->regs.dst_y;
break;
case DP_GUI_MASTER_CNTL:
- val = s->regs.dp_gui_master_cntl;
+ /* DP_GUI_MASTER_CNTL aliases fields from DP_MIX and DP_DATATYPE */
+ val = s->regs.dp_gui_master_cntl |
+ ((s->regs.dp_datatype & DP_BRUSH_DATATYPE) >> 4) |
+ ((s->regs.dp_datatype & DP_DST_DATATYPE) << 8) |
+ ((s->regs.dp_datatype & DP_SRC_DATATYPE) >> 4) |
+ (s->regs.dp_mix & DP_ROP3) |
+ ((s->regs.dp_mix & DP_SRC_SOURCE) << 16);
break;
case SRC_OFFSET:
val = s->regs.src_offset;
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 20/49] ati-vga: Latch src and dst pitch and offset on master_cntl default
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (18 preceding siblings ...)
2026-03-08 22:34 ` [PULL 19/49] ati-vga: Read aliased values from DP_GUI_MASTER_CNTL Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 21/49] ati-vga: Implement foreground and background color register writes Philippe Mathieu-Daudé
` (29 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
Hardware testing on the Rage 128 confirms that (SRC/DST)_OFFSET,
and (SRC/DST)_PITCH are latched when (SRC/DST)_PITCH_OFFSET_CNTL bits
in DP_GUI_MASTER_CNTL are set to "default".
The earlier approach looked at the state of the (SRC/DST)_PITCH_OFFSET_CNTL
bits when offset and pitch registers were used. This meant that when
(SRC/DST)_PITCH_OFFSET_CNTL was reset to "leave alone" the old values
stored in the registers would return. This is not how the real hardware
works.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-5-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati.c | 9 +++++++++
hw/display/ati_2d.c | 13 ++++---------
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/hw/display/ati.c b/hw/display/ati.c
index 028efd13e19..ce23e5e48b9 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -868,6 +868,15 @@ static void ati_mm_write(void *opaque, hwaddr addr,
s->regs.dp_datatype = (data & 0x0f00) >> 8 | (data & 0x30f0) << 4 |
(data & 0x4000) << 16;
s->regs.dp_mix = (data & GMC_ROP3_MASK) | (data & 0x7000000) >> 16;
+
+ if (!(data & GMC_SRC_PITCH_OFFSET_CNTL)) {
+ s->regs.src_offset = s->regs.default_offset;
+ s->regs.src_pitch = s->regs.default_pitch;
+ }
+ if (!(data & GMC_DST_PITCH_OFFSET_CNTL)) {
+ s->regs.dst_offset = s->regs.default_offset;
+ s->regs.dst_pitch = s->regs.default_pitch;
+ }
break;
case DST_WIDTH_X:
s->regs.dst_x = data & 0x3fff;
diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c
index 309bb5ccb6c..a8c4c534b94 100644
--- a/hw/display/ati_2d.c
+++ b/hw/display/ati_2d.c
@@ -43,8 +43,6 @@ static int ati_bpp_from_datatype(ATIVGAState *s)
}
}
-#define DEFAULT_CNTL (s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFFSET_CNTL)
-
void ati_2d_blt(ATIVGAState *s)
{
/* FIXME it is probably more complex than this and may need to be */
@@ -63,13 +61,12 @@ void ati_2d_blt(ATIVGAState *s)
qemu_log_mask(LOG_GUEST_ERROR, "Invalid bpp\n");
return;
}
- int dst_stride = DEFAULT_CNTL ? s->regs.dst_pitch : s->regs.default_pitch;
+ int dst_stride = s->regs.dst_pitch;
if (!dst_stride) {
qemu_log_mask(LOG_GUEST_ERROR, "Zero dest pitch\n");
return;
}
- uint8_t *dst_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
- s->regs.dst_offset : s->regs.default_offset);
+ uint8_t *dst_bits = s->vga.vram_ptr + s->regs.dst_offset;
if (s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF) {
dst_bits += s->regs.crtc_offset & 0x07ffffff;
@@ -97,14 +94,12 @@ void ati_2d_blt(ATIVGAState *s)
s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);
unsigned src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);
- int src_stride = DEFAULT_CNTL ?
- s->regs.src_pitch : s->regs.default_pitch;
+ int src_stride = s->regs.src_pitch;
if (!src_stride) {
qemu_log_mask(LOG_GUEST_ERROR, "Zero source pitch\n");
return;
}
- uint8_t *src_bits = s->vga.vram_ptr + (DEFAULT_CNTL ?
- s->regs.src_offset : s->regs.default_offset);
+ uint8_t *src_bits = s->vga.vram_ptr + s->regs.src_offset;
if (s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF) {
src_bits += s->regs.crtc_offset & 0x07ffffff;
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 21/49] ati-vga: Implement foreground and background color register writes
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (19 preceding siblings ...)
2026-03-08 22:34 ` [PULL 20/49] ati-vga: Latch src and dst pitch and offset on master_cntl default Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 22/49] ati-vga: Add scissor clipping register support Philippe Mathieu-Daudé
` (28 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
These are straightforward 32-bit register write handlers. They're
necessary for a future patch which will use them for color expansion
from monochrome host data transfers.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-6-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/hw/display/ati.c b/hw/display/ati.c
index ce23e5e48b9..26fc74b19b3 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -924,6 +924,12 @@ static void ati_mm_write(void *opaque, hwaddr addr,
case DP_CNTL:
s->regs.dp_cntl = data;
break;
+ case DP_SRC_FRGD_CLR:
+ s->regs.dp_src_frgd_clr = data;
+ break;
+ case DP_SRC_BKGD_CLR:
+ s->regs.dp_src_bkgd_clr = data;
+ break;
case DP_DATATYPE:
s->regs.dp_datatype = data & 0xe0070f0f;
break;
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 22/49] ati-vga: Add scissor clipping register support
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (20 preceding siblings ...)
2026-03-08 22:34 ` [PULL 21/49] ati-vga: Implement foreground and background color register writes Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-09 19:29 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 23/49] ati-vga: Remove dst_x/y updates after blit Philippe Mathieu-Daudé
` (27 subsequent siblings)
49 siblings, 1 reply; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
Implement read and write operations on SC_TOP_LEFT, SC_BOTTOM_RIGHT,
and SRC_SC_BOTTOM_RIGHT registers. These registers are also updated
when the src and/or dst clipping fields on DP_GUI_MASTER_CNTL are set
to default clipping.
Scissor clipping is used when rendering text in X.org. The r128 driver
sends host data much wider than is necessary to draw a glyph and cuts it
down to size using clipping before rendering. The actual clipping
implementation follows in a future patch.
This also includes a very minor refactor of the combined
default_sc_bottom_right field in the registers struct to
default_sc_bottom and default_sc_right. This was done to
stay consistent with the other scissor registers and prevent repeated
masking and extraction.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-7-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_int.h | 9 +++++-
hw/display/ati_regs.h | 2 ++
hw/display/ati.c | 70 +++++++++++++++++++++++++++++++++++++++++--
3 files changed, 78 insertions(+), 3 deletions(-)
diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h
index 708cc1dd3a3..98f57ca5fa4 100644
--- a/hw/display/ati_int.h
+++ b/hw/display/ati_int.h
@@ -78,14 +78,21 @@ typedef struct ATIVGARegs {
uint32_t dp_brush_frgd_clr;
uint32_t dp_src_frgd_clr;
uint32_t dp_src_bkgd_clr;
+ uint16_t sc_top;
+ uint16_t sc_left;
+ uint16_t sc_bottom;
+ uint16_t sc_right;
+ uint16_t src_sc_bottom;
+ uint16_t src_sc_right;
uint32_t dp_cntl;
uint32_t dp_datatype;
uint32_t dp_mix;
uint32_t dp_write_mask;
uint32_t default_offset;
uint32_t default_pitch;
+ uint16_t default_sc_bottom;
+ uint16_t default_sc_right;
uint32_t default_tile;
- uint32_t default_sc_bottom_right;
} ATIVGARegs;
struct ATIVGAState {
diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h
index 0a0825db048..3999edb9b71 100644
--- a/hw/display/ati_regs.h
+++ b/hw/display/ati_regs.h
@@ -397,6 +397,8 @@
#define GMC_DST_PITCH_OFFSET_CNTL 0x00000002
#define GMC_SRC_CLIP_DEFAULT 0x00000000
#define GMC_DST_CLIP_DEFAULT 0x00000000
+#define GMC_SRC_CLIPPING 0x00000004
+#define GMC_DST_CLIPPING 0x00000008
#define GMC_BRUSH_SOLIDCOLOR 0x000000d0
#define GMC_SRC_DSTCOLOR 0x00003000
#define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000
diff --git a/hw/display/ati.c b/hw/display/ati.c
index 26fc74b19b3..6cf243bcf95 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -514,7 +514,32 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
val |= s->regs.default_tile << 16;
break;
case DEFAULT_SC_BOTTOM_RIGHT:
- val = s->regs.default_sc_bottom_right;
+ val = (s->regs.default_sc_bottom << 16) |
+ s->regs.default_sc_right;
+ break;
+ case SC_TOP:
+ val = s->regs.sc_top;
+ break;
+ case SC_LEFT:
+ val = s->regs.sc_left;
+ break;
+ case SC_BOTTOM:
+ val = s->regs.sc_bottom;
+ break;
+ case SC_RIGHT:
+ val = s->regs.sc_right;
+ break;
+ case SRC_SC_BOTTOM:
+ val = s->regs.src_sc_bottom;
+ break;
+ case SRC_SC_RIGHT:
+ val = s->regs.src_sc_right;
+ break;
+ case SC_TOP_LEFT:
+ case SC_BOTTOM_RIGHT:
+ case SRC_SC_BOTTOM_RIGHT:
+ qemu_log_mask(LOG_GUEST_ERROR,
+ "Read from write-only register 0x%x\n", (unsigned)addr);
break;
default:
break;
@@ -877,6 +902,16 @@ static void ati_mm_write(void *opaque, hwaddr addr,
s->regs.dst_offset = s->regs.default_offset;
s->regs.dst_pitch = s->regs.default_pitch;
}
+ if (!(data & GMC_SRC_CLIPPING)) {
+ s->regs.src_sc_right = s->regs.default_sc_right;
+ s->regs.src_sc_bottom = s->regs.default_sc_bottom;
+ }
+ if (!(data & GMC_DST_CLIPPING)) {
+ s->regs.sc_top = 0;
+ s->regs.sc_left = 0;
+ s->regs.sc_right = s->regs.default_sc_right;
+ s->regs.sc_bottom = s->regs.default_sc_bottom;
+ }
break;
case DST_WIDTH_X:
s->regs.dst_x = data & 0x3fff;
@@ -956,7 +991,38 @@ static void ati_mm_write(void *opaque, hwaddr addr,
}
break;
case DEFAULT_SC_BOTTOM_RIGHT:
- s->regs.default_sc_bottom_right = data & 0x3fff3fff;
+ s->regs.default_sc_right = data & 0x3fff;
+ s->regs.default_sc_bottom = (data >> 16) & 0x3fff;
+ break;
+ case SC_TOP_LEFT:
+ s->regs.sc_left = data & 0x3fff;
+ s->regs.sc_top = (data >> 16) & 0x3fff;
+ break;
+ case SC_LEFT:
+ s->regs.sc_left = data & 0x3fff;
+ break;
+ case SC_TOP:
+ s->regs.sc_top = data & 0x3fff;
+ break;
+ case SC_BOTTOM_RIGHT:
+ s->regs.sc_right = data & 0x3fff;
+ s->regs.sc_bottom = (data >> 16) & 0x3fff;
+ break;
+ case SC_RIGHT:
+ s->regs.sc_right = data & 0x3fff;
+ break;
+ case SC_BOTTOM:
+ s->regs.sc_bottom = data & 0x3fff;
+ break;
+ case SRC_SC_BOTTOM_RIGHT:
+ s->regs.src_sc_right = data & 0x3fff;
+ s->regs.src_sc_bottom = (data >> 16) & 0x3fff;
+ break;
+ case SRC_SC_RIGHT:
+ s->regs.src_sc_right = data & 0x3fff;
+ break;
+ case SRC_SC_BOTTOM:
+ s->regs.src_sc_bottom = data & 0x3fff;
break;
default:
break;
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 23/49] ati-vga: Remove dst_x/y updates after blit
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (21 preceding siblings ...)
2026-03-08 22:34 ` [PULL 22/49] ati-vga: Add scissor clipping register support Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 24/49] ati-vga: Consolidate dirty region tracking in ati_2d_blt Philippe Mathieu-Daudé
` (26 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
The Mobility M6 register reference (DST_HEIGHT_WIDTH) states that dst_y is
updated after a blit but this appears to not be the case.
Hardware testing revealed that both the R128 and R100 do not update
dst_x or dst_y after a blit, regardless of the source. This removes
the update.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-8-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_2d.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c
index a8c4c534b94..cfc7bf97899 100644
--- a/hw/display/ati_2d.c
+++ b/hw/display/ati_2d.c
@@ -174,10 +174,6 @@ void ati_2d_blt(ATIVGAState *s)
dst_y * surface_stride(ds),
s->regs.dst_height * surface_stride(ds));
}
- s->regs.dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
- dst_x + s->regs.dst_width : dst_x);
- s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
- dst_y + s->regs.dst_height : dst_y);
break;
}
case ROP3_PATCOPY:
@@ -228,8 +224,6 @@ void ati_2d_blt(ATIVGAState *s)
dst_y * surface_stride(ds),
s->regs.dst_height * surface_stride(ds));
}
- s->regs.dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
- dst_y + s->regs.dst_height : dst_y);
break;
}
default:
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 24/49] ati-vga: Consolidate dirty region tracking in ati_2d_blt
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (22 preceding siblings ...)
2026-03-08 22:34 ` [PULL 23/49] ati-vga: Remove dst_x/y updates after blit Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 25/49] hw/net/xilinx_ethlite: Check for oversized TX packets Philippe Mathieu-Daudé
` (25 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Chad Jablonski <chad@jablonski.xyz>
Both supported ROPs follow the same memory set dirty logic.
This consolidates that logic to remove the duplication.
Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260303024730.1489136-9-chad@jablonski.xyz>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_2d.c | 43 ++++++++++++++++++++++---------------------
1 file changed, 22 insertions(+), 21 deletions(-)
diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c
index cfc7bf97899..8e192802d3a 100644
--- a/hw/display/ati_2d.c
+++ b/hw/display/ati_2d.c
@@ -43,15 +43,29 @@ static int ati_bpp_from_datatype(ATIVGAState *s)
}
}
+static void ati_set_dirty(ATIVGAState *s,
+ const uint8_t *dst_bits, unsigned dst_y)
+{
+ VGACommonState *vga = &s->vga;
+ DisplaySurface *ds = qemu_console_surface(vga->con);
+
+ DPRINTF("%p %u ds: %p %d %d rop: %x\n", vga->vram_ptr, vga->vbe_start_addr,
+ surface_data(ds), surface_stride(ds), surface_bits_per_pixel(ds),
+ (s->regs.dp_mix & GMC_ROP3_MASK) >> 16);
+ if (dst_bits >= vga->vram_ptr + vga->vbe_start_addr &&
+ dst_bits < vga->vram_ptr + vga->vbe_start_addr +
+ vga->vbe_regs[VBE_DISPI_INDEX_YRES] * vga->vbe_line_offset) {
+ memory_region_set_dirty(&vga->vram,
+ vga->vbe_start_addr + s->regs.dst_offset
+ + dst_y * surface_stride(ds),
+ s->regs.dst_height * surface_stride(ds));
+ }
+}
+
void ati_2d_blt(ATIVGAState *s)
{
/* FIXME it is probably more complex than this and may need to be */
/* rewritten but for now as a start just to get some output: */
- DisplaySurface *ds = qemu_console_surface(s->vga.con);
- DPRINTF("%p %u ds: %p %d %d rop: %x\n", s->vga.vram_ptr,
- s->vga.vbe_start_addr, surface_data(ds), surface_stride(ds),
- surface_bits_per_pixel(ds),
- (s->regs.dp_mix & GMC_ROP3_MASK) >> 16);
unsigned dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?
s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);
unsigned dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?
@@ -166,14 +180,6 @@ void ati_2d_blt(ATIVGAState *s)
memmove(&dst_bits[i], &src_bits[j], s->regs.dst_width * bypp);
}
}
- if (dst_bits >= s->vga.vram_ptr + s->vga.vbe_start_addr &&
- dst_bits < s->vga.vram_ptr + s->vga.vbe_start_addr +
- s->vga.vbe_regs[VBE_DISPI_INDEX_YRES] * s->vga.vbe_line_offset) {
- memory_region_set_dirty(&s->vga.vram, s->vga.vbe_start_addr +
- s->regs.dst_offset +
- dst_y * surface_stride(ds),
- s->regs.dst_height * surface_stride(ds));
- }
break;
}
case ROP3_PATCOPY:
@@ -216,18 +222,13 @@ void ati_2d_blt(ATIVGAState *s)
}
}
}
- if (dst_bits >= s->vga.vram_ptr + s->vga.vbe_start_addr &&
- dst_bits < s->vga.vram_ptr + s->vga.vbe_start_addr +
- s->vga.vbe_regs[VBE_DISPI_INDEX_YRES] * s->vga.vbe_line_offset) {
- memory_region_set_dirty(&s->vga.vram, s->vga.vbe_start_addr +
- s->regs.dst_offset +
- dst_y * surface_stride(ds),
- s->regs.dst_height * surface_stride(ds));
- }
break;
}
default:
qemu_log_mask(LOG_UNIMP, "Unimplemented ati_2d blt op %x\n",
(s->regs.dp_mix & GMC_ROP3_MASK) >> 16);
+ return;
}
+
+ ati_set_dirty(s, dst_bits, dst_y);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 25/49] hw/net/xilinx_ethlite: Check for oversized TX packets
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (23 preceding siblings ...)
2026-03-08 22:34 ` [PULL 24/49] ati-vga: Consolidate dirty region tracking in ati_2d_blt Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 26/49] MAINTAINERS: Replace @tuxfamily.org address Philippe Mathieu-Daudé
` (24 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Peter Maydell <peter.maydell@linaro.org>
The xilinx_ethlite network device wasn't checking that the TX packet
size set by the guest was within the size of its dual port RAM, with
the effect that the guest could get it to read off the end of the RAM
block.
Check the length. There is no provision in this very simple device
for reporting errors, so as with various RX errors we just report via
tracepoint.
This lack of length check has been present since the device was first
introduced, though the code implementing the tx path has changed
somewhat since then.
Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3317
Fixes: b43848a1005ce ("xilinx: Add ethlite emulation")
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Message-ID: <20260303172718.437015-1-peter.maydell@linaro.org>
[PMD: renamed size -> tx_size to avoid shadow=compatible-local error]
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/net/xilinx_ethlite.c | 12 +++++++++---
hw/net/trace-events | 1 +
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/hw/net/xilinx_ethlite.c b/hw/net/xilinx_ethlite.c
index ba3acd4c77c..7ea194475f1 100644
--- a/hw/net/xilinx_ethlite.c
+++ b/hw/net/xilinx_ethlite.c
@@ -162,9 +162,15 @@ static void port_tx_write(void *opaque, hwaddr addr, uint64_t value,
break;
case TX_CTRL:
if ((value & (CTRL_P | CTRL_S)) == CTRL_S) {
- qemu_send_packet(qemu_get_queue(s->nic),
- txbuf_ptr(s, port_index),
- s->port[port_index].reg.tx_len);
+ uint32_t tx_size = s->port[port_index].reg.tx_len;
+
+ if (tx_size >= BUFSZ_MAX) {
+ trace_ethlite_pkt_tx_size_too_big(tx_size);
+ } else {
+ qemu_send_packet(qemu_get_queue(s->nic),
+ txbuf_ptr(s, port_index),
+ tx_size);
+ }
if (s->port[port_index].reg.tx_ctrl & CTRL_I) {
eth_pulse_irq(s);
}
diff --git a/hw/net/trace-events b/hw/net/trace-events
index 23efa91d055..001a20b0e2a 100644
--- a/hw/net/trace-events
+++ b/hw/net/trace-events
@@ -527,3 +527,4 @@ xen_netdev_rx(int dev, int idx, int status, int flags) "vif%u idx %d status %d f
# xilinx_ethlite.c
ethlite_pkt_lost(uint32_t rx_ctrl) "rx_ctrl:0x%" PRIx32
ethlite_pkt_size_too_big(uint64_t size) "size:0x%" PRIx64
+ethlite_pkt_tx_size_too_big(uint64_t size) "size:0x%" PRIx64
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 26/49] MAINTAINERS: Replace @tuxfamily.org address
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (24 preceding siblings ...)
2026-03-08 22:34 ` [PULL 25/49] hw/net/xilinx_ethlite: Check for oversized TX packets Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 27/49] ui/cocoa: Do not automatically zoom for HiDPI Philippe Mathieu-Daudé
` (23 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Thomas Huth <huth@tuxfamily.org>
Tuxfamily.org has had many outages in the recent years and will likely
go away in the near future:
https://forum.tuxfamily.org/post/3381/#p3381
Thus replace my @tuxfamily.org address with another one that is more
reliable and hopefully will survive longer.
Signed-off-by: Thomas Huth <huth@tuxfamily.org>
Reviewed-by: Gustavo Romero <gustavo.romero@linaro.org>
Message-ID: <20260303203044.8403-1-huth@tuxfamily.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
MAINTAINERS | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 6730cee490c..5ad5918d7aa 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1357,13 +1357,13 @@ F: gdb-xml/loongarch*.xml
M68K Machines
-------------
an5206
-M: Thomas Huth <huth@tuxfamily.org>
+M: Thomas Huth <th.huth+qemu@posteo.eu>
S: Odd Fixes
F: hw/m68k/an5206.c
F: hw/m68k/mcf5206.c
mcf5208
-M: Thomas Huth <huth@tuxfamily.org>
+M: Thomas Huth <th.huth+qemu@posteo.eu>
S: Odd Fixes
F: hw/m68k/mcf5208.c
F: hw/m68k/mcf_intc.c
@@ -1373,7 +1373,7 @@ F: include/hw/m68k/mcf*.h
F: tests/functional/m68k/test_mcf5208evb.py
NeXTcube
-M: Thomas Huth <huth@tuxfamily.org>
+M: Thomas Huth <th.huth+qemu@posteo.eu>
S: Odd Fixes
F: hw/m68k/next-*.c
F: hw/display/next-fb.c
@@ -3088,7 +3088,7 @@ F: audio/paaudio.c
SDL Audio backend
M: Gerd Hoffmann <kraxel@redhat.com>
-R: Thomas Huth <huth@tuxfamily.org>
+R: Thomas Huth <th.huth+qemu@posteo.eu>
S: Odd Fixes
F: audio/sdlaudio.c
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 27/49] ui/cocoa: Do not automatically zoom for HiDPI
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (25 preceding siblings ...)
2026-03-08 22:34 ` [PULL 26/49] MAINTAINERS: Replace @tuxfamily.org address Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 28/49] hw/uefi: add variable digest to vmstate Philippe Mathieu-Daudé
` (22 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Cocoa automatically zooms for a HiDPI display like Retina and makes
the display blurry. Revert the automatic zooming.
Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20260304-zoom-v2-1-2eebf2b51106@rsg.ci.i.u-tokyo.ac.jp>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
ui/cocoa.m | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/ui/cocoa.m b/ui/cocoa.m
index 5b21fe3aead..9093d1e408f 100644
--- a/ui/cocoa.m
+++ b/ui/cocoa.m
@@ -627,7 +627,10 @@ - (void) resizeWindow
[[self window] setContentAspectRatio:NSMakeSize(screen.width, screen.height)];
if (!([[self window] styleMask] & NSWindowStyleMaskResizable)) {
- [[self window] setContentSize:NSMakeSize(screen.width, screen.height)];
+ CGFloat width = screen.width / [[self window] backingScaleFactor];
+ CGFloat height = screen.height / [[self window] backingScaleFactor];
+
+ [[self window] setContentSize:NSMakeSize(width, height)];
[[self window] center];
} else if ([[self window] styleMask] & NSWindowStyleMaskFullScreen) {
[[self window] setContentSize:[self fixAspectRatio:[self screenSafeAreaSize]]];
@@ -685,8 +688,8 @@ - (void) updateUIInfoLocked
info.xoff = 0;
info.yoff = 0;
- info.width = frameSize.width;
- info.height = frameSize.height;
+ info.width = frameSize.width * [[self window] backingScaleFactor];
+ info.height = frameSize.height * [[self window] backingScaleFactor];
dpy_set_ui_info(dcl.con, &info, TRUE);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 28/49] hw/uefi: add variable digest to vmstate
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (26 preceding siblings ...)
2026-03-08 22:34 ` [PULL 27/49] ui/cocoa: Do not automatically zoom for HiDPI Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 29/49] hw/net/xilinx_axienet: Prevent writes to PHY Identification registers Philippe Mathieu-Daudé
` (21 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Gerd Hoffmann <kraxel@redhat.com>
Add digest to vmstate if needed. Clear digest before
loading vmstate to make sure it is initialized.
Fixes: db1ecfb473ac ("hw/uefi: add var-service-vars.c")
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260304075954.584423-1-kraxel@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/uefi/var-service-vars.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/hw/uefi/var-service-vars.c b/hw/uefi/var-service-vars.c
index 94f40ef2368..5e3907118d4 100644
--- a/hw/uefi/var-service-vars.c
+++ b/hw/uefi/var-service-vars.c
@@ -37,8 +37,41 @@ const VMStateDescription vmstate_uefi_time = {
},
};
+static int uefi_vars_pre_load(void *opaque)
+{
+ uefi_variable *var = opaque;
+
+ /* clear digest which is optional in the live migration data stream */
+ var->digest = NULL;
+ var->digest_size = 0;
+ return 0;
+}
+
+static bool uefi_vars_digest_is_needed(void *opaque)
+{
+ uefi_variable *var = opaque;
+
+ if ((var->attributes & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
+ && !uefi_vars_is_sb_any(var)) {
+ return true;
+ }
+ return false;
+}
+
+const VMStateDescription vmstate_uefi_variable_digest = {
+ .name = "uefi-variable-digest",
+ .needed = uefi_vars_digest_is_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32(digest_size, uefi_variable),
+ VMSTATE_VBUFFER_ALLOC_UINT32(digest, uefi_variable,
+ 0, NULL, digest_size),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
const VMStateDescription vmstate_uefi_variable = {
.name = "uefi-variable",
+ .pre_load = uefi_vars_pre_load,
.fields = (VMStateField[]) {
VMSTATE_UINT8_ARRAY_V(guid.data, uefi_variable, sizeof(QemuUUID), 0),
VMSTATE_UINT32(name_size, uefi_variable),
@@ -49,6 +82,10 @@ const VMStateDescription vmstate_uefi_variable = {
VMSTATE_STRUCT(time, uefi_variable, 0, vmstate_uefi_time, efi_time),
VMSTATE_END_OF_LIST()
},
+ .subsections = (const VMStateDescription * const []) {
+ &vmstate_uefi_variable_digest,
+ NULL
+ }
};
uefi_variable *uefi_vars_find_variable(uefi_vars_state *uv, QemuUUID guid,
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 29/49] hw/net/xilinx_axienet: Prevent writes to PHY Identification registers
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (27 preceding siblings ...)
2026-03-08 22:34 ` [PULL 28/49] hw/uefi: add variable digest to vmstate Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 30/49] MAINTAINERS: Update the maintainer for the CHRP NVRAM section Philippe Mathieu-Daudé
` (20 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Jim MacArthur <jim.macarthur@linaro.org>
There are other registers in the PHY model which should be partially or
entirely read-only, but this solves the immediate issue.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3297
Signed-off-by: Jim MacArthur <jim.macarthur@linaro.org>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com>
Message-ID: <20260305-xilinx-phy-protection-v1-1-ffc9edd84e58@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/net/xilinx_axienet.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hw/net/xilinx_axienet.c b/hw/net/xilinx_axienet.c
index d85f8bb23fe..970732b162b 100644
--- a/hw/net/xilinx_axienet.c
+++ b/hw/net/xilinx_axienet.c
@@ -141,6 +141,10 @@ tdk_write(struct PHY *phy, unsigned int req, unsigned int data)
regnum = req & 0x1f;
DPHY(qemu_log("%s reg[%d] = %x\n", __func__, regnum, data));
switch (regnum) {
+ case 2:
+ case 3:
+ /* Writes to PHY Identification registers are disallowed */
+ break;
default:
phy->regs[regnum] = data;
break;
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 30/49] MAINTAINERS: Update the maintainer for the CHRP NVRAM section
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (28 preceding siblings ...)
2026-03-08 22:34 ` [PULL 29/49] hw/net/xilinx_axienet: Prevent writes to PHY Identification registers Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 31/49] hw/arm/Kconfig: Fix serial selection for NPCM8XX Philippe Mathieu-Daudé
` (19 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Thomas Huth <thuth@redhat.com>
I am not involved in the ppc machines anymore (the pseries machine was
the reason why I took over maintainership of the CHRP NVRAM code in the
past), so it does not make much sense that I'm still listed here as the
maintainer.
The CHRP NVRAM code is used by the mac99 / g3beige ppc machines and
some Sparc machines, too, where Mark is the maintainer, so I asked him
whether he would be interested in being listed as the maintainer here,
and fortunately, he agreed! Thanks, Mark!
Signed-off-by: Thomas Huth <thuth@redhat.com>
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Message-ID: <20260305192223.6214-1-thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
MAINTAINERS | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 5ad5918d7aa..47e2782468f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2742,7 +2742,7 @@ F: tests/qtest/hexloader-test.c
F: tests/data/hex-loader/test.hex
CHRP NVRAM
-M: Thomas Huth <thuth@redhat.com>
+M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
S: Maintained
F: hw/nvram/chrp_nvram.c
F: include/hw/nvram/chrp_nvram.h
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 31/49] hw/arm/Kconfig: Fix serial selection for NPCM8XX
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (29 preceding siblings ...)
2026-03-08 22:34 ` [PULL 30/49] MAINTAINERS: Update the maintainer for the CHRP NVRAM section Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 32/49] hw/char/{diva-gsp, serial-pci-multi}: Fix deinitialization order Philippe Mathieu-Daudé
` (18 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
CONFIG_SERIAL selects the internal TYPE_SERIAL device which is akin to
an "IP block" that needs to be integrated with glue logic. In case of
NPCM8XX this glue logic is TYPE_SERIAL_MM which the code uses already.
Fix Kconfig to select CONFIG_SERIAL_MM which matches TYPE_SERIAL_MM.
Fixes: ae0c4d1a1290 ("hw/arm: Add NPCM8XX SoC")
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260305220911.131508-2-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
index 03aa2a03db8..4e50fb1111f 100644
--- a/hw/arm/Kconfig
+++ b/hw/arm/Kconfig
@@ -482,7 +482,7 @@ config NPCM8XX
select SMBUS
select PL310 # cache controller
select NPCM7XX
- select SERIAL
+ select SERIAL_MM
select SSI
select UNIMP
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 32/49] hw/char/{diva-gsp, serial-pci-multi}: Fix deinitialization order
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (30 preceding siblings ...)
2026-03-08 22:34 ` [PULL 31/49] hw/arm/Kconfig: Fix serial selection for NPCM8XX Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 33/49] hw/arm/aspeed_ast27x0-{ssp, tsp}: Do not access SerialMM internals directly Philippe Mathieu-Daudé
` (17 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
The memory region is owned by the device being unrealized, so must be
removed from the mapping before unrealizing.
Fixes: d66bbea4e0d3 ("serial: add 2x + 4x pci variant")
Fixes: 274074708455 ("hw/char: Add emulation of Diva GSP PCI management boards")
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Message-ID: <20260305220911.131508-3-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/diva-gsp.c | 2 +-
hw/char/serial-pci-multi.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/char/diva-gsp.c b/hw/char/diva-gsp.c
index 280d0413c6e..f9aa6e326d6 100644
--- a/hw/char/diva-gsp.c
+++ b/hw/char/diva-gsp.c
@@ -62,8 +62,8 @@ static void diva_pci_exit(PCIDevice *dev)
for (i = 0; i < pci->ports; i++) {
s = pci->state + i;
- qdev_unrealize(DEVICE(s));
memory_region_del_subregion(&pci->membar, &s->io);
+ qdev_unrealize(DEVICE(s));
g_free(pci->name[i]);
}
qemu_free_irqs(pci->irqs, pci->ports);
diff --git a/hw/char/serial-pci-multi.c b/hw/char/serial-pci-multi.c
index 17796b93dd7..7782452018d 100644
--- a/hw/char/serial-pci-multi.c
+++ b/hw/char/serial-pci-multi.c
@@ -56,8 +56,8 @@ static void multi_serial_pci_exit(PCIDevice *dev)
for (i = 0; i < pci->ports; i++) {
s = pci->state + i;
- qdev_unrealize(DEVICE(s));
memory_region_del_subregion(&pci->iobar, &s->io);
+ qdev_unrealize(DEVICE(s));
g_free(pci->name[i]);
}
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 33/49] hw/arm/aspeed_ast27x0-{ssp, tsp}: Do not access SerialMM internals directly
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (31 preceding siblings ...)
2026-03-08 22:34 ` [PULL 32/49] hw/char/{diva-gsp, serial-pci-multi}: Fix deinitialization order Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 34/49] util/fifo8: Make all read-only methods const-correct Philippe Mathieu-Daudé
` (16 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
SerialMM inherits from SysBusDevice and exposes the memory region by
means of sysbus_mmio_get_region(). Use that in order to avoid accessing
implementation details of SerialMM.
Reviewed-by: Jamin Lin <jamin_lin@aspeedtech.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Message-ID: <20260305220911.131508-4-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/aspeed_ast27x0-ssp.c | 7 ++++---
hw/arm/aspeed_ast27x0-tsp.c | 7 ++++---
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/hw/arm/aspeed_ast27x0-ssp.c b/hw/arm/aspeed_ast27x0-ssp.c
index 9b12ba67430..8b84300e0f6 100644
--- a/hw/arm/aspeed_ast27x0-ssp.c
+++ b/hw/arm/aspeed_ast27x0-ssp.c
@@ -149,6 +149,7 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
DeviceState *armv7m;
+ MemoryRegion *mr;
g_autofree char *sdram_name = NULL;
int i;
@@ -230,9 +231,9 @@ static void aspeed_soc_ast27x0ssp_realize(DeviceState *dev_soc, Error **errp)
}
/* UART */
- memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias",
- &s->uart->serial.io, 0,
- memory_region_size(&s->uart->serial.io));
+ mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(s->uart), 0);
+ memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias", mr, 0,
+ memory_region_size(mr));
memory_region_add_subregion(s->memory, sc->memmap[s->uart_dev],
&s->uart_alias);
/*
diff --git a/hw/arm/aspeed_ast27x0-tsp.c b/hw/arm/aspeed_ast27x0-tsp.c
index e39d1dc1712..e7c7b744919 100644
--- a/hw/arm/aspeed_ast27x0-tsp.c
+++ b/hw/arm/aspeed_ast27x0-tsp.c
@@ -149,6 +149,7 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
AspeedCoprocessorState *s = ASPEED_COPROCESSOR(dev_soc);
AspeedCoprocessorClass *sc = ASPEED_COPROCESSOR_GET_CLASS(s);
DeviceState *armv7m;
+ MemoryRegion *mr;
g_autofree char *sdram_name = NULL;
int i;
@@ -230,9 +231,9 @@ static void aspeed_soc_ast27x0tsp_realize(DeviceState *dev_soc, Error **errp)
}
/* UART */
- memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias",
- &s->uart->serial.io, 0,
- memory_region_size(&s->uart->serial.io));
+ mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(s->uart), 0);
+ memory_region_init_alias(&s->uart_alias, OBJECT(s), "uart.alias", mr, 0,
+ memory_region_size(mr));
memory_region_add_subregion(s->memory, sc->memmap[s->uart_dev],
&s->uart_alias);
/*
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 34/49] util/fifo8: Make all read-only methods const-correct
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (32 preceding siblings ...)
2026-03-08 22:34 ` [PULL 33/49] hw/arm/aspeed_ast27x0-{ssp, tsp}: Do not access SerialMM internals directly Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 35/49] hw/char/serial: Remove explicit cast from void pointer Philippe Mathieu-Daudé
` (15 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
Allows these methods to be used in const contexts, i.e. where the parent
of the fifo itself is const. This is in particular useful for Rust code.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305220911.131508-5-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/qemu/fifo8.h | 10 +++++-----
util/fifo8.c | 10 +++++-----
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/include/qemu/fifo8.h b/include/qemu/fifo8.h
index 4f768d4ee38..6b476b404ee 100644
--- a/include/qemu/fifo8.h
+++ b/include/qemu/fifo8.h
@@ -71,7 +71,7 @@ uint8_t fifo8_pop(Fifo8 *fifo);
*
* Returns: The peeked data byte.
*/
-uint8_t fifo8_peek(Fifo8 *fifo);
+uint8_t fifo8_peek(const Fifo8 *fifo);
/**
* fifo8_pop_buf:
@@ -181,7 +181,7 @@ void fifo8_reset(Fifo8 *fifo);
*
* Returns: True if the fifo is empty, false otherwise.
*/
-bool fifo8_is_empty(Fifo8 *fifo);
+bool fifo8_is_empty(const Fifo8 *fifo);
/**
* fifo8_is_full:
@@ -191,7 +191,7 @@ bool fifo8_is_empty(Fifo8 *fifo);
*
* Returns: True if the fifo is full, false otherwise.
*/
-bool fifo8_is_full(Fifo8 *fifo);
+bool fifo8_is_full(const Fifo8 *fifo);
/**
* fifo8_num_free:
@@ -201,7 +201,7 @@ bool fifo8_is_full(Fifo8 *fifo);
*
* Returns: Number of free bytes.
*/
-uint32_t fifo8_num_free(Fifo8 *fifo);
+uint32_t fifo8_num_free(const Fifo8 *fifo);
/**
* fifo8_num_used:
@@ -211,7 +211,7 @@ uint32_t fifo8_num_free(Fifo8 *fifo);
*
* Returns: Number of used bytes.
*/
-uint32_t fifo8_num_used(Fifo8 *fifo);
+uint32_t fifo8_num_used(const Fifo8 *fifo);
extern const VMStateDescription vmstate_fifo8;
diff --git a/util/fifo8.c b/util/fifo8.c
index a26da66ad2c..cc4f590b7af 100644
--- a/util/fifo8.c
+++ b/util/fifo8.c
@@ -71,7 +71,7 @@ uint8_t fifo8_pop(Fifo8 *fifo)
return ret;
}
-uint8_t fifo8_peek(Fifo8 *fifo)
+uint8_t fifo8_peek(const Fifo8 *fifo)
{
assert(fifo->num > 0);
return fifo->data[fifo->head];
@@ -157,22 +157,22 @@ void fifo8_drop(Fifo8 *fifo, uint32_t len)
assert(len == 0);
}
-bool fifo8_is_empty(Fifo8 *fifo)
+bool fifo8_is_empty(const Fifo8 *fifo)
{
return (fifo->num == 0);
}
-bool fifo8_is_full(Fifo8 *fifo)
+bool fifo8_is_full(const Fifo8 *fifo)
{
return (fifo->num == fifo->capacity);
}
-uint32_t fifo8_num_free(Fifo8 *fifo)
+uint32_t fifo8_num_free(const Fifo8 *fifo)
{
return fifo->capacity - fifo->num;
}
-uint32_t fifo8_num_used(Fifo8 *fifo)
+uint32_t fifo8_num_used(const Fifo8 *fifo)
{
return fifo->num;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 35/49] hw/char/serial: Remove explicit cast from void pointer
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (33 preceding siblings ...)
2026-03-08 22:34 ` [PULL 34/49] util/fifo8: Make all read-only methods const-correct Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 36/49] hw/char/serial: Prefer fifo8 methods over open-coding Philippe Mathieu-Daudé
` (14 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
A void pointer asks for being casted, so C allows for omitting the
explicit cast. Take advantage of that.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305220911.131508-6-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index adbd1d1d4ab..0f2e79dfba6 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -715,7 +715,7 @@ static const VMStateDescription vmstate_serial_thr_ipending = {
static bool serial_tsr_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return s->tsr_retry != 0;
}
@@ -734,7 +734,7 @@ static const VMStateDescription vmstate_serial_tsr = {
static bool serial_recv_fifo_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return !fifo8_is_empty(&s->recv_fifo);
}
@@ -752,7 +752,7 @@ static const VMStateDescription vmstate_serial_recv_fifo = {
static bool serial_xmit_fifo_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return !fifo8_is_empty(&s->xmit_fifo);
}
@@ -769,7 +769,7 @@ static const VMStateDescription vmstate_serial_xmit_fifo = {
static bool serial_fifo_timeout_timer_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return timer_pending(s->fifo_timeout_timer);
}
@@ -786,7 +786,7 @@ static const VMStateDescription vmstate_serial_fifo_timeout_timer = {
static bool serial_timeout_ipending_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return s->timeout_ipending != 0;
}
@@ -803,7 +803,7 @@ static const VMStateDescription vmstate_serial_timeout_ipending = {
static bool serial_poll_needed(void *opaque)
{
- SerialState *s = (SerialState *)opaque;
+ SerialState *s = opaque;
return s->poll_msl >= 0;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 36/49] hw/char/serial: Prefer fifo8 methods over open-coding
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (34 preceding siblings ...)
2026-03-08 22:34 ` [PULL 35/49] hw/char/serial: Remove explicit cast from void pointer Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 37/49] hw/char/serial: Reuse fifo8_num_used() Philippe Mathieu-Daudé
` (13 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
Use fifo8_is_empty() and fifo8_is_full() to improve readability of the
code.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305220911.131508-7-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 0f2e79dfba6..20f68fd2f83 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -239,7 +239,7 @@ static void serial_xmit(SerialState *s)
if (s->fcr & UART_FCR_FE) {
assert(!fifo8_is_empty(&s->xmit_fifo));
s->tsr = fifo8_pop(&s->xmit_fifo);
- if (!s->xmit_fifo.num) {
+ if (fifo8_is_empty(&s->xmit_fifo)) {
s->lsr |= UART_LSR_THRE;
}
} else {
@@ -481,7 +481,7 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size)
if(s->fcr & UART_FCR_FE) {
ret = fifo8_is_empty(&s->recv_fifo) ?
0 : fifo8_pop(&s->recv_fifo);
- if (s->recv_fifo.num == 0) {
+ if (fifo8_is_empty(&s->recv_fifo)) {
s->lsr &= ~(UART_LSR_DR | UART_LSR_BI);
} else {
timer_mod(s->fifo_timeout_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + s->char_transmit_time * 4);
@@ -555,7 +555,7 @@ static uint64_t serial_ioport_read(void *opaque, hwaddr addr, unsigned size)
static int serial_can_receive(SerialState *s)
{
if(s->fcr & UART_FCR_FE) {
- if (s->recv_fifo.num < UART_FIFO_LENGTH) {
+ if (!fifo8_is_full(&s->recv_fifo)) {
/*
* Advertise (fifo.itl - fifo.count) bytes when count < ITL, and 1
* if above. If UART_FIFO_LENGTH - fifo.count is advertised the
@@ -585,7 +585,7 @@ static void serial_receive_break(SerialState *s)
/* There's data in recv_fifo and s->rbr has not been read for 4 char transmit times */
static void fifo_timeout_int (void *opaque) {
SerialState *s = opaque;
- if (s->recv_fifo.num) {
+ if (!fifo8_is_empty(&s->recv_fifo)) {
s->timeout_ipending = 1;
serial_update_irq(s);
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 37/49] hw/char/serial: Reuse fifo8_num_used()
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (35 preceding siblings ...)
2026-03-08 22:34 ` [PULL 36/49] hw/char/serial: Prefer fifo8 methods over open-coding Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 38/49] hw/char/serial: Remove unhelpful comment Philippe Mathieu-Daudé
` (12 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
Avoids accessing private fields of struct Fifo8. Now, TYPE_SERIAL only
accesses struct Fifo8 through its methods.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305220911.131508-8-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 20f68fd2f83..2c558cb9fc6 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -128,7 +128,7 @@ static void serial_update_irq(SerialState *s)
tmp_iir = UART_IIR_CTI;
} else if ((s->ier & UART_IER_RDI) && (s->lsr & UART_LSR_DR) &&
(!(s->fcr & UART_FCR_FE) ||
- s->recv_fifo.num >= s->recv_fifo_itl)) {
+ fifo8_num_used(&s->recv_fifo) >= s->recv_fifo_itl)) {
tmp_iir = UART_IIR_RDI;
} else if ((s->ier & UART_IER_THRI) && s->thr_ipending) {
tmp_iir = UART_IIR_THRI;
@@ -563,8 +563,8 @@ static int serial_can_receive(SerialState *s)
* the guest has a chance to respond, effectively overriding the ITL
* that the guest has set.
*/
- return (s->recv_fifo.num <= s->recv_fifo_itl) ?
- s->recv_fifo_itl - s->recv_fifo.num : 1;
+ return (fifo8_num_used(&s->recv_fifo) <= s->recv_fifo_itl) ?
+ s->recv_fifo_itl - fifo8_num_used(&s->recv_fifo) : 1;
} else {
return 0;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 38/49] hw/char/serial: Remove unhelpful comment
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (36 preceding siblings ...)
2026-03-08 22:34 ` [PULL 37/49] hw/char/serial: Reuse fifo8_num_used() Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 39/49] hw/char/serial: Add constants for Line Control Register Philippe Mathieu-Daudé
` (11 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
There is no "is_load" flag and one can tell from the method name what
the method does. Remove this unhelpful comment.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260305220911.131508-9-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 2c558cb9fc6..f73de1ae4f6 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -281,9 +281,6 @@ static void serial_xmit(SerialState *s)
s->lsr |= UART_LSR_TEMT;
}
-/* Setter for FCR.
- is_load flag means, that value is set while loading VM state
- and interrupt should not be invoked */
static void serial_write_fcr(SerialState *s, uint8_t val)
{
/* Set fcr - val only has the bits that are supposed to "stick" */
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 39/49] hw/char/serial: Add constants for Line Control Register
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (37 preceding siblings ...)
2026-03-08 22:34 ` [PULL 38/49] hw/char/serial: Remove unhelpful comment Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 40/49] hw/char/serial: Remove redundant reset Philippe Mathieu-Daudé
` (10 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
Substitute some magic numbers by named constants for slightly improved
readability.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260305220911.131508-10-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index f73de1ae4f6..485b98f03ff 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -39,6 +39,11 @@
#include "hw/core/qdev-properties-system.h"
#define UART_LCR_DLAB 0x80 /* Divisor latch access bit */
+#define UART_LCR_SB 0x40 /* Set break */
+#define UART_LCR_EPS 0x10 /* Even parity select */
+#define UART_LCR_PEN 0x08 /* Parity enable */
+#define UART_LCR_NSTB 0x04 /* Number of stop bits */
+#define UART_LCR_WLS 0x03 /* Word length select */
#define UART_IER_MSI 0x08 /* Enable Modem status interrupt */
#define UART_IER_RLSI 0x04 /* Enable receiver line status interrupt */
@@ -153,23 +158,23 @@ static void serial_update_parameters(SerialState *s)
/* Start bit. */
frame_size = 1;
- if (s->lcr & 0x08) {
+ if (s->lcr & UART_LCR_PEN) {
/* Parity bit. */
frame_size++;
- if (s->lcr & 0x10)
+ if (s->lcr & UART_LCR_EPS)
parity = 'E';
else
parity = 'O';
} else {
parity = 'N';
}
- if (s->lcr & 0x04) {
+ if (s->lcr & UART_LCR_NSTB) {
stop_bits = 2;
} else {
stop_bits = 1;
}
- data_bits = (s->lcr & 0x03) + 5;
+ data_bits = (s->lcr & UART_LCR_WLS) + 5;
frame_size += data_bits + stop_bits;
/* Zero divisor should give about 3500 baud */
speed = (s->divider == 0) ? 3500 : (float) s->baudbase / s->divider;
@@ -430,7 +435,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
int break_enable;
s->lcr = val;
serial_update_parameters(s);
- break_enable = (val >> 6) & 1;
+ break_enable = !!(val & UART_LCR_SB);
if (break_enable != s->last_break_enable) {
s->last_break_enable = break_enable;
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_BREAK,
@@ -676,7 +681,7 @@ static int serial_post_load(void *opaque, int version_id)
}
}
- s->last_break_enable = (s->lcr >> 6) & 1;
+ s->last_break_enable = !!(s->lcr & UART_LCR_SB);
/* Initialize fcr via setter to perform essential side-effects */
serial_write_fcr(s, s->fcr_vmstate);
serial_update_parameters(s);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 40/49] hw/char/serial: Remove redundant reset
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (38 preceding siblings ...)
2026-03-08 22:34 ` [PULL 39/49] hw/char/serial: Add constants for Line Control Register Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 41/49] hw/char/serial: Avoid implicit conversion when tracing Philippe Mathieu-Daudé
` (9 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
There is no need to invoke the reset method in realize since the reset
framework will do so anyway before the machine starts.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260305220911.131508-11-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/serial.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 485b98f03ff..0f3469a1e8f 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -934,7 +934,6 @@ static void serial_realize(DeviceState *dev, Error **errp)
serial_event, serial_be_change, s, NULL, true);
fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH);
fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH);
- serial_reset(s);
}
static void serial_unrealize(DeviceState *dev)
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 41/49] hw/char/serial: Avoid implicit conversion when tracing
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (39 preceding siblings ...)
2026-03-08 22:34 ` [PULL 40/49] hw/char/serial: Remove redundant reset Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 42/49] hppa: Introduce HPPACPUDef Philippe Mathieu-Daudé
` (8 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Bernhard Beschow <shentey@gmail.com>
On 64 bit targets, the MemoryRegion API passes an address and a value as
uint64_t, so use that for tracing. Keep the uint8_t for reading since
this is what the device model produces. On targets with less than 64
bits, uint64_t is wide enough to avoid narrowing.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Message-ID: <20260305220911.131508-12-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/trace-events | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/char/trace-events b/hw/char/trace-events
index 9e74be2c14f..a3fcc772877 100644
--- a/hw/char/trace-events
+++ b/hw/char/trace-events
@@ -5,8 +5,8 @@ parallel_ioport_read(const char *desc, uint16_t addr, uint8_t value) "read [%s]
parallel_ioport_write(const char *desc, uint16_t addr, uint8_t value) "write [%s] addr 0x%02x val 0x%02x"
# serial.c
-serial_read(uint16_t addr, uint8_t value) "read addr 0x%02x val 0x%02x"
-serial_write(uint16_t addr, uint8_t value) "write addr 0x%02x val 0x%02x"
+serial_read(uint64_t addr, uint8_t value) "[0x%02" PRIx64 "] -> 0x%02" PRIx8
+serial_write(uint64_t addr, uint64_t value) "[0x%02" PRIx64 "] <- 0x%02" PRIx64
serial_update_parameters(uint64_t baudrate, char parity, int data_bits, int stop_bits) "baudrate=%"PRIu64" parity='%c' data=%d stop=%d"
# virtio-serial-bus.c
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 42/49] hppa: Introduce HPPACPUDef
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (40 preceding siblings ...)
2026-03-08 22:34 ` [PULL 41/49] hw/char/serial: Avoid implicit conversion when tracing Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 43/49] hppa: Get physical address space bits from HPPACPUDef Philippe Mathieu-Daudé
` (7 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Anton Johansson <anjo@rev.ng>
Restructures the CPU class heirarchy to clarify model names and allow
for per-model configuration options via HPPACPUDef. 32-bit HPPA is
assumed to run a PA-7300LC, and 64-bit assumed to run a PA-8700.
A new PA-8500 model is added, which will later be used by the A400
machine. All CPU models are made into children of the now abstract
TYPE_HPPA_CPU base class.
Two fields are added to HPPACPUDef describing the size of the physical
address space, and whether or not the CPU uses the PA-RISC 2.0
architecture. The latter was previously a field in CPUHPPAState.
phys_addr_bits is currently set but unused, and will be used in the
following commit. Likewise, PA-8700 is moved to use 44 bit physical
addresses in a followup commit to not break bisection.
References to "hppa/hppa64" models in test cases are also updated.
Reviewed-by: Helge Deller <deller@gmx.de>
Signed-off-by: Anton Johansson <anjo@rev.ng>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305-hppa-c3600-v6-1-d51526e5269c@rev.ng>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/hppa/cpu-qom.h | 8 +++++-
target/hppa/cpu.h | 24 +++++++++++++---
hw/hppa/machine.c | 21 ++++++++------
linux-user/hppa/elfload.c | 2 +-
target/hppa/cpu.c | 50 +++++++++++++++++++++++++--------
tests/qtest/machine-none-test.c | 2 +-
6 files changed, 80 insertions(+), 27 deletions(-)
diff --git a/target/hppa/cpu-qom.h b/target/hppa/cpu-qom.h
index 5c454bf543b..7541c25b3d5 100644
--- a/target/hppa/cpu-qom.h
+++ b/target/hppa/cpu-qom.h
@@ -23,7 +23,13 @@
#include "hw/core/cpu.h"
#define TYPE_HPPA_CPU "hppa-cpu"
-#define TYPE_HPPA64_CPU "hppa64-cpu"
+
+#define HPPA_CPU_TYPE_SUFFIX "-" TYPE_HPPA_CPU
+#define HPPA_CPU_TYPE_NAME(name) (name HPPA_CPU_TYPE_SUFFIX)
+
+#define TYPE_HPPA_CPU_PA_7300LC HPPA_CPU_TYPE_NAME("pa-7300lc")
+#define TYPE_HPPA_CPU_PA_8500 HPPA_CPU_TYPE_NAME("pa-8500")
+#define TYPE_HPPA_CPU_PA_8700 HPPA_CPU_TYPE_NAME("pa-8700")
OBJECT_DECLARE_CPU_TYPE(HPPACPU, HPPACPUClass, HPPA_CPU)
diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h
index 092e647ccf5..43b4882fb4f 100644
--- a/target/hppa/cpu.h
+++ b/target/hppa/cpu.h
@@ -270,8 +270,6 @@ typedef struct CPUArchState {
/* Fields up to this point are cleared by a CPU reset */
struct {} end_reset_fields;
- bool is_pa20;
-
target_ulong kernel_entry; /* Linux kernel was loaded here */
target_ulong cmdline_or_bootorder;
target_ulong initrd_base, initrd_end;
@@ -290,6 +288,18 @@ struct ArchCPU {
QEMUTimer *alarm_timer;
};
+/**
+ * HPPACPUDef:
+ * @phys_addr_bits: Number of bits in the physical address space.
+ * @is_pa20: Whether the CPU model follows the PA-RISC 2.0 or 1.1 spec.
+ *
+ * Configuration options for a HPPA CPU model.
+ */
+typedef struct HPPACPUDef {
+ uint8_t phys_addr_bits;
+ bool is_pa20;
+} HPPACPUDef;
+
/**
* HPPACPUClass:
* @parent_realize: The parent class' realize handler.
@@ -302,11 +312,17 @@ struct HPPACPUClass {
DeviceRealize parent_realize;
ResettablePhases parent_phases;
+ const HPPACPUDef *def;
};
-static inline bool hppa_is_pa20(const CPUHPPAState *env)
+static inline const HPPACPUDef *hppa_def(CPUHPPAState *env)
{
- return env->is_pa20;
+ return HPPA_CPU_GET_CLASS(env_cpu(env))->def;
+}
+
+static inline bool hppa_is_pa20(CPUHPPAState *env)
+{
+ return hppa_def(env)->is_pa20;
}
static inline int HPPA_BTLB_ENTRIES(CPUHPPAState *env)
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index f55e84529f6..5d0d4de09ed 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -801,13 +801,13 @@ static void hppa_machine_common_class_init(ObjectClass *oc, const void *data)
static void HP_B160L_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA_CPU,
+ TYPE_HPPA_CPU_PA_7300LC,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP B160L workstation";
- mc->default_cpu_type = TYPE_HPPA_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_7300LC;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_B160L_init;
mc->is_default = true;
@@ -817,13 +817,13 @@ static void HP_B160L_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_C3700_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA64_CPU,
+ TYPE_HPPA_CPU_PA_8700,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP C3700 workstation";
- mc->default_cpu_type = TYPE_HPPA64_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_8700;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_C3700_init;
mc->max_cpus = HPPA_MAX_CPUS;
@@ -833,13 +833,13 @@ static void HP_C3700_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_A400_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA64_CPU,
+ TYPE_HPPA_CPU_PA_8500,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP A400-44 workstation";
- mc->default_cpu_type = TYPE_HPPA64_CPU;
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_8500;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_A400_init;
mc->max_cpus = HPPA_MAX_CPUS;
@@ -849,13 +849,18 @@ static void HP_A400_machine_init_class_init(ObjectClass *oc, const void *data)
static void HP_715_machine_init_class_init(ObjectClass *oc, const void *data)
{
static const char * const valid_cpu_types[] = {
- TYPE_HPPA_CPU,
+ TYPE_HPPA_CPU_PA_7300LC,
NULL
};
MachineClass *mc = MACHINE_CLASS(oc);
mc->desc = "HP 715/64 workstation";
- mc->default_cpu_type = TYPE_HPPA_CPU;
+ /*
+ * Although the 715 workstation should use a 7100LC, it can be safely
+ * modeled as a 7300LC as the difference is a moving of the L1 data cache
+ * to on-chip.
+ */
+ mc->default_cpu_type = TYPE_HPPA_CPU_PA_7300LC;
mc->valid_cpu_types = valid_cpu_types;
mc->init = machine_HP_715_init;
/* can only support up to max. 8 CPUs due inventory major numbers */
diff --git a/linux-user/hppa/elfload.c b/linux-user/hppa/elfload.c
index 46007087020..7f7ece6dc19 100644
--- a/linux-user/hppa/elfload.c
+++ b/linux-user/hppa/elfload.c
@@ -8,7 +8,7 @@
const char *get_elf_cpu_model(uint32_t eflags)
{
- return "hppa";
+ return "pa-7300lc";
}
const char *get_elf_platform(CPUState *cs)
diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
index 714f3bbdaf7..cc755da8be2 100644
--- a/target/hppa/cpu.c
+++ b/target/hppa/cpu.c
@@ -203,13 +203,6 @@ static void hppa_cpu_realizefn(DeviceState *dev, Error **errp)
tcg_cflags_set(cs, CF_PCREL);
}
-static void hppa_cpu_initfn(Object *obj)
-{
- CPUHPPAState *env = cpu_env(CPU(obj));
-
- env->is_pa20 = !!object_dynamic_cast(obj, TYPE_HPPA64_CPU);
-}
-
static void hppa_cpu_reset_hold(Object *obj, ResetType type)
{
HPPACPUClass *scc = HPPA_CPU_GET_CLASS(obj);
@@ -236,9 +229,14 @@ static void hppa_cpu_reset_hold(Object *obj, ResetType type)
static ObjectClass *hppa_cpu_class_by_name(const char *cpu_model)
{
- g_autofree char *typename = g_strconcat(cpu_model, "-cpu", NULL);
+ ObjectClass *oc;
+ char *typename;
- return object_class_by_name(typename);
+ typename = g_strdup_printf(HPPA_CPU_TYPE_NAME("%s"), cpu_model);
+ oc = object_class_by_name(typename);
+ g_free(typename);
+
+ return oc;
}
#ifndef CONFIG_USER_ONLY
@@ -279,6 +277,14 @@ static const TCGCPUOps hppa_tcg_ops = {
#endif /* !CONFIG_USER_ONLY */
};
+static void hppa_cpu_class_base_init(ObjectClass *oc, const void *data)
+{
+ HPPACPUClass *acc = HPPA_CPU_CLASS(oc);
+ /* Make sure all CPU models define a HPPACPUDef */
+ g_assert(!object_class_is_abstract(oc) && data != NULL);
+ acc->def = data;
+}
+
static void hppa_cpu_class_init(ObjectClass *oc, const void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
@@ -313,14 +319,34 @@ static const TypeInfo hppa_cpu_type_infos[] = {
.parent = TYPE_CPU,
.instance_size = sizeof(HPPACPU),
.instance_align = __alignof(HPPACPU),
- .instance_init = hppa_cpu_initfn,
- .abstract = false,
+ .abstract = true,
.class_size = sizeof(HPPACPUClass),
.class_init = hppa_cpu_class_init,
+ .class_base_init = hppa_cpu_class_base_init,
},
{
- .name = TYPE_HPPA64_CPU,
+ .name = TYPE_HPPA_CPU_PA_7300LC,
.parent = TYPE_HPPA_CPU,
+ .class_data = &(const HPPACPUDef) {
+ .phys_addr_bits = 32,
+ .is_pa20 = false,
+ },
+ },
+ {
+ .name = TYPE_HPPA_CPU_PA_8500,
+ .parent = TYPE_HPPA_CPU,
+ .class_data = &(const HPPACPUDef) {
+ .phys_addr_bits = 40,
+ .is_pa20 = true,
+ },
+ },
+ {
+ .name = TYPE_HPPA_CPU_PA_8700,
+ .parent = TYPE_HPPA_CPU,
+ .class_data = &(const HPPACPUDef) {
+ .phys_addr_bits = 40,
+ .is_pa20 = true,
+ },
},
};
diff --git a/tests/qtest/machine-none-test.c b/tests/qtest/machine-none-test.c
index c1e22dcecc7..bafd7d660ec 100644
--- a/tests/qtest/machine-none-test.c
+++ b/tests/qtest/machine-none-test.c
@@ -47,7 +47,7 @@ static struct arch2cpu cpus_map[] = {
{ "tricore", "tc1796" },
{ "xtensa", "dc233c" },
{ "xtensaeb", "fsf" },
- { "hppa", "hppa" },
+ { "hppa", "pa-7300lc" },
{ "riscv64", "rv64" },
{ "riscv32", "rv32" },
{ "rx", "rx62n" },
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 43/49] hppa: Get physical address space bits from HPPACPUDef
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (41 preceding siblings ...)
2026-03-08 22:34 ` [PULL 42/49] hppa: Introduce HPPACPUDef Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 44/49] hppa: Use 44 bit physical addresses for PA-8700 Philippe Mathieu-Daudé
` (6 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Anton Johansson <anjo@rev.ng>
Signed-off-by: Anton Johansson <anjo@rev.ng>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260305-hppa-c3600-v6-2-d51526e5269c@rev.ng>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/pci-host/astro.h | 2 ++
target/hppa/cpu.h | 11 ++++++++---
hw/hppa/machine.c | 15 +++++++++-----
hw/pci-host/astro.c | 8 +++++++-
target/hppa/cpu.c | 5 +++++
target/hppa/mem_helper.c | 39 +++++++++++--------------------------
6 files changed, 43 insertions(+), 37 deletions(-)
diff --git a/include/hw/pci-host/astro.h b/include/hw/pci-host/astro.h
index 832125a05af..fce052c9f86 100644
--- a/include/hw/pci-host/astro.h
+++ b/include/hw/pci-host/astro.h
@@ -82,6 +82,8 @@ struct AstroState {
uint64_t tlb_tcnfg;
uint64_t tlb_pdir_base;
+ uint8_t phys_addr_bits;
+
struct ElroyState *elroy[ELROY_NUM];
MemoryRegion this_mem;
diff --git a/target/hppa/cpu.h b/target/hppa/cpu.h
index 43b4882fb4f..7d47afe8efa 100644
--- a/target/hppa/cpu.h
+++ b/target/hppa/cpu.h
@@ -320,6 +320,11 @@ static inline const HPPACPUDef *hppa_def(CPUHPPAState *env)
return HPPA_CPU_GET_CLASS(env_cpu(env))->def;
}
+static inline uint8_t hppa_phys_addr_bits(CPUHPPAState *env)
+{
+ return hppa_def(env)->phys_addr_bits;
+}
+
static inline bool hppa_is_pa20(CPUHPPAState *env)
{
return hppa_def(env)->is_pa20;
@@ -352,9 +357,9 @@ static inline vaddr hppa_form_gva(CPUHPPAState *env, uint64_t spc,
return hppa_form_gva_mask(env->gva_offset_mask, spc, off);
}
-hwaddr hppa_abs_to_phys_pa1x(vaddr addr);
-hwaddr hppa_abs_to_phys_pa2_w0(vaddr addr);
-hwaddr hppa_abs_to_phys_pa2_w1(vaddr addr);
+hwaddr hppa_abs_to_phys_pa1x(uint8_t phys_addr_bits, vaddr addr);
+hwaddr hppa_abs_to_phys_pa2_w0(uint8_t phys_addr_bits, vaddr addr);
+hwaddr hppa_abs_to_phys_pa2_w1(uint8_t phys_addr_bits, vaddr addr);
/*
* Since PSW_{I,CB} will never need to be in tb->flags, reuse them.
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 5d0d4de09ed..6b69a304c2a 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -179,19 +179,21 @@ static uint64_t linux_kernel_virt_to_phys(void *opaque, uint64_t addr)
return addr;
}
+static HPPACPU *cpu[HPPA_MAX_CPUS];
+static uint64_t firmware_entry;
+
static uint64_t translate_pa10(void *dummy, uint64_t addr)
{
- return hppa_abs_to_phys_pa1x(addr);
+ const uint8_t pa_bits = hppa_phys_addr_bits(&cpu[0]->env);
+ return hppa_abs_to_phys_pa1x(pa_bits, addr);
}
static uint64_t translate_pa20(void *dummy, uint64_t addr)
{
- return hppa_abs_to_phys_pa2_w0(addr);
+ const uint8_t pa_bits = hppa_phys_addr_bits(&cpu[0]->env);
+ return hppa_abs_to_phys_pa2_w0(pa_bits, addr);
}
-static HPPACPU *cpu[HPPA_MAX_CPUS];
-static uint64_t firmware_entry;
-
static void fw_cfg_boot_set(void *opaque, const char *boot_device,
Error **errp)
{
@@ -685,6 +687,9 @@ static AstroState *astro_init(void)
DeviceState *dev;
dev = qdev_new(TYPE_ASTRO_CHIP);
+ object_property_set_int(OBJECT(dev), "phys-addr-bits",
+ hppa_phys_addr_bits(&cpu[0]->env),
+ &error_abort);
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
return ASTRO_CHIP(dev);
diff --git a/hw/pci-host/astro.c b/hw/pci-host/astro.c
index 00a904277c0..626aa9ce223 100644
--- a/hw/pci-host/astro.c
+++ b/hw/pci-host/astro.c
@@ -303,7 +303,7 @@ static IOMMUTLBEntry astro_translate_iommu(IOMMUMemoryRegion *iommu,
* language which not-coincidentally matches the PSW.W=0 mapping.
*/
if (addr <= UINT32_MAX) {
- entry = hppa_abs_to_phys_pa2_w0(addr);
+ entry = hppa_abs_to_phys_pa2_w0(s->phys_addr_bits, addr);
} else {
entry = addr;
}
@@ -910,6 +910,10 @@ static void astro_realize(DeviceState *obj, Error **errp)
}
}
+static const Property astro_props[] = {
+ DEFINE_PROP_UINT8("phys-addr-bits", AstroState, phys_addr_bits, 32),
+};
+
static void astro_class_init(ObjectClass *klass, const void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -922,6 +926,8 @@ static void astro_class_init(ObjectClass *klass, const void *data)
* be created without that hardware
*/
dc->user_creatable = false;
+
+ device_class_set_props(dc, astro_props);
}
static const TypeInfo astro_chip_info = {
diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
index cc755da8be2..5895b9d7c09 100644
--- a/target/hppa/cpu.c
+++ b/target/hppa/cpu.c
@@ -283,6 +283,11 @@ static void hppa_cpu_class_base_init(ObjectClass *oc, const void *data)
/* Make sure all CPU models define a HPPACPUDef */
g_assert(!object_class_is_abstract(oc) && data != NULL);
acc->def = data;
+ /*
+ * Verify assumptions made in hppa_abs_to_phys_pa2_w1() on the size
+ * of the physical address space.
+ */
+ g_assert(acc->def->phys_addr_bits <= 54);
}
static void hppa_cpu_class_init(ObjectClass *oc, const void *data)
diff --git a/target/hppa/mem_helper.c b/target/hppa/mem_helper.c
index 9199d1e06ab..a4b382069d8 100644
--- a/target/hppa/mem_helper.c
+++ b/target/hppa/mem_helper.c
@@ -29,29 +29,12 @@
#include "hw/core/cpu.h"
#include "trace.h"
-/*
- * 64-bit (PA-RISC 2.0) machines are assumed to run PA-8700, and 32-bit
- * machines 7300LC. This should give 44 and 32 bits of physical address
- * space respectively.
- *
- * CPU model Physical address space bits
- * PA-7000--7300LC 32
- * PA-8000--8600 40
- * PA-8700--8900 44
- *
- * FIXME: However, the SeaBIOS firmware that is that tested against
- * uses 40-bit physical addresses, despite supposedly running a C3700
- * with a PA-8700 cpu, so use 40-bits for 64-bit.
- */
-#define HPPA_PHYS_ADDR_SPACE_BITS_PA20 40
-#define HPPA_PHYS_ADDR_SPACE_BITS_PA1X 32
-
-hwaddr hppa_abs_to_phys_pa1x(vaddr addr)
+hwaddr hppa_abs_to_phys_pa1x(uint8_t phys_addr_bits, vaddr addr)
{
- return extract64(addr, 0, HPPA_PHYS_ADDR_SPACE_BITS_PA1X);
+ return extract64(addr, 0, phys_addr_bits);
}
-hwaddr hppa_abs_to_phys_pa2_w1(vaddr addr)
+hwaddr hppa_abs_to_phys_pa2_w1(uint8_t phys_addr_bits, vaddr addr)
{
/*
* Figure H-8 "62-bit Absolute Accesses when PSW W-bit is 1" describes
@@ -64,11 +47,10 @@ hwaddr hppa_abs_to_phys_pa2_w1(vaddr addr)
* Since the supported physical address space is below 54 bits, the
* H-8 algorithm is moot and all that is left is to truncate.
*/
- QEMU_BUILD_BUG_ON(HPPA_PHYS_ADDR_SPACE_BITS_PA20 > 54);
- return sextract64(addr, 0, HPPA_PHYS_ADDR_SPACE_BITS_PA20);
+ return sextract64(addr, 0, phys_addr_bits);
}
-hwaddr hppa_abs_to_phys_pa2_w0(vaddr addr)
+hwaddr hppa_abs_to_phys_pa2_w0(uint8_t phys_addr_bits, vaddr addr)
{
/*
* See Figure H-10, "Absolute Accesses when PSW W-bit is 0",
@@ -89,7 +71,7 @@ hwaddr hppa_abs_to_phys_pa2_w0(vaddr addr)
* is what can be seen on physical machines too.
*/
addr = (uint32_t)addr;
- addr |= -1ull << (HPPA_PHYS_ADDR_SPACE_BITS_PA20 - 4);
+ addr |= -1ull << (phys_addr_bits - 4);
}
return addr;
}
@@ -231,15 +213,16 @@ int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx,
/* Virtual translation disabled. Map absolute to physical. */
if (MMU_IDX_MMU_DISABLED(mmu_idx)) {
+ const uint8_t phys_addr_bits = hppa_phys_addr_bits(env);
switch (mmu_idx) {
case MMU_ABS_W_IDX:
- phys = hppa_abs_to_phys_pa2_w1(addr);
+ phys = hppa_abs_to_phys_pa2_w1(phys_addr_bits, addr);
break;
case MMU_ABS_IDX:
if (hppa_is_pa20(env)) {
- phys = hppa_abs_to_phys_pa2_w0(addr);
+ phys = hppa_abs_to_phys_pa2_w0(phys_addr_bits, addr);
} else {
- phys = hppa_abs_to_phys_pa1x(addr);
+ phys = hppa_abs_to_phys_pa1x(phys_addr_bits, addr);
}
break;
default:
@@ -580,7 +563,7 @@ static void itlbt_pa20(CPUHPPAState *env, target_ulong r1,
/* Align per the page size. */
ent->pa &= TARGET_PAGE_MASK << mask_shift;
/* Ignore the bits beyond physical address space. */
- ent->pa = sextract64(ent->pa, 0, HPPA_PHYS_ADDR_SPACE_BITS_PA20);
+ ent->pa = sextract64(ent->pa, 0, hppa_phys_addr_bits(env));
ent->t = extract64(r2, 61, 1);
ent->d = extract64(r2, 60, 1);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 44/49] hppa: Use 44 bit physical addresses for PA-8700
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (42 preceding siblings ...)
2026-03-08 22:34 ` [PULL 43/49] hppa: Get physical address space bits from HPPACPUDef Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 45/49] ati-vga: Allow setting EDID parameters directly Philippe Mathieu-Daudé
` (5 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Anton Johansson <anjo@rev.ng>
This is in line with the PA-8700 specification which demands 44 bits.
However, this change breaks the SeaBIOS functional tests as the firmware
assumes 40 bit physical addresses. Therefore, change the functional
tests to instead run on an A400 which has the expected physical address
space size.
Reviewed-by: Helge Deller <deller@gmx.de>
Signed-off-by: Anton Johansson <anjo@rev.ng>
Message-ID: <20260305-hppa-c3600-v6-3-d51526e5269c@rev.ng>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/hppa/cpu.c | 2 +-
tests/functional/hppa/test_seabios.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/target/hppa/cpu.c b/target/hppa/cpu.c
index 5895b9d7c09..92027d129a7 100644
--- a/target/hppa/cpu.c
+++ b/target/hppa/cpu.c
@@ -349,7 +349,7 @@ static const TypeInfo hppa_cpu_type_infos[] = {
.name = TYPE_HPPA_CPU_PA_8700,
.parent = TYPE_HPPA_CPU,
.class_data = &(const HPPACPUDef) {
- .phys_addr_bits = 40,
+ .phys_addr_bits = 44,
.is_pa20 = true,
},
},
diff --git a/tests/functional/hppa/test_seabios.py b/tests/functional/hppa/test_seabios.py
index 661b2464e13..bdb9d534efe 100755
--- a/tests/functional/hppa/test_seabios.py
+++ b/tests/functional/hppa/test_seabios.py
@@ -12,7 +12,7 @@
class HppaSeabios(QemuSystemTest):
timeout = 5
- MACH_BITS = {'B160L': 32, 'C3700': 64}
+ MACH_BITS = {'B160L': 32, 'A400': 64}
def boot_seabios(self):
mach = self.machine
@@ -28,7 +28,7 @@ def test_hppa_32(self):
self.boot_seabios()
def test_hppa_64(self):
- self.set_machine('C3700')
+ self.set_machine('A400')
self.boot_seabios()
if __name__ == '__main__':
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 45/49] ati-vga: Allow setting EDID parameters directly
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (43 preceding siblings ...)
2026-03-08 22:34 ` [PULL 44/49] hppa: Use 44 bit physical addresses for PA-8700 Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 46/49] hw/m68k/mcf_intc: Use qdev input gpios for input IRQs Philippe Mathieu-Daudé
` (4 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: BALATON Zoltan <balaton@eik.bme.hu>
The EDID generation has some parameters that can be set via properties
but since ati-vga uses i2c-ddc it is only accessible with -global
option. Expose these properties so users can more easily set it via
e.g. -device ati-vga,xres=1024,yres=768.
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Message-ID: <20260305233717.1D08F5969F6@zero.eik.bme.hu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/display/ati_int.h | 2 ++
hw/display/ati.c | 13 ++++++++-----
2 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h
index 98f57ca5fa4..874c63eb544 100644
--- a/hw/display/ati_int.h
+++ b/hw/display/ati_int.h
@@ -13,6 +13,7 @@
#include "qemu/units.h"
#include "hw/pci/pci_device.h"
#include "hw/i2c/bitbang_i2c.h"
+#include "hw/display/i2c-ddc.h"
#include "vga_int.h"
#include "qom/object.h"
@@ -108,6 +109,7 @@ struct ATIVGAState {
QEMUCursor *cursor;
QEMUTimer vblank_timer;
bitbang_i2c_interface bbi2c;
+ I2CDDCState i2cddc;
MemoryRegion linear_aper;
MemoryRegion io;
MemoryRegion mm;
diff --git a/hw/display/ati.c b/hw/display/ati.c
index 6cf243bcf95..9a7c5703b0f 100644
--- a/hw/display/ati.c
+++ b/hw/display/ati.c
@@ -28,7 +28,6 @@
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "ui/console.h"
-#include "hw/display/i2c-ddc.h"
#include "trace.h"
#define ATI_DEBUG_HW_CURSOR 0
@@ -1039,6 +1038,7 @@ static void ati_vga_realize(PCIDevice *dev, Error **errp)
{
ATIVGAState *s = ATI_VGA(dev);
VGACommonState *vga = &s->vga;
+ I2CBus *i2cbus;
uint64_t aper_size;
#ifndef CONFIG_PIXMAN
@@ -1087,11 +1087,10 @@ static void ati_vga_realize(PCIDevice *dev, Error **errp)
}
/* ddc, edid */
- I2CBus *i2cbus = i2c_init_bus(DEVICE(s), "ati-vga.ddc");
+ i2cbus = i2c_init_bus(DEVICE(s), "ati-vga.ddc");
bitbang_i2c_init(&s->bbi2c, i2cbus);
- I2CSlave *i2cddc = I2C_SLAVE(qdev_new(TYPE_I2CDDC));
- i2c_slave_set_address(i2cddc, 0x50);
- qdev_realize_and_unref(DEVICE(i2cddc), BUS(i2cbus), &error_abort);
+ i2c_slave_set_address(I2C_SLAVE(&s->i2cddc), 0x50);
+ qdev_realize(DEVICE(&s->i2cddc), BUS(i2cbus), &error_abort);
/* mmio register space */
memory_region_init_io(&s->mm, OBJECT(s), &ati_mm_ops, s,
@@ -1147,6 +1146,7 @@ static const Property ati_vga_properties[] = {
DEFINE_PROP_BOOL("guest_hwcursor", ATIVGAState, cursor_guest_mode, false),
/* this is a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
DEFINE_PROP_UINT8("x-pixman", ATIVGAState, use_pixman, DEFAULT_X_PIXMAN),
+ DEFINE_EDID_PROPERTIES(ATIVGAState, i2cddc.edid_info),
};
static void ati_vga_class_init(ObjectClass *klass, const void *data)
@@ -1169,6 +1169,9 @@ static void ati_vga_class_init(ObjectClass *klass, const void *data)
static void ati_vga_init(Object *o)
{
+ ATIVGAState *s = ATI_VGA(o);
+
+ object_initialize_child(o, "edid", &s->i2cddc, TYPE_I2CDDC);
object_property_set_description(o, "x-pixman", "Use pixman for: "
"1: fill, 2: blit");
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 46/49] hw/m68k/mcf_intc: Use qdev input gpios for input IRQs
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (44 preceding siblings ...)
2026-03-08 22:34 ` [PULL 45/49] ati-vga: Allow setting EDID parameters directly Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 47/49] audio/jack: Fix use of qemu_thread_set_name() on macOS Philippe Mathieu-Daudé
` (3 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Peter Maydell <peter.maydell@linaro.org>
The m68k mcf_intc interrupt controller currently implements its
inbound IRQ lines by calling qemu_allocate_irqs() in mcf_intc_init().
This results in leaks like this:
Direct leak of 2944 byte(s) in 46 object(s) allocated from:
#0 0x5cf95ec15323 in malloc (/home/pm215/qemu/build/san/qemu-system-m68k+0xf9e323) (BuildId: 18d55ef8ea9856e68ee30802078af5050b8b06c5)
#1 0x7637c65c5ac9 in g_malloc (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62ac9) (BuildId: 116e142b9b52c8a4dfd403e759e71ab8f95d8bb3)
#2 0x5cf95f6b2f27 in object_new_with_type /home/pm215/qemu/build/san/../../qom/object.c:767:15
#3 0x5cf95f6aa62e in qemu_allocate_irq /home/pm215/qemu/build/san/../../hw/core/irq.c:91:25
#4 0x5cf95f6aa62e in qemu_extend_irqs /home/pm215/qemu/build/san/../../hw/core/irq.c:79:16
#5 0x5cf95f5f6d99 in mcf5208evb_init /home/pm215/qemu/build/san/../../hw/m68k/mcf5208.c:310:11
This isn't an important leak, as it is memory we allocate once at
QEMU startup and that has to stay live for the lifetime of the
system. However it does point at a code improvement.
Modernise this to have the device itself create inbound GPIOs with
qdev_init_gpio_in() that the board can then refer to and wire up
individually.
As the device is used in only a single board, we can update device
and board in a single patch rather than having to try to figure out
some way to change the API more piecemeal.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Thomas Huth <th.huth+qemu@posteo.eu>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20260306190425.3047580-1-peter.maydell@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/m68k/mcf.h | 5 ++---
hw/m68k/mcf5208.c | 24 +++++++++++-------------
hw/m68k/mcf_intc.c | 8 +++-----
3 files changed, 16 insertions(+), 21 deletions(-)
diff --git a/include/hw/m68k/mcf.h b/include/hw/m68k/mcf.h
index 5d9f876ffeb..b2a599adaad 100644
--- a/include/hw/m68k/mcf.h
+++ b/include/hw/m68k/mcf.h
@@ -14,9 +14,8 @@ DeviceState *mcf_uart_create(qemu_irq irq, Chardev *chr);
DeviceState *mcf_uart_create_mmap(hwaddr base, qemu_irq irq, Chardev *chr);
/* mcf_intc.c */
-qemu_irq *mcf_intc_init(struct MemoryRegion *sysmem,
- hwaddr base,
- M68kCPU *cpu);
+DeviceState *mcf_intc_init(struct MemoryRegion *sysmem,
+ hwaddr base, M68kCPU *cpu);
/* mcf5206.c */
#define TYPE_MCF5206_MBAR "mcf5206-mbar"
diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c
index c6d1c5fae9f..0e07aa45e9d 100644
--- a/hw/m68k/mcf5208.c
+++ b/hw/m68k/mcf5208.c
@@ -227,7 +227,7 @@ static const MemoryRegionOps m5208_rcm_ops = {
.endianness = DEVICE_BIG_ENDIAN,
};
-static void mcf5208_sys_init(MemoryRegion *address_space, qemu_irq *pic,
+static void mcf5208_sys_init(MemoryRegion *address_space, DeviceState *intc,
M68kCPU *cpu)
{
MemoryRegion *iomem = g_new(MemoryRegion, 1);
@@ -250,11 +250,11 @@ static void mcf5208_sys_init(MemoryRegion *address_space, qemu_irq *pic,
"m5208-timer", 0x00004000);
memory_region_add_subregion(address_space, 0xfc080000 + 0x4000 * i,
&s->iomem);
- s->irq = pic[4 + i];
+ s->irq = qdev_get_gpio_in(intc, 4 + i);
}
}
-static void mcf_fec_init(MemoryRegion *sysmem, hwaddr base, qemu_irq *irqs)
+static void mcf_fec_init(MemoryRegion *sysmem, hwaddr base, DeviceState *intc)
{
DeviceState *dev;
SysBusDevice *s;
@@ -268,7 +268,7 @@ static void mcf_fec_init(MemoryRegion *sysmem, hwaddr base, qemu_irq *irqs)
s = SYS_BUS_DEVICE(dev);
sysbus_realize_and_unref(s, &error_fatal);
for (i = 0; i < FEC_NUM_IRQ; i++) {
- sysbus_connect_irq(s, i, irqs[i]);
+ sysbus_connect_irq(s, i, qdev_get_gpio_in(intc, i + 36));
}
memory_region_add_subregion(sysmem, base, sysbus_mmio_get_region(s, 0));
@@ -283,10 +283,10 @@ static void mcf5208evb_init(MachineState *machine)
int kernel_size;
uint64_t elf_entry;
hwaddr entry;
- qemu_irq *pic;
MemoryRegion *address_space_mem = get_system_memory();
MemoryRegion *rom = g_new(MemoryRegion, 1);
MemoryRegion *sram = g_new(MemoryRegion, 1);
+ DeviceState *intc;
cpu = M68K_CPU(cpu_create(machine->cpu_type));
env = &cpu->env;
@@ -307,17 +307,15 @@ static void mcf5208evb_init(MachineState *machine)
memory_region_add_subregion(address_space_mem, 0x80000000, sram);
/* Internal peripherals. */
- pic = mcf_intc_init(address_space_mem, 0xfc048000, cpu);
+ intc = mcf_intc_init(address_space_mem, 0xfc048000, cpu);
- mcf_uart_create_mmap(0xfc060000, pic[26], serial_hd(0));
- mcf_uart_create_mmap(0xfc064000, pic[27], serial_hd(1));
- mcf_uart_create_mmap(0xfc068000, pic[28], serial_hd(2));
+ mcf_uart_create_mmap(0xfc060000, qdev_get_gpio_in(intc, 26), serial_hd(0));
+ mcf_uart_create_mmap(0xfc064000, qdev_get_gpio_in(intc, 27), serial_hd(1));
+ mcf_uart_create_mmap(0xfc068000, qdev_get_gpio_in(intc, 28), serial_hd(2));
- mcf5208_sys_init(address_space_mem, pic, cpu);
+ mcf5208_sys_init(address_space_mem, intc, cpu);
- mcf_fec_init(address_space_mem, 0xfc030000, pic + 36);
-
- g_free(pic);
+ mcf_fec_init(address_space_mem, 0xfc030000, intc);
/* 0xfc000000 SCM. */
/* 0xfc004000 XBS. */
diff --git a/hw/m68k/mcf_intc.c b/hw/m68k/mcf_intc.c
index 20112c94be1..1014fe6fa57 100644
--- a/hw/m68k/mcf_intc.c
+++ b/hw/m68k/mcf_intc.c
@@ -175,6 +175,7 @@ static void mcf_intc_instance_init(Object *obj)
memory_region_init_io(&s->iomem, obj, &mcf_intc_ops, s, "mcf", 0x100);
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem);
+ qdev_init_gpio_in(DEVICE(s), mcf_intc_set_irq, 64);
}
static const Property mcf_intc_properties[] = {
@@ -206,9 +207,7 @@ static void mcf_intc_register_types(void)
type_init(mcf_intc_register_types)
-qemu_irq *mcf_intc_init(MemoryRegion *sysmem,
- hwaddr base,
- M68kCPU *cpu)
+DeviceState *mcf_intc_init(MemoryRegion *sysmem, hwaddr base, M68kCPU *cpu)
{
DeviceState *dev;
@@ -218,6 +217,5 @@ qemu_irq *mcf_intc_init(MemoryRegion *sysmem,
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
memory_region_add_subregion(sysmem, base,
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0));
-
- return qemu_allocate_irqs(mcf_intc_set_irq, dev, 64);
+ return dev;
}
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 47/49] audio/jack: Fix use of qemu_thread_set_name() on macOS
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (45 preceding siblings ...)
2026-03-08 22:34 ` [PULL 46/49] hw/m68k/mcf_intc: Use qdev input gpios for input IRQs Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 48/49] hw/hppa: Avoid leaking a diva-gsp device Philippe Mathieu-Daudé
` (2 subsequent siblings)
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
Since commit 8f68a33ad46 we get on macOS:
Audio backends
CoreAudio support : YES
PipeWire support : NO
JACK support : YES 1.9.22
../audio/jackaudio.c:654:12: error: unused function 'qjack_thread_creator' [-Werror,-Wunused-function]
654 | static int qjack_thread_creator(jack_native_thread_t *thread,
| ^~~~~~~~~~~~~~~~~~~~
This is simply due to a missing #ifdef'ry change. Update
so we can use the new qemu_thread_set_name() exposed by
commit 46255cc2be9.
Fixes: 8f68a33ad46 ("audio: make jackaudio use qemu_thread_set_name")
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Message-Id: <20260307114923.75394-1-philmd@linaro.org>
---
audio/jackaudio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/audio/jackaudio.c b/audio/jackaudio.c
index be6fb378f72..589aecede9a 100644
--- a/audio/jackaudio.c
+++ b/audio/jackaudio.c
@@ -712,7 +712,7 @@ static const TypeInfo audio_types[] = {
static void __attribute__((__constructor__)) audio_jack_init(void)
{
qemu_mutex_init(&qjack_shutdown_lock);
-#if !defined(WIN32) && defined(CONFIG_PTHREAD_SETNAME_NP_W_TID)
+#if !defined(WIN32)
jack_set_thread_creator(qjack_thread_creator);
#endif
jack_set_error_function(qjack_error);
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 48/49] hw/hppa: Avoid leaking a diva-gsp device
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (46 preceding siblings ...)
2026-03-08 22:34 ` [PULL 47/49] audio/jack: Fix use of qemu_thread_set_name() on macOS Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 49/49] hw/char: Drop disable property of Diva GSP card Philippe Mathieu-Daudé
2026-03-09 12:14 ` [PULL 00/49] Misc HW patches for 2026-03-08 Peter Maydell
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Helge Deller <deller@gmx.de>
Create a Diva-gsp unconditionally on all 64-bit PCI machines.
The A400 usually comes with a Diva card. The C3700 has a built-in
SUPERIO chip, which we haven't implemented yet, so running with an
emulated Diva is the best we can do for now.
Signed-off-by: Helge Deller <deller@gmx.de>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260307195243.8813-2-deller@kernel.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/hppa/machine.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 6b69a304c2a..ec63dc12979 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -382,18 +382,15 @@ static void machine_HP_common_init_tail(MachineState *machine, PCIBus *pci_bus,
if (pci_bus && hppa_is_pa20(&cpu[0]->env)) {
/* BMC board: HP Diva GSP PCI card */
- dev = qdev_new("diva-gsp");
- if (dev && !object_property_get_bool(OBJECT(dev), "disable", NULL)) {
- pci_dev = pci_new_multifunction(PCI_DEVFN(2, 0), "diva-gsp");
- if (!lasi_dev) {
- /* bind default keyboard/serial to Diva card */
- qdev_prop_set_chr(DEVICE(pci_dev), "chardev1", serial_hd(0));
- qdev_prop_set_chr(DEVICE(pci_dev), "chardev2", serial_hd(1));
- qdev_prop_set_chr(DEVICE(pci_dev), "chardev3", serial_hd(2));
- qdev_prop_set_chr(DEVICE(pci_dev), "chardev4", serial_hd(3));
- }
- pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
+ pci_dev = pci_new_multifunction(PCI_DEVFN(2, 0), "diva-gsp");
+ if (!lasi_dev) {
+ /* bind default keyboard/serial to Diva card */
+ qdev_prop_set_chr(DEVICE(pci_dev), "chardev1", serial_hd(0));
+ qdev_prop_set_chr(DEVICE(pci_dev), "chardev2", serial_hd(1));
+ qdev_prop_set_chr(DEVICE(pci_dev), "chardev3", serial_hd(2));
+ qdev_prop_set_chr(DEVICE(pci_dev), "chardev4", serial_hd(3));
}
+ pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
}
/* create USB OHCI controller for USB keyboard & mouse on Astro machines */
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* [PULL 49/49] hw/char: Drop disable property of Diva GSP card
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (47 preceding siblings ...)
2026-03-08 22:34 ` [PULL 48/49] hw/hppa: Avoid leaking a diva-gsp device Philippe Mathieu-Daudé
@ 2026-03-08 22:34 ` Philippe Mathieu-Daudé
2026-03-09 12:14 ` [PULL 00/49] Misc HW patches for 2026-03-08 Peter Maydell
49 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-08 22:34 UTC (permalink / raw)
To: qemu-devel
From: Helge Deller <deller@gmx.de>
The "disable" property is not used, so drop it.
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Helge Deller <deller@gmx.de>
Message-ID: <20260307195243.8813-3-deller@kernel.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/char/diva-gsp.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/hw/char/diva-gsp.c b/hw/char/diva-gsp.c
index f9aa6e326d6..53fd0fe2a13 100644
--- a/hw/char/diva-gsp.c
+++ b/hw/char/diva-gsp.c
@@ -51,7 +51,6 @@ typedef struct PCIDivaSerialState {
SerialState state[PCI_SERIAL_MAX_PORTS];
uint32_t level[PCI_SERIAL_MAX_PORTS];
qemu_irq *irqs;
- bool disable;
} PCIDivaSerialState;
static void diva_pci_exit(PCIDevice *dev)
@@ -159,20 +158,18 @@ static void diva_pci_realize(PCIDevice *dev, Error **errp)
static const VMStateDescription vmstate_pci_diva = {
.name = "pci-diva-serial",
- .version_id = 1,
- .minimum_version_id = 1,
+ .version_id = 2,
+ .minimum_version_id = 2,
.fields = (const VMStateField[]) {
VMSTATE_PCI_DEVICE(dev, PCIDivaSerialState),
VMSTATE_STRUCT_ARRAY(state, PCIDivaSerialState, PCI_SERIAL_MAX_PORTS,
0, vmstate_serial, SerialState),
VMSTATE_UINT32_ARRAY(level, PCIDivaSerialState, PCI_SERIAL_MAX_PORTS),
- VMSTATE_BOOL(disable, PCIDivaSerialState),
VMSTATE_END_OF_LIST()
}
};
static const Property diva_serial_properties[] = {
- DEFINE_PROP_BOOL("disable", PCIDivaSerialState, disable, false),
DEFINE_PROP_CHR("chardev1", PCIDivaSerialState, state[0].chr),
DEFINE_PROP_CHR("chardev2", PCIDivaSerialState, state[1].chr),
DEFINE_PROP_CHR("chardev3", PCIDivaSerialState, state[2].chr),
--
2.53.0
^ permalink raw reply related [flat|nested] 52+ messages in thread
* Re: [PULL 00/49] Misc HW patches for 2026-03-08
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
` (48 preceding siblings ...)
2026-03-08 22:34 ` [PULL 49/49] hw/char: Drop disable property of Diva GSP card Philippe Mathieu-Daudé
@ 2026-03-09 12:14 ` Peter Maydell
49 siblings, 0 replies; 52+ messages in thread
From: Peter Maydell @ 2026-03-09 12:14 UTC (permalink / raw)
To: Philippe Mathieu-Daudé; +Cc: qemu-devel
On Sun, 8 Mar 2026 at 22:35, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> The following changes since commit 1ae4271ab8dbfbf5dc28b36baa7f3fd5fd2215e1:
>
> Merge tag 'pull-11.0-virtio-gpu-updates-060326-1' of https://gitlab.com/stsquad/qemu into staging (2026-03-07 11:22:16 +0000)
>
> are available in the Git repository at:
>
> https://github.com/philmd/qemu.git tags/hw-misc-20260308
>
> for you to fetch changes up to 27c64fa59d1b14c4656908e1dfca49482a96df61:
>
> hw/char: Drop disable property of Diva GSP card (2026-03-08 23:11:14 +0100)
>
> Following checkpatch errors ignored (first spurious, other ones pre-existing):
>
> ERROR: "foo * bar" should be "foo *bar"
> #40: FILE: hw/display/ati_2d.c:60:
> + + dst_y * surface_stride(ds),
>
> ERROR: switch and case should be at the same indent
> #27: FILE: hw/net/xilinx_axienet.c:143:
> switch (regnum) {
> + case 2:
> + case 3:
>
> ERROR: braces {} are necessary for all arms of this statement
> #43: FILE: hw/char/serial.c:164:
> + if (s->lcr & UART_LCR_EPS)
> [...]
> else
> [...]
>
> ----------------------------------------------------------------
> Misc HW patches
>
> - Remove versioned machines released in QEMU 3.0
> - Build various stubs and ACPI objects once
> - Pair of bug fixes in ATI VGA model
> - Cleanups in 16550A UART model
> - Clarify PA-RISC CPU models (adding the PA-8500)
> - Various memory leaks / overflows fixed
> - MAINTAINERS updates
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/11.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [PULL 22/49] ati-vga: Add scissor clipping register support
2026-03-08 22:34 ` [PULL 22/49] ati-vga: Add scissor clipping register support Philippe Mathieu-Daudé
@ 2026-03-09 19:29 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 52+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-03-09 19:29 UTC (permalink / raw)
To: qemu-devel, Chad Jablonski, BALATON Zoltan
Hi,
On 8/3/26 23:34, Philippe Mathieu-Daudé wrote:
> From: Chad Jablonski <chad@jablonski.xyz>
>
> Implement read and write operations on SC_TOP_LEFT, SC_BOTTOM_RIGHT,
> and SRC_SC_BOTTOM_RIGHT registers. These registers are also updated
> when the src and/or dst clipping fields on DP_GUI_MASTER_CNTL are set
> to default clipping.
>
> Scissor clipping is used when rendering text in X.org. The r128 driver
> sends host data much wider than is necessary to draw a glyph and cuts it
> down to size using clipping before rendering. The actual clipping
> implementation follows in a future patch.
>
> This also includes a very minor refactor of the combined
> default_sc_bottom_right field in the registers struct to
> default_sc_bottom and default_sc_right. This was done to
> stay consistent with the other scissor registers and prevent repeated
> masking and extraction.
>
> Signed-off-by: Chad Jablonski <chad@jablonski.xyz>
> Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
> Message-ID: <20260303024730.1489136-7-chad@jablonski.xyz>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/display/ati_int.h | 9 +++++-
> hw/display/ati_regs.h | 2 ++
> hw/display/ati.c | 70 +++++++++++++++++++++++++++++++++++++++++--
> 3 files changed, 78 insertions(+), 3 deletions(-)
> diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h
> index 0a0825db048..3999edb9b71 100644
> --- a/hw/display/ati_regs.h
> +++ b/hw/display/ati_regs.h
> @@ -397,6 +397,8 @@
> #define GMC_DST_PITCH_OFFSET_CNTL 0x00000002
> #define GMC_SRC_CLIP_DEFAULT 0x00000000
> #define GMC_DST_CLIP_DEFAULT 0x00000000
> +#define GMC_SRC_CLIPPING 0x00000004
> +#define GMC_DST_CLIPPING 0x00000008
> #define GMC_BRUSH_SOLIDCOLOR 0x000000d0
> #define GMC_SRC_DSTCOLOR 0x00003000
> #define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000
> diff --git a/hw/display/ati.c b/hw/display/ati.c
> index 26fc74b19b3..6cf243bcf95 100644
> --- a/hw/display/ati.c
> +++ b/hw/display/ati.c
> @@ -514,7 +514,32 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr, unsigned int size)
> val |= s->regs.default_tile << 16;
> break;
> case DEFAULT_SC_BOTTOM_RIGHT:
> - val = s->regs.default_sc_bottom_right;
> + val = (s->regs.default_sc_bottom << 16) |
> + s->regs.default_sc_right;
Coverity is reporting an integer handling issues (SIGN_EXTENSION,
CID 1645615):
>>> CID 1645615: Integer handling issues (SIGN_EXTENSION)
>>> Suspicious implicit sign extension: "s->regs.default_sc_bottom"
with type "uint16_t" (16 bits, unsigned) is promoted in
"(s->regs.default_sc_bottom << 16) | s->regs.default_sc_right" to type
"int" (32 bits, signed), then sign-extended to type "unsigned long" (64
bits, unsigned). If "(s->regs.default_sc_bottom << 16) |
s->regs.default_sc_right" is greater than 0x7FFFFFFF, the upper bits of
the result will all be 1.
Do you mind posting a fix?
Thanks,
Phil.
^ permalink raw reply [flat|nested] 52+ messages in thread
end of thread, other threads:[~2026-03-09 19:29 UTC | newest]
Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-08 22:33 [PULL 00/49] Misc HW patches for 2026-03-08 Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 01/49] hw/i386/pc: Remove deprecated pc-q35-3.0 and pc-i440fx-3.0 machines Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 02/49] hw/i386/pc: Remove pc_compat_3_0[] array Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 03/49] target/i386/kvm: Remove X86CPU::hyperv_synic_kvm_only field Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 04/49] hw/core/machine: Remove the hw_compat_3_0[] array Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 05/49] meson: Include various directories providing stubs before libqemuutil Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 06/49] hw/acpi: Move acpi_send_event() function out of acpi_interface.c Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 07/49] hw/acpi: Move qbus_build_aml() " Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 08/49] hw/acpi: Always link QOM interfaces with system binaries Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 09/49] hw/nvram: Build fw_cfg-acpi.c once Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 10/49] hw/acpi: Build stubs once Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 11/49] hw/net: " Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 12/49] hw/*: " Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 13/49] semihosting: " Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 14/49] hw/s390x/s390-pci-vfio: Avoid including CONFIG_DEVICES in hw/ header Philippe Mathieu-Daudé
2026-03-08 22:33 ` [PULL 15/49] hw/misc/ivshmem-pci: Handle error from kvm_irqchip_add_irqfd_notifier_gsi() Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 16/49] hw/i386: drop unused PC_CPU_MODEL_IDS macro Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 17/49] ati-vga: Fix framebuffer mapping by using hardware-correct aperture sizes Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 18/49] ati-vga: Fix DST_PITCH and SRC_PITCH reads Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 19/49] ati-vga: Read aliased values from DP_GUI_MASTER_CNTL Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 20/49] ati-vga: Latch src and dst pitch and offset on master_cntl default Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 21/49] ati-vga: Implement foreground and background color register writes Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 22/49] ati-vga: Add scissor clipping register support Philippe Mathieu-Daudé
2026-03-09 19:29 ` Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 23/49] ati-vga: Remove dst_x/y updates after blit Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 24/49] ati-vga: Consolidate dirty region tracking in ati_2d_blt Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 25/49] hw/net/xilinx_ethlite: Check for oversized TX packets Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 26/49] MAINTAINERS: Replace @tuxfamily.org address Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 27/49] ui/cocoa: Do not automatically zoom for HiDPI Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 28/49] hw/uefi: add variable digest to vmstate Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 29/49] hw/net/xilinx_axienet: Prevent writes to PHY Identification registers Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 30/49] MAINTAINERS: Update the maintainer for the CHRP NVRAM section Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 31/49] hw/arm/Kconfig: Fix serial selection for NPCM8XX Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 32/49] hw/char/{diva-gsp, serial-pci-multi}: Fix deinitialization order Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 33/49] hw/arm/aspeed_ast27x0-{ssp, tsp}: Do not access SerialMM internals directly Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 34/49] util/fifo8: Make all read-only methods const-correct Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 35/49] hw/char/serial: Remove explicit cast from void pointer Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 36/49] hw/char/serial: Prefer fifo8 methods over open-coding Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 37/49] hw/char/serial: Reuse fifo8_num_used() Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 38/49] hw/char/serial: Remove unhelpful comment Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 39/49] hw/char/serial: Add constants for Line Control Register Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 40/49] hw/char/serial: Remove redundant reset Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 41/49] hw/char/serial: Avoid implicit conversion when tracing Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 42/49] hppa: Introduce HPPACPUDef Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 43/49] hppa: Get physical address space bits from HPPACPUDef Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 44/49] hppa: Use 44 bit physical addresses for PA-8700 Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 45/49] ati-vga: Allow setting EDID parameters directly Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 46/49] hw/m68k/mcf_intc: Use qdev input gpios for input IRQs Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 47/49] audio/jack: Fix use of qemu_thread_set_name() on macOS Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 48/49] hw/hppa: Avoid leaking a diva-gsp device Philippe Mathieu-Daudé
2026-03-08 22:34 ` [PULL 49/49] hw/char: Drop disable property of Diva GSP card Philippe Mathieu-Daudé
2026-03-09 12:14 ` [PULL 00/49] Misc HW patches for 2026-03-08 Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox