mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 01:50:43 +00:00
ramfb: Add property to control if load the romfile
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> Message-ID: <20250717100941.2230408-2-shahuang@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
c079d3a31e
commit
350785d41d
@ -17,6 +17,7 @@ struct RAMFBStandaloneState {
|
|||||||
QemuConsole *con;
|
QemuConsole *con;
|
||||||
RAMFBState *state;
|
RAMFBState *state;
|
||||||
bool migrate;
|
bool migrate;
|
||||||
|
bool use_legacy_x86_rom;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void display_update_wrapper(void *dev)
|
static void display_update_wrapper(void *dev)
|
||||||
@ -39,7 +40,7 @@ static void ramfb_realizefn(DeviceState *dev, Error **errp)
|
|||||||
RAMFBStandaloneState *ramfb = RAMFB(dev);
|
RAMFBStandaloneState *ramfb = RAMFB(dev);
|
||||||
|
|
||||||
ramfb->con = graphic_console_init(dev, 0, &wrapper_ops, 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)
|
static bool migrate_needed(void *opaque)
|
||||||
@ -62,6 +63,8 @@ static const VMStateDescription ramfb_dev_vmstate = {
|
|||||||
|
|
||||||
static const Property ramfb_properties[] = {
|
static const Property ramfb_properties[] = {
|
||||||
DEFINE_PROP_BOOL("x-migrate", RAMFBStandaloneState, migrate, true),
|
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)
|
static void ramfb_class_initfn(ObjectClass *klass, const void *data)
|
||||||
|
@ -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");
|
error_setg(errp, "ramfb support not available");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -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();
|
FWCfgState *fw_cfg = fw_cfg_find();
|
||||||
RAMFBState *s;
|
RAMFBState *s;
|
||||||
@ -147,7 +147,9 @@ RAMFBState *ramfb_setup(Error **errp)
|
|||||||
|
|
||||||
s = g_new0(RAMFBState, 1);
|
s = g_new0(RAMFBState, 1);
|
||||||
|
|
||||||
|
if (romfile) {
|
||||||
rom_add_vga("vgabios-ramfb.bin");
|
rom_add_vga("vgabios-ramfb.bin");
|
||||||
|
}
|
||||||
fw_cfg_add_file_callback(fw_cfg, "etc/ramfb",
|
fw_cfg_add_file_callback(fw_cfg, "etc/ramfb",
|
||||||
NULL, ramfb_fw_cfg_write, s,
|
NULL, ramfb_fw_cfg_write, s,
|
||||||
&s->cfg, sizeof(s->cfg), false);
|
&s->cfg, sizeof(s->cfg), false);
|
||||||
|
@ -365,7 +365,7 @@ static bool vfio_display_dmabuf_init(VFIOPCIDevice *vdev, Error **errp)
|
|||||||
&vfio_display_dmabuf_ops,
|
&vfio_display_dmabuf_ops,
|
||||||
vdev);
|
vdev);
|
||||||
if (vdev->enable_ramfb) {
|
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) {
|
if (!vdev->dpy->ramfb) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -494,7 +494,7 @@ static bool vfio_display_region_init(VFIOPCIDevice *vdev, Error **errp)
|
|||||||
&vfio_display_region_ops,
|
&vfio_display_region_ops,
|
||||||
vdev);
|
vdev);
|
||||||
if (vdev->enable_ramfb) {
|
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) {
|
if (!vdev->dpy->ramfb) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3809,6 +3809,8 @@ static const TypeInfo vfio_pci_dev_info = {
|
|||||||
|
|
||||||
static const Property vfio_pci_dev_nohotplug_properties[] = {
|
static const Property vfio_pci_dev_nohotplug_properties[] = {
|
||||||
DEFINE_PROP_BOOL("ramfb", VFIOPCIDevice, enable_ramfb, false),
|
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,
|
DEFINE_PROP_ON_OFF_AUTO("x-ramfb-migrate", VFIOPCIDevice, ramfb_migrate,
|
||||||
ON_OFF_AUTO_AUTO),
|
ON_OFF_AUTO_AUTO),
|
||||||
};
|
};
|
||||||
|
@ -188,6 +188,7 @@ struct VFIOPCIDevice {
|
|||||||
bool no_kvm_ioeventfd;
|
bool no_kvm_ioeventfd;
|
||||||
bool no_vfio_ioeventfd;
|
bool no_vfio_ioeventfd;
|
||||||
bool enable_ramfb;
|
bool enable_ramfb;
|
||||||
|
bool use_legacy_x86_rom;
|
||||||
OnOffAuto ramfb_migrate;
|
OnOffAuto ramfb_migrate;
|
||||||
bool defer_kvm_irq_routing;
|
bool defer_kvm_irq_routing;
|
||||||
bool clear_parent_atomics_on_exit;
|
bool clear_parent_atomics_on_exit;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
/* ramfb.c */
|
/* ramfb.c */
|
||||||
typedef struct RAMFBState RAMFBState;
|
typedef struct RAMFBState RAMFBState;
|
||||||
void ramfb_display_update(QemuConsole *con, RAMFBState *s);
|
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;
|
extern const VMStateDescription ramfb_vmstate;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user