vfio/pci: Consolidate VGA setup
Combine VGA discovery and registration. Quirks can have dependencies on BARs, so the quirks push out until after we've scanned the BARs. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Reviewed-by: Gerd Hoffmann <kraxel@redhat.com> Tested-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
4225f2b670
commit
182bca4592
|
@ -1452,29 +1452,6 @@ static void vfio_bars_setup(VFIOPCIDevice *vdev)
|
|||
for (i = 0; i < PCI_ROM_SLOT; i++) {
|
||||
vfio_bar_setup(vdev, i);
|
||||
}
|
||||
|
||||
if (vdev->vga) {
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_MEM].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_MEM],
|
||||
"vfio-vga-mmio@0xa0000",
|
||||
QEMU_PCI_VGA_MEM_SIZE);
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_IO_LO].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_LO],
|
||||
"vfio-vga-io@0x3b0",
|
||||
QEMU_PCI_VGA_IO_LO_SIZE);
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_IO_HI].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_HI],
|
||||
"vfio-vga-io@0x3c0",
|
||||
QEMU_PCI_VGA_IO_HI_SIZE);
|
||||
|
||||
pci_register_vga(&vdev->pdev, &vdev->vga->region[QEMU_PCI_VGA_MEM].mem,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_LO].mem,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_HI].mem);
|
||||
vfio_vga_quirk_setup(vdev);
|
||||
}
|
||||
}
|
||||
|
||||
static void vfio_bars_exit(VFIOPCIDevice *vdev)
|
||||
|
@ -2087,14 +2064,36 @@ int vfio_populate_vga(VFIOPCIDevice *vdev)
|
|||
vdev->vga->region[QEMU_PCI_VGA_MEM].nr = QEMU_PCI_VGA_MEM;
|
||||
QLIST_INIT(&vdev->vga->region[QEMU_PCI_VGA_MEM].quirks);
|
||||
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_MEM].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_MEM],
|
||||
"vfio-vga-mmio@0xa0000",
|
||||
QEMU_PCI_VGA_MEM_SIZE);
|
||||
|
||||
vdev->vga->region[QEMU_PCI_VGA_IO_LO].offset = QEMU_PCI_VGA_IO_LO_BASE;
|
||||
vdev->vga->region[QEMU_PCI_VGA_IO_LO].nr = QEMU_PCI_VGA_IO_LO;
|
||||
QLIST_INIT(&vdev->vga->region[QEMU_PCI_VGA_IO_LO].quirks);
|
||||
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_IO_LO].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_LO],
|
||||
"vfio-vga-io@0x3b0",
|
||||
QEMU_PCI_VGA_IO_LO_SIZE);
|
||||
|
||||
vdev->vga->region[QEMU_PCI_VGA_IO_HI].offset = QEMU_PCI_VGA_IO_HI_BASE;
|
||||
vdev->vga->region[QEMU_PCI_VGA_IO_HI].nr = QEMU_PCI_VGA_IO_HI;
|
||||
QLIST_INIT(&vdev->vga->region[QEMU_PCI_VGA_IO_HI].quirks);
|
||||
|
||||
memory_region_init_io(&vdev->vga->region[QEMU_PCI_VGA_IO_HI].mem,
|
||||
OBJECT(vdev), &vfio_vga_ops,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_HI],
|
||||
"vfio-vga-io@0x3c0",
|
||||
QEMU_PCI_VGA_IO_HI_SIZE);
|
||||
|
||||
pci_register_vga(&vdev->pdev, &vdev->vga->region[QEMU_PCI_VGA_MEM].mem,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_LO].mem,
|
||||
&vdev->vga->region[QEMU_PCI_VGA_IO_HI].mem);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2557,6 +2556,10 @@ static int vfio_initfn(PCIDevice *pdev)
|
|||
goto out_teardown;
|
||||
}
|
||||
|
||||
if (vdev->vga) {
|
||||
vfio_vga_quirk_setup(vdev);
|
||||
}
|
||||
|
||||
/* QEMU emulates all of MSI & MSIX */
|
||||
if (pdev->cap_present & QEMU_PCI_CAP_MSIX) {
|
||||
memset(vdev->emulated_config_bits + pdev->msix_cap, 0xff,
|
||||
|
|
Loading…
Reference in a new issue