mirror of https://github.com/acidanthera/audk.git
OvmfPkg/Virtio10Dxe: don't bind virtio-vga
Commit9399f68ae3
("OvmfPkg: Virtio10Dxe: non-transitional driver for virtio-1.0 PCI devices") created a "competition" between Virtio10Dxe and QemuVideoDxe for virtio-vga devices. The binding order between these drivers is unspecified, and the wrong order effectively breaks commit94210dc95e
("OvmfPkg: QemuVideoDxe: add virtio-vga support"). Thus, never bind virtio-vga in Virtio10Dxe; QemuVideoDxe provides better compatibility for guest OSes that insist on inheriting a linear framebuffer. Users who prefer the VirtIo GPU interface at boot time should specify virtio-gpu-pci, which is exactly virtio-vga, minus the VGA compatibility (such as the framebuffer). Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Ref: https://tianocore.acgmultimedia.com/show_bug.cgi?id=66 Fixes:9399f68ae3
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
442c2ab81e
commit
76569ca855
|
@ -822,6 +822,7 @@ Virtio10BindingSupported (
|
||||||
goto CloseProtocol;
|
goto CloseProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = EFI_UNSUPPORTED;
|
||||||
//
|
//
|
||||||
// Recognize non-transitional modern devices. Also, we'll have to parse the
|
// Recognize non-transitional modern devices. Also, we'll have to parse the
|
||||||
// PCI capability list, so make sure the CapabilityPtr field will be valid.
|
// PCI capability list, so make sure the CapabilityPtr field will be valid.
|
||||||
|
@ -832,9 +833,20 @@ Virtio10BindingSupported (
|
||||||
Pci.Hdr.RevisionID >= 0x01 &&
|
Pci.Hdr.RevisionID >= 0x01 &&
|
||||||
Pci.Device.SubsystemID >= 0x40 &&
|
Pci.Device.SubsystemID >= 0x40 &&
|
||||||
(Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0) {
|
(Pci.Hdr.Status & EFI_PCI_STATUS_CAPABILITY) != 0) {
|
||||||
Status = EFI_SUCCESS;
|
//
|
||||||
} else {
|
// The virtio-vga device is special. It can be driven both as a VGA device
|
||||||
Status = EFI_UNSUPPORTED;
|
// with a linear framebuffer, and through its underlying, modern,
|
||||||
|
// virtio-gpu-pci device, which has no linear framebuffer itself. For
|
||||||
|
// compatibility with guest OSes that insist on inheriting a linear
|
||||||
|
// framebuffer from the firmware, we should leave virtio-vga to
|
||||||
|
// QemuVideoDxe, and support only virtio-gpu-pci here.
|
||||||
|
//
|
||||||
|
// Both virtio-vga and virtio-gpu-pci have DeviceId 0x1050, but only the
|
||||||
|
// former has device class PCI_CLASS_DISPLAY_VGA.
|
||||||
|
//
|
||||||
|
if (Pci.Hdr.DeviceId != 0x1050 || !IS_PCI_VGA (&Pci)) {
|
||||||
|
Status = EFI_SUCCESS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseProtocol:
|
CloseProtocol:
|
||||||
|
|
Loading…
Reference in New Issue