* [PATCH v11 0/3] ramfb: Add property to control if load the romfile
@ 2025-07-17 10:09 Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 1/3] " Shaoqin Huang
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Shaoqin Huang @ 2025-07-17 10:09 UTC (permalink / raw)
To: qemu-arm, Daniel P. Berrangé, Peter Maydell, Gerd Hoffmann,
Eric Auger, Paolo Bonzini, qemu-devel
Cc: Zhao Liu, Shaoqin Huang, Alex Williamson, Cédric Le Goater,
Eduardo Habkost, Marcel Apfelbaum, Michael S. Tsirkin,
Philippe Mathieu-Daudé, Richard Henderson, Sergio Lopez,
Yanan Wang
Currently the ramfb device loads the vgabios-ramfb.bin unconditionally, but only
the x86 need the vgabios-ramfb.bin, this can cause that when use the
release package on arm64 it can't find the vgabios-ramfb.bin.
Because only seabios will use the vgabios-ramfb.bin, load the rom logic
is x86-specific. For other !x86 platforms, the edk2 ships an EFI driver
for ramfb, so they don't need to load the romfile.
So add a new property use-legacy-x86-rom in both ramfb and vfio_pci
device, because the vfio display also use the ramfb_setup() to load
the vgabios-ramfb.bin file.
After have this property, the machine type can set the compatibility to
not load the vgabios-ramfb.bin if the arch doesn't need it.
Then I set the use_legacy_x86_rom property to false by default, and only set it
to true on x86 since only x86 will need it.
At the same time, set the "use-legacy-x86-rom" property to true on those
historical versioned machine types in order to avoid the memory layout
being changed.
Changelog:
---------
v10 -> v11:
- Move TYPE* from hw/vfio/pci.h to hw/vfio/types.h
v9 -> v10:
- Fix the long line.
- Add the reviewed-by and ack.
v8 -> v9:
- Improve the commit message.
v7 -> v8:
- Set the property in microvm machine type.
v6 -> v7:
- Set the property into hw_compat_10_0 instead of hw_compat_9_2.
v5 -> v6:
- Set the property to true on those historical versioned machine types.
v4 -> v5:
- Fix some typo error.
- Set the property in piix machine type.
v3 -> v4:
- Set the new property to false by default, only set it to true on x86.
v2 -> v3:
- Fix the underscore error.
- Add a new patch to set the property in arm compatibility.
v1 -> v2:
- Change the property name.
v9: https://lore.kernel.org/all/20250704030315.2181235-1-shahuang@redhat.com/
v7: https://lore.kernel.org/all/20250702085616.2172722-1-shahuang@redhat.com/
v6: https://lore.kernel.org/all/20250701030549.2153331-1-shahuang@redhat.com/
v5: https://lore.kernel.org/all/20250626034526.2136585-1-shahuang@redhat.com/
v4: https://lore.kernel.org/all/20250617030521.2109305-1-shahuang@redhat.com/
v3: https://lore.kernel.org/all/20250609073408.2083831-1-shahuang@redhat.com/
v2: https://lore.kernel.org/all/20250606070234.2063451-1-shahuang@redhat.com/
v1: https://lore.kernel.org/all/20250605030351.2056571-1-shahuang@redhat.com/
Shaoqin Huang (3):
ramfb: Add property to control if load the romfile
vfio: Move the TYPE_* to hw/vfio/types.h
hw/i386: Add the ramfb romfile compatibility
hw/core/machine.c | 2 ++
hw/display/ramfb-standalone.c | 5 ++++-
hw/display/ramfb-stubs.c | 2 +-
hw/display/ramfb.c | 6 ++++--
hw/i386/microvm.c | 3 +++
hw/i386/pc_piix.c | 10 ++++++++++
hw/i386/pc_q35.c | 3 +++
hw/vfio/display.c | 4 ++--
hw/vfio/pci.c | 2 ++
hw/vfio/pci.h | 11 ++---------
hw/vfio/types.h | 21 +++++++++++++++++++++
include/hw/display/ramfb.h | 2 +-
12 files changed, 55 insertions(+), 16 deletions(-)
create mode 100644 hw/vfio/types.h
--
2.40.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v11 1/3] ramfb: Add property to control if load the romfile
2025-07-17 10:09 [PATCH v11 0/3] ramfb: Add property to control if load the romfile Shaoqin Huang
@ 2025-07-17 10:09 ` Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility Shaoqin Huang
2 siblings, 0 replies; 6+ messages in thread
From: Shaoqin Huang @ 2025-07-17 10:09 UTC (permalink / raw)
To: qemu-arm, Daniel P. Berrangé, Peter Maydell, Gerd Hoffmann,
Eric Auger, Paolo Bonzini, qemu-devel
Cc: Zhao Liu, Shaoqin Huang, Eric Auger, Alex Williamson,
Cédric Le Goater
Currently the ramfb device loads the vgabios-ramfb.bin unconditionally,
but only the x86 need the vgabios-ramfb.bin, this can cause that when
use the release package on arm64 it can't find the vgabios-ramfb.bin.
Because only seabios will use the vgabios-ramfb.bin, load the rom logic
is x86-specific. For other !x86 platforms, the edk2 ships an EFI driver
for ramfb, so they don't need to load the romfile.
So add a new property use-legacy-x86-rom in both ramfb and vfio_pci
device, because the vfio display also use the ramfb_setup() to load
the vgabios-ramfb.bin file.
After have this property, the machine type can set the compatibility to
not load the vgabios-ramfb.bin if the arch doesn't need it.
For now the default value is true but it will be turned off by default
in subsequent patch when compats get properly handled.
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
---
hw/display/ramfb-standalone.c | 5 ++++-
hw/display/ramfb-stubs.c | 2 +-
hw/display/ramfb.c | 6 ++++--
hw/vfio/display.c | 4 ++--
hw/vfio/pci.c | 2 ++
hw/vfio/pci.h | 1 +
include/hw/display/ramfb.h | 2 +-
7 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c
index 08f2d5db4e..82d8c69f89 100644
--- a/hw/display/ramfb-standalone.c
+++ b/hw/display/ramfb-standalone.c
@@ -17,6 +17,7 @@ struct RAMFBStandaloneState {
QemuConsole *con;
RAMFBState *state;
bool migrate;
+ bool use_legacy_x86_rom;
};
static void display_update_wrapper(void *dev)
@@ -39,7 +40,7 @@ static void ramfb_realizefn(DeviceState *dev, Error **errp)
RAMFBStandaloneState *ramfb = RAMFB(dev);
ramfb->con = graphic_console_init(dev, 0, &wrapper_ops, dev);
- ramfb->state = ramfb_setup(errp);
+ ramfb->state = ramfb_setup(ramfb->use_legacy_x86_rom, errp);
}
static bool migrate_needed(void *opaque)
@@ -62,6 +63,8 @@ static const VMStateDescription ramfb_dev_vmstate = {
static const Property ramfb_properties[] = {
DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true),
+ DEFINE_PROP_BOOL("use-legacy-x86-rom", RAMFBStandaloneState,
+ use_legacy_x86_rom, true),
};
static void ramfb_class_initfn(ObjectClass *klass, const void *data)
diff --git a/hw/display/ramfb-stubs.c b/hw/display/ramfb-stubs.c
index cf64733b10..b83551357b 100644
--- a/hw/display/ramfb-stubs.c
+++ b/hw/display/ramfb-stubs.c
@@ -8,7 +8,7 @@ void ramfb_display_update(QemuConsole *con, RAMFBState *s)
{
}
-RAMFBState *ramfb_setup(Error **errp)
+RAMFBState *ramfb_setup(bool romfile, Error **errp)
{
error_setg(errp, "ramfb support not available");
return NULL;
diff --git a/hw/display/ramfb.c b/hw/display/ramfb.c
index 8c0f907673..9a17d97d07 100644
--- a/hw/display/ramfb.c
+++ b/hw/display/ramfb.c
@@ -135,7 +135,7 @@ const VMStateDescription ramfb_vmstate = {
}
};
-RAMFBState *ramfb_setup(Error **errp)
+RAMFBState *ramfb_setup(bool romfile, Error **errp)
{
FWCfgState *fw_cfg = fw_cfg_find();
RAMFBState *s;
@@ -147,7 +147,9 @@ RAMFBState *ramfb_setup(Error **errp)
s = g_new0(RAMFBState, 1);
- rom_add_vga("vgabios-ramfb.bin");
+ if (romfile) {
+ rom_add_vga("vgabios-ramfb.bin");
+ }
fw_cfg_add_file_callback(fw_cfg, "etc/ramfb",
NULL, ramfb_fw_cfg_write, s,
&s->cfg, sizeof(s->cfg), false);
diff --git a/hw/vfio/display.c b/hw/vfio/display.c
index 9c6f5aa265..faacd9019a 100644
--- a/hw/vfio/display.c
+++ b/hw/vfio/display.c
@@ -365,7 +365,7 @@ static bool vfio_display_dmabuf_init(VFIOPCIDevice *vdev, Error **errp)
&vfio_display_dmabuf_ops,
vdev);
if (vdev->enable_ramfb) {
- vdev->dpy->ramfb = ramfb_setup(errp);
+ vdev->dpy->ramfb = ramfb_setup(vdev->use_legacy_x86_rom, errp);
if (!vdev->dpy->ramfb) {
return false;
}
@@ -494,7 +494,7 @@ static bool vfio_display_region_init(VFIOPCIDevice *vdev, Error **errp)
&vfio_display_region_ops,
vdev);
if (vdev->enable_ramfb) {
- vdev->dpy->ramfb = ramfb_setup(errp);
+ vdev->dpy->ramfb = ramfb_setup(vdev->use_legacy_x86_rom, errp);
if (!vdev->dpy->ramfb) {
return false;
}
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index fa25bded25..6547a95ccd 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3710,6 +3710,8 @@ static const TypeInfo vfio_pci_dev_info = {
static const Property vfio_pci_dev_nohotplug_properties[] = {
DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false),
+ DEFINE_PROP_BOOL("use-legacy-x86-rom", VFIOPCIDevice,
+ use_legacy_x86_rom, true),
DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate,
ON_OFF_AUTO_AUTO),
};
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index 5ba7330b27..97319670b2 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -188,6 +188,7 @@ struct VFIOPCIDevice {
bool no_kvm_ioeventfd;
bool no_vfio_ioeventfd;
bool enable_ramfb;
+ bool use_legacy_x86_rom;
OnOffAuto ramfb_migrate;
bool defer_kvm_irq_routing;
bool clear_parent_atomics_on_exit;
diff --git a/include/hw/display/ramfb.h b/include/hw/display/ramfb.h
index a7e0019144..172aa6dc89 100644
--- a/include/hw/display/ramfb.h
+++ b/include/hw/display/ramfb.h
@@ -6,7 +6,7 @@
/* ramfb.c */
typedef struct RAMFBState RAMFBState;
void ramfb_display_update(QemuConsole *con, RAMFBState *s);
-RAMFBState *ramfb_setup(Error **errp);
+RAMFBState *ramfb_setup(bool romfile, Error **errp);
extern const VMStateDescription ramfb_vmstate;
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h
2025-07-17 10:09 [PATCH v11 0/3] ramfb: Add property to control if load the romfile Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 1/3] " Shaoqin Huang
@ 2025-07-17 10:09 ` Shaoqin Huang
2025-07-17 14:18 ` Zhao Liu
2025-07-17 10:09 ` [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility Shaoqin Huang
2 siblings, 1 reply; 6+ messages in thread
From: Shaoqin Huang @ 2025-07-17 10:09 UTC (permalink / raw)
To: qemu-arm, Daniel P. Berrangé, Peter Maydell, Gerd Hoffmann,
Eric Auger, Paolo Bonzini, qemu-devel
Cc: Zhao Liu, Shaoqin Huang, Alex Williamson, Cédric Le Goater
Move the TYPE_* to a new file hw/vfio/types.h because the
TYPE_VFIO_PCI will be used in later patch, but directly include the
hw/vfio/pci.h can cause some compilation error when cross build the
windows version.
The hw/vfio/types.h can be included to mitigate that problem.
Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
---
hw/vfio/pci.h | 10 +---------
hw/vfio/types.h | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 9 deletions(-)
create mode 100644 hw/vfio/types.h
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index 97319670b2..c193ba6659 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -14,6 +14,7 @@
#include "system/memory.h"
#include "hw/pci/pci_device.h"
+#include "hw/vfio/types.h"
#include "hw/vfio/vfio-device.h"
#include "hw/vfio/vfio-region.h"
#include "qemu/event_notifier.h"
@@ -119,17 +120,8 @@ typedef struct VFIOMSIXInfo {
MemoryRegion *pba_region;
} VFIOMSIXInfo;
-/*
- * TYPE_VFIO_PCI_BASE is an abstract type used to share code
- * between VFIO implementations that use a kernel driver
- * with those that use user sockets.
- */
-#define TYPE_VFIO_PCI_BASE "vfio-pci-base"
OBJECT_DECLARE_SIMPLE_TYPE(VFIOPCIDevice, VFIO_PCI_BASE)
-#define TYPE_VFIO_PCI "vfio-pci"
-/* TYPE_VFIO_PCI shares struct VFIOPCIDevice. */
-
struct VFIOPCIDevice {
PCIDevice pdev;
VFIODevice vbasedev;
diff --git a/hw/vfio/types.h b/hw/vfio/types.h
new file mode 100644
index 0000000000..fa20c29b9f
--- /dev/null
+++ b/hw/vfio/types.h
@@ -0,0 +1,21 @@
+/*
+ * VFIO types definition
+ *
+ * Copyright Red Hat, Inc. 2025
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#ifndef HW_VFIO_VFIO_TYPES_H
+#define HW_VFIO_VFIO_TYPES_H
+
+/*
+ * TYPE_VFIO_PCI_BASE is an abstract type used to share code
+ * between VFIO implementations that use a kernel driver
+ * with those that use user sockets.
+ */
+#define TYPE_VFIO_PCI_BASE "vfio-pci-base"
+
+#define TYPE_VFIO_PCI "vfio-pci"
+/* TYPE_VFIO_PCI shares struct VFIOPCIDevice. */
+
+#endif /* HW_VFIO_VFIO_TYPES_H */
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility
2025-07-17 10:09 [PATCH v11 0/3] ramfb: Add property to control if load the romfile Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 1/3] " Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h Shaoqin Huang
@ 2025-07-17 10:09 ` Shaoqin Huang
2025-07-17 15:19 ` Cédric Le Goater
2 siblings, 1 reply; 6+ messages in thread
From: Shaoqin Huang @ 2025-07-17 10:09 UTC (permalink / raw)
To: qemu-arm, Daniel P. Berrangé, Peter Maydell, Gerd Hoffmann,
Eric Auger, Paolo Bonzini, qemu-devel
Cc: Zhao Liu, Shaoqin Huang, Michael S . Tsirkin, Eric Auger,
Eduardo Habkost, Marcel Apfelbaum, Philippe Mathieu-Daudé,
Yanan Wang, Sergio Lopez, Richard Henderson, Alex Williamson,
Cédric Le Goater
ramfb is a sysbus device so it can only used for machine types where it
is explicitly enabled:
# git grep machine_class_allow_dynamic_sysbus_dev.*TYPE_RAMFB_DEVICE
hw/arm/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
TYPE_RAMFB_DEVICE);
hw/i386/microvm.c: machine_class_allow_dynamic_sysbus_dev(mc,
TYPE_RAMFB_DEVICE);
hw/i386/pc_piix.c: machine_class_allow_dynamic_sysbus_dev(m,
TYPE_RAMFB_DEVICE);
hw/i386/pc_q35.c: machine_class_allow_dynamic_sysbus_dev(m,
TYPE_RAMFB_DEVICE);
hw/loongarch/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
TYPE_RAMFB_DEVICE);
hw/riscv/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
TYPE_RAMFB_DEVICE);
So these six are the only machine types we have to worry about.
The three x86 machine types (pc, q35, microvm) will actually use the rom
(when booting with seabios).
For arm/riscv/loongarch virt we want to disable the rom.
This patch sets ramfb romfile option to false by default, except for x86
machines types (pc, q35, microvm) which need the rom file when booting
with seabios and machine types <= 10.0 (handling the case of arm virt,
for compat reasons).
At the same time, set the "use-legacy-x86-rom" property to true on those
historical versioned machine types in order to avoid the memory layout
being changed.
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
---
hw/core/machine.c | 2 ++
hw/display/ramfb-standalone.c | 2 +-
hw/i386/microvm.c | 3 +++
hw/i386/pc_piix.c | 10 ++++++++++
hw/i386/pc_q35.c | 3 +++
hw/vfio/pci.c | 2 +-
6 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/hw/core/machine.c b/hw/core/machine.c
index e869821b22..a7043e2a34 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -39,6 +39,8 @@
GlobalProperty hw_compat_10_0[] = {
{ "scsi-hd", "dpofua", "off" },
+ { "ramfb", "use-legacy-x86-rom", "true"},
+ { "vfio-pci", "use-legacy-x86-rom", "true" },
};
const size_t hw_compat_10_0_len = G_N_ELEMENTS(hw_compat_10_0);
diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c
index 82d8c69f89..72b2071aed 100644
--- a/hw/display/ramfb-standalone.c
+++ b/hw/display/ramfb-standalone.c
@@ -64,7 +64,7 @@ static const VMStateDescription ramfb_dev_vmstate = {
static const Property ramfb_properties[] = {
DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true),
DEFINE_PROP_BOOL("use-legacy-x86-rom", RAMFBStandaloneState,
- use_legacy_x86_rom, true),
+ use_legacy_x86_rom, false),
};
static void ramfb_class_initfn(ObjectClass *klass, const void *data)
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index e0daf0d4fc..d90b69a162 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -49,6 +49,7 @@
#include "hw/acpi/generic_event_device.h"
#include "hw/pci-host/gpex.h"
#include "hw/usb/xhci.h"
+#include "hw/vfio/types.h"
#include "elf.h"
#include "kvm/kvm_i386.h"
@@ -633,6 +634,8 @@ GlobalProperty microvm_properties[] = {
* so reserving io space is not going to work. Turn it off.
*/
{ "pcie-root-port", "io-reserve", "0" },
+ { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
+ { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },
};
static void microvm_class_init(ObjectClass *oc, const void *data)
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index ea7572e783..6b829ad9fb 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -49,6 +49,7 @@
#include "hw/i2c/smbus_eeprom.h"
#include "system/memory.h"
#include "hw/acpi/acpi.h"
+#include "hw/vfio/types.h"
#include "qapi/error.h"
#include "qemu/error-report.h"
#include "system/xen.h"
@@ -77,6 +78,13 @@ static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
#endif
+static GlobalProperty pc_piix_compat_defaults[] = {
+ { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
+ { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },
+};
+static const size_t pc_piix_compat_defaults_len =
+ G_N_ELEMENTS(pc_piix_compat_defaults);
+
/*
* Return the global irq number corresponding to a given device irq
* pin. We could also use the bus number to have a more precise mapping.
@@ -482,6 +490,8 @@ static void pc_i440fx_machine_options(MachineClass *m)
pc_set_south_bridge);
object_class_property_set_description(oc, "x-south-bridge",
"Use a different south bridge than PIIX3");
+ compat_props_add(m->compat_props,
+ pc_piix_compat_defaults, pc_piix_compat_defaults_len);
}
static void pc_i440fx_machine_10_1_options(MachineClass *m)
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 33211b1876..01f4f73713 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -45,6 +45,7 @@
#include "hw/i386/pc.h"
#include "hw/i386/amd_iommu.h"
#include "hw/i386/intel_iommu.h"
+#include "hw/vfio/types.h"
#include "hw/virtio/virtio-iommu.h"
#include "hw/display/ramfb.h"
#include "hw/ide/pci.h"
@@ -67,6 +68,8 @@
static GlobalProperty pc_q35_compat_defaults[] = {
{ TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "39" },
+ { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
+ { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },
};
static const size_t pc_q35_compat_defaults_len =
G_N_ELEMENTS(pc_q35_compat_defaults);
diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
index 6547a95ccd..b4923e4710 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -3711,7 +3711,7 @@ static const TypeInfo vfio_pci_dev_info = {
static const Property vfio_pci_dev_nohotplug_properties[] = {
DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false),
DEFINE_PROP_BOOL("use-legacy-x86-rom", VFIOPCIDevice,
- use_legacy_x86_rom, true),
+ use_legacy_x86_rom, false),
DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate,
ON_OFF_AUTO_AUTO),
};
--
2.40.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h
2025-07-17 10:09 ` [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h Shaoqin Huang
@ 2025-07-17 14:18 ` Zhao Liu
0 siblings, 0 replies; 6+ messages in thread
From: Zhao Liu @ 2025-07-17 14:18 UTC (permalink / raw)
To: Shaoqin Huang
Cc: qemu-arm, Daniel P. Berrangé, Peter Maydell, Gerd Hoffmann,
Eric Auger, Paolo Bonzini, qemu-devel, Alex Williamson,
Cédric Le Goater
On Thu, Jul 17, 2025 at 06:09:40AM -0400, Shaoqin Huang wrote:
> Date: Thu, 17 Jul 2025 06:09:40 -0400
> From: Shaoqin Huang <shahuang@redhat.com>
> Subject: [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h
>
> Move the TYPE_* to a new file hw/vfio/types.h because the
> TYPE_VFIO_PCI will be used in later patch, but directly include the
> hw/vfio/pci.h can cause some compilation error when cross build the
> windows version.
>
> The hw/vfio/types.h can be included to mitigate that problem.
>
> Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
> ---
> hw/vfio/pci.h | 10 +---------
> hw/vfio/types.h | 21 +++++++++++++++++++++
> 2 files changed, 22 insertions(+), 9 deletions(-)
> create mode 100644 hw/vfio/types.h
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility
2025-07-17 10:09 ` [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility Shaoqin Huang
@ 2025-07-17 15:19 ` Cédric Le Goater
0 siblings, 0 replies; 6+ messages in thread
From: Cédric Le Goater @ 2025-07-17 15:19 UTC (permalink / raw)
To: Shaoqin Huang, qemu-arm, Daniel P. Berrangé, Peter Maydell,
Gerd Hoffmann, Eric Auger, Paolo Bonzini, qemu-devel
Cc: Zhao Liu, Michael S . Tsirkin, Eric Auger, Eduardo Habkost,
Marcel Apfelbaum, Philippe Mathieu-Daudé, Yanan Wang,
Sergio Lopez, Richard Henderson, Alex Williamson
On 7/17/25 12:09, Shaoqin Huang wrote:
> ramfb is a sysbus device so it can only used for machine types where it
> is explicitly enabled:
>
> # git grep machine_class_allow_dynamic_sysbus_dev.*TYPE_RAMFB_DEVICE
> hw/arm/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
> TYPE_RAMFB_DEVICE);
> hw/i386/microvm.c: machine_class_allow_dynamic_sysbus_dev(mc,
> TYPE_RAMFB_DEVICE);
> hw/i386/pc_piix.c: machine_class_allow_dynamic_sysbus_dev(m,
> TYPE_RAMFB_DEVICE);
> hw/i386/pc_q35.c: machine_class_allow_dynamic_sysbus_dev(m,
> TYPE_RAMFB_DEVICE);
> hw/loongarch/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
> TYPE_RAMFB_DEVICE);
> hw/riscv/virt.c: machine_class_allow_dynamic_sysbus_dev(mc,
> TYPE_RAMFB_DEVICE);
>
> So these six are the only machine types we have to worry about.
>
> The three x86 machine types (pc, q35, microvm) will actually use the rom
> (when booting with seabios).
>
> For arm/riscv/loongarch virt we want to disable the rom.
>
> This patch sets ramfb romfile option to false by default, except for x86
> machines types (pc, q35, microvm) which need the rom file when booting
> with seabios and machine types <= 10.0 (handling the case of arm virt,
> for compat reasons).
>
> At the same time, set the "use-legacy-x86-rom" property to true on those
> historical versioned machine types in order to avoid the memory layout
> being changed.
>
> Acked-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
> Reviewed-by: Eric Auger <eric.auger@redhat.com>
> Signed-off-by: Shaoqin Huang <shahuang@redhat.com>
> ---
> hw/core/machine.c | 2 ++
> hw/display/ramfb-standalone.c | 2 +-
> hw/i386/microvm.c | 3 +++
> hw/i386/pc_piix.c | 10 ++++++++++
> hw/i386/pc_q35.c | 3 +++
> hw/vfio/pci.c | 2 +-
> 6 files changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/hw/core/machine.c b/hw/core/machine.c
> index e869821b22..a7043e2a34 100644
> --- a/hw/core/machine.c
> +++ b/hw/core/machine.c
> @@ -39,6 +39,8 @@
>
> GlobalProperty hw_compat_10_0[] = {
> { "scsi-hd", "dpofua", "off" },
> + { "ramfb", "use-legacy-x86-rom", "true"},
> + { "vfio-pci", "use-legacy-x86-rom", "true" },
> };
> const size_t hw_compat_10_0_len = G_N_ELEMENTS(hw_compat_10_0);
>
> diff --git a/hw/display/ramfb-standalone.c b/hw/display/ramfb-standalone.c
> index 82d8c69f89..72b2071aed 100644
> --- a/hw/display/ramfb-standalone.c
> +++ b/hw/display/ramfb-standalone.c
> @@ -64,7 +64,7 @@ static const VMStateDescription ramfb_dev_vmstate = {
> static const Property ramfb_properties[] = {
> DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true),
> DEFINE_PROP_BOOL("use-legacy-x86-rom", RAMFBStandaloneState,
> - use_legacy_x86_rom, true),
> + use_legacy_x86_rom, false),
> };
>
> static void ramfb_class_initfn(ObjectClass *klass, const void *data)
> diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
> index e0daf0d4fc..d90b69a162 100644
> --- a/hw/i386/microvm.c
> +++ b/hw/i386/microvm.c
> @@ -49,6 +49,7 @@
> #include "hw/acpi/generic_event_device.h"
> #include "hw/pci-host/gpex.h"
> #include "hw/usb/xhci.h"
> +#include "hw/vfio/types.h"
>
> #include "elf.h"
> #include "kvm/kvm_i386.h"
> @@ -633,6 +634,8 @@ GlobalProperty microvm_properties[] = {
> * so reserving io space is not going to work. Turn it off.
> */
> { "pcie-root-port", "io-reserve", "0" },
> + { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
> + { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },
you could use the string literal "vfio-pci" directly here instead
of the TYPE_VFIO_PCI define and avoid the extra vfio header file.
Thanks,
C.
> };
>
> static void microvm_class_init(ObjectClass *oc, const void *data)
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index ea7572e783..6b829ad9fb 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -49,6 +49,7 @@
> #include "hw/i2c/smbus_eeprom.h"
> #include "system/memory.h"
> #include "hw/acpi/acpi.h"
> +#include "hw/vfio/types.h"
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "system/xen.h"
> @@ -77,6 +78,13 @@ static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
> static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
> #endif
>
> +static GlobalProperty pc_piix_compat_defaults[] = {
> + { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
> + { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },
> +};
> +static const size_t pc_piix_compat_defaults_len =
> + G_N_ELEMENTS(pc_piix_compat_defaults);
> +
> /*
> * Return the global irq number corresponding to a given device irq
> * pin. We could also use the bus number to have a more precise mapping.
> @@ -482,6 +490,8 @@ static void pc_i440fx_machine_options(MachineClass *m)
> pc_set_south_bridge);
> object_class_property_set_description(oc, "x-south-bridge",
> "Use a different south bridge than PIIX3");
> + compat_props_add(m->compat_props,
> + pc_piix_compat_defaults, pc_piix_compat_defaults_len);
> }
>
> static void pc_i440fx_machine_10_1_options(MachineClass *m)
> diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
> index 33211b1876..01f4f73713 100644
> --- a/hw/i386/pc_q35.c
> +++ b/hw/i386/pc_q35.c
> @@ -45,6 +45,7 @@
> #include "hw/i386/pc.h"
> #include "hw/i386/amd_iommu.h"
> #include "hw/i386/intel_iommu.h"
> +#include "hw/vfio/types.h"
> #include "hw/virtio/virtio-iommu.h"
> #include "hw/display/ramfb.h"
> #include "hw/ide/pci.h"
> @@ -67,6 +68,8 @@
>
> static GlobalProperty pc_q35_compat_defaults[] = {
> { TYPE_VIRTIO_IOMMU_PCI, "aw-bits", "39" },
> + { TYPE_RAMFB_DEVICE, "use-legacy-x86-rom", "true" },
> + { TYPE_VFIO_PCI, "use-legacy-x86-rom", "true" },> };> static const size_t pc_q35_compat_defaults_len =
> G_N_ELEMENTS(pc_q35_compat_defaults);
> diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c
> index 6547a95ccd..b4923e4710 100644
> --- a/hw/vfio/pci.c
> +++ b/hw/vfio/pci.c
> @@ -3711,7 +3711,7 @@ static const TypeInfo vfio_pci_dev_info = {
> static const Property vfio_pci_dev_nohotplug_properties[] = {
> DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false),
> DEFINE_PROP_BOOL("use-legacy-x86-rom", VFIOPCIDevice,
> - use_legacy_x86_rom, true),
> + use_legacy_x86_rom, false),
> DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate,
> ON_OFF_AUTO_AUTO),
> };
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-07-17 18:04 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-17 10:09 [PATCH v11 0/3] ramfb: Add property to control if load the romfile Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 1/3] " Shaoqin Huang
2025-07-17 10:09 ` [PATCH v11 2/3] vfio: Move the TYPE_* to hw/vfio/types.h Shaoqin Huang
2025-07-17 14:18 ` Zhao Liu
2025-07-17 10:09 ` [PATCH v11 3/3] hw/i386: Add the ramfb romfile compatibility Shaoqin Huang
2025-07-17 15:19 ` Cédric Le Goater
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).