mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 09:13:55 -06:00
vfio/igd: Refactor vfio_probe_igd_bar4_quirk into pci config quirk
The actual IO BAR4 write quirk in vfio_probe_igd_bar4_quirk was removed in previous change, leaving the function not matching its name, so move it into the newly introduced vfio_config_quirk_setup. There is no functional change in this commit. For now, to align with current legacy mode behavior, it returns and proceeds on error. Later it will fail on error after decoupling the quirks from legacy mode. Signed-off-by: Tomita Moeko <tomitamoeko@gmail.com> Reviewed-by: Alex Williamson <alex.williamson@redhat.com> Tested-by: Alex Williamson <alex.williamson@redhat.com> Reviewed-by: Corvin Köhne <c.koehne@beckhoff.com> Link: https://lore.kernel.org/qemu-devel/20250306180131.32970-7-tomitamoeko@gmail.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
b22ab580d2
commit
9267f96ad6
3 changed files with 18 additions and 11 deletions
|
@ -482,7 +482,8 @@ void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, bdsm_quirk, next);
|
QLIST_INSERT_HEAD(&vdev->bars[nr].quirks, bdsm_quirk, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
bool vfio_probe_igd_config_quirk(VFIOPCIDevice *vdev,
|
||||||
|
Error **errp G_GNUC_UNUSED)
|
||||||
{
|
{
|
||||||
g_autofree struct vfio_region_info *rom = NULL;
|
g_autofree struct vfio_region_info *rom = NULL;
|
||||||
int ret, gen;
|
int ret, gen;
|
||||||
|
@ -497,10 +498,10 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
* PCI bus address.
|
* PCI bus address.
|
||||||
*/
|
*/
|
||||||
if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) ||
|
if (!vfio_pci_is(vdev, PCI_VENDOR_ID_INTEL, PCI_ANY_ID) ||
|
||||||
!vfio_is_vga(vdev) || nr != 4 ||
|
!vfio_is_vga(vdev) ||
|
||||||
&vdev->pdev != pci_find_device(pci_device_root_bus(&vdev->pdev),
|
&vdev->pdev != pci_find_device(pci_device_root_bus(&vdev->pdev),
|
||||||
0, PCI_DEVFN(0x2, 0))) {
|
0, PCI_DEVFN(0x2, 0))) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -512,7 +513,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
if (gen == -1) {
|
if (gen == -1) {
|
||||||
error_report("IGD device %s is unsupported in legacy mode, "
|
error_report("IGD device %s is unsupported in legacy mode, "
|
||||||
"try SandyBridge or newer", vdev->vbasedev.name);
|
"try SandyBridge or newer", vdev->vbasedev.name);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -525,7 +526,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
if ((ret || !rom->size) && !vdev->pdev.romfile) {
|
if ((ret || !rom->size) && !vdev->pdev.romfile) {
|
||||||
error_report("IGD device %s has no ROM, legacy mode disabled",
|
error_report("IGD device %s has no ROM, legacy mode disabled",
|
||||||
vdev->vbasedev.name);
|
vdev->vbasedev.name);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -536,7 +537,7 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
error_report("IGD device %s hotplugged, ROM disabled, "
|
error_report("IGD device %s hotplugged, ROM disabled, "
|
||||||
"legacy mode disabled", vdev->vbasedev.name);
|
"legacy mode disabled", vdev->vbasedev.name);
|
||||||
vdev->rom_read_failed = true;
|
vdev->rom_read_failed = true;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
gmch = vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4);
|
gmch = vfio_pci_read_config(&vdev->pdev, IGD_GMCH, 4);
|
||||||
|
@ -550,21 +551,21 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
error_reportf_err(err, VFIO_MSG_PREFIX, vdev->vbasedev.name);
|
||||||
error_report("IGD device %s failed to enable VGA access, "
|
error_report("IGD device %s failed to enable VGA access, "
|
||||||
"legacy mode disabled", vdev->vbasedev.name);
|
"legacy mode disabled", vdev->vbasedev.name);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup OpRegion access */
|
/* Setup OpRegion access */
|
||||||
if (!vfio_pci_igd_setup_opregion(vdev, &err)) {
|
if (!vfio_pci_igd_setup_opregion(vdev, &err)) {
|
||||||
error_append_hint(&err, "IGD legacy mode disabled\n");
|
error_append_hint(&err, "IGD legacy mode disabled\n");
|
||||||
error_report_err(err);
|
error_report_err(err);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setup LPC bridge / Host bridge PCI IDs */
|
/* Setup LPC bridge / Host bridge PCI IDs */
|
||||||
if (!vfio_pci_igd_setup_lpc_bridge(vdev, &err)) {
|
if (!vfio_pci_igd_setup_lpc_bridge(vdev, &err)) {
|
||||||
error_append_hint(&err, "IGD legacy mode disabled\n");
|
error_append_hint(&err, "IGD legacy mode disabled\n");
|
||||||
error_report_err(err);
|
error_report_err(err);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -624,4 +625,6 @@ void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
}
|
}
|
||||||
|
|
||||||
trace_vfio_pci_igd_bdsm_enabled(vdev->vbasedev.name, (gms_size / MiB));
|
trace_vfio_pci_igd_bdsm_enabled(vdev->vbasedev.name, (gms_size / MiB));
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1119,6 +1119,11 @@ static void vfio_probe_rtl8168_bar2_quirk(VFIOPCIDevice *vdev, int nr)
|
||||||
*/
|
*/
|
||||||
bool vfio_config_quirk_setup(VFIOPCIDevice *vdev, Error **errp)
|
bool vfio_config_quirk_setup(VFIOPCIDevice *vdev, Error **errp)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_VFIO_IGD
|
||||||
|
if (!vfio_probe_igd_config_quirk(vdev, errp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1170,7 +1175,6 @@ void vfio_bar_quirk_setup(VFIOPCIDevice *vdev, int nr)
|
||||||
vfio_probe_rtl8168_bar2_quirk(vdev, nr);
|
vfio_probe_rtl8168_bar2_quirk(vdev, nr);
|
||||||
#ifdef CONFIG_VFIO_IGD
|
#ifdef CONFIG_VFIO_IGD
|
||||||
vfio_probe_igd_bar0_quirk(vdev, nr);
|
vfio_probe_igd_bar0_quirk(vdev, nr);
|
||||||
vfio_probe_igd_bar4_quirk(vdev, nr);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ bool vfio_add_virt_caps(VFIOPCIDevice *vdev, Error **errp);
|
||||||
void vfio_quirk_reset(VFIOPCIDevice *vdev);
|
void vfio_quirk_reset(VFIOPCIDevice *vdev);
|
||||||
VFIOQuirk *vfio_quirk_alloc(int nr_mem);
|
VFIOQuirk *vfio_quirk_alloc(int nr_mem);
|
||||||
void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, int nr);
|
void vfio_probe_igd_bar0_quirk(VFIOPCIDevice *vdev, int nr);
|
||||||
void vfio_probe_igd_bar4_quirk(VFIOPCIDevice *vdev, int nr);
|
bool vfio_probe_igd_config_quirk(VFIOPCIDevice *vdev, Error **errp);
|
||||||
|
|
||||||
extern const PropertyInfo qdev_prop_nv_gpudirect_clique;
|
extern const PropertyInfo qdev_prop_nv_gpudirect_clique;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue