Repo: https://github.com/lersek/edk2.git Branch: pci_resource_reserve
"OvmfPkg/PciHotPlugInitDxe" implements EFI_PCI_HOT_PLUG_INIT_PROTOCOL from the PI spec. Currently it returns fixed resource reservations (512B IO space and 2MB non-prefetchable 32-bit MMIO space) for all bridges. This is not flexible enough: (1) For PCI Express bridges (such as root ports and downstream ports), reserving any IO space is wasteful, and limits the number of ports. (This is because each such port can only accept one (multi-function) device, and because the 512B reservation is rounded up to 4KB, and because the IO space under OVMF/Q35 consists of 10 * 4KB.) (2) For hot-plugging PCI Express devices with large MMIO BARs into such ports, the reservation of only 2MB MMIO (and even that limited to non-prefetchable, hence 32-bit, address space) is insufficient. QEMU has recently gained the ability to control these reservation sizes on the command line. At this point the hints are only supported for the "pcie-root-port" device -- which implies the Q35 machine type, given that i440fx only supports conventional PCI, not PCI Express --, with the following properties: - pcie-root-port.bus-reserve=uint32 - pcie-root-port.io-reserve=size - pcie-root-port.mem-reserve=size - pcie-root-port.pref32-reserve=size - pcie-root-port.pref64-reserve=size The hints are exposed to the guest in the conventional config space of the device, using a vendor-specific capability (which is documented in the QEMU source tree; see all references in the individual patches). It is expected that, if any future hotplug controllers in QEMU gain the same ability, they will reuse the mechanism identically. This series generally implements the parsing of this capability in OvmfPkg/PciHotPlugInitDxe, and the translation thereof to the ACPI address space descriptor format that the Platform Init spec defines for EFI_PCI_HOT_PLUG_INIT_PROTOCOL.GetResourcePadding(). The first patch is for "MdePkg/IndustryStandard"; it introduces the vendor-specific capability header, from the PCI 2.3 spec. The rest of the patches is for OvmfPkg. Cc: Jordan Justen <[email protected]> Cc: Liming Gao <[email protected]> Cc: Marcel Apfelbaum <[email protected]> Cc: Michael D Kinney <[email protected]> Cc: Ruiyu Ni <[email protected]> Thanks Laszlo Laszlo Ersek (7): MdePkg/IndustryStandard/Pci23: add vendor-specific capability header OvmfPkg/IndustryStandard: define PCI Capabilities for QEMU's PCI Bridges OvmfPkg/PciHotPlugInitDxe: clean up protocol usage comment OvmfPkg/PciHotPlugInitDxe: clean up addr. range for non-prefetchable MMIO OvmfPkg/PciHotPlugInitDxe: generalize RESOURCE_PADDING composition OvmfPkg/PciHotPlugInitDxe: add helper functions for setting up paddings OvmfPkg/PciHotPlugInitDxe: translate QEMU's resource reservation hints MdePkg/Include/IndustryStandard/Pci23.h | 10 + OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h | 60 ++ OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c | 661 ++++++++++++++++++-- OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.inf | 6 +- 4 files changed, 674 insertions(+), 63 deletions(-) create mode 100644 OvmfPkg/Include/IndustryStandard/QemuPciBridgeCapabilities.h -- 2.14.1.3.gb7cf6e02401b _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

