On 03/03/16 06:35, Ni, Ruiyu wrote: > > > Reviewed-by: Ruiyu Ni <[email protected]>
Awesome. Thank you for working with me through this! Thanks all for the reviews; committed as b07c96658132..014b472053ae. Cheers Laszlo >> -----Original Message----- >> From: Laszlo Ersek [mailto:[email protected]] >> Sent: Tuesday, March 1, 2016 6:22 PM >> To: [email protected] >> Cc: Ni, Ruiyu <[email protected]>; Justen, Jordan L >> <[email protected]>; Marcel Apfelbaum <[email protected]>; >> Kinney, Michael D <[email protected]> >> Subject: [PATCH v3 2/2] MdeModulePkg: PciHostBridgeDxe: don't assume >> extended config space >> >> The "pc" ("pc-i440fx-*") machine types of QEMU don't support extended >> config space. Accordingly, OVMF will use the following library instances >> in connection with the core PciHostBridgeDxe driver: >> >> BasePciSegmentLibPci [class: PciSegmentLib] >> BasePciLibCf8 [class: PciLib] >> BasePciCf8Lib [class: PciCf8Lib] >> >> Add a new field to the PCI_ROOT_BRIDGE structure so that >> RootBridgeIoCheckParameter() can catch config space offsets above 0xFF on >> such old (emulated) platforms. >> >> Cc: Ruiyu Ni <[email protected]> >> Cc: Jordan Justen <[email protected]> >> Cc: Marcel Apfelbaum <[email protected]> >> Cc: Michael Kinney <[email protected]> >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Laszlo Ersek <[email protected]> >> --- >> >> Notes: >> v3: >> - invert the meaning of the field: replace ExtendedConfigSpace with >> NoExtendedConfigSpace [Ray] >> >> v2: >> - replace the PCI config space "aperture" with a dedicated BOOLEAN flag >> called ExtendedConfigSpace [Ray] >> - simplify the commit message >> >> MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h | 1 + >> MdeModulePkg/Include/Library/PciHostBridgeLib.h | 4 ++++ >> MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 4 +++- >> 3 files changed, 8 insertions(+), 1 deletion(-) >> >> diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h >> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h >> index b1e83f1c9089..aa3f43a511c4 100644 >> --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h >> +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridge.h >> @@ -72,6 +72,7 @@ typedef struct { >> PCI_ROOT_BRIDGE_APERTURE MemAbove4G; >> PCI_ROOT_BRIDGE_APERTURE PMemAbove4G; >> BOOLEAN DmaAbove4G; >> + BOOLEAN NoExtendedConfigSpace; >> VOID *ConfigBuffer; >> EFI_DEVICE_PATH_PROTOCOL *DevicePath; >> CHAR16 *DevicePathStr; >> diff --git a/MdeModulePkg/Include/Library/PciHostBridgeLib.h >> b/MdeModulePkg/Include/Library/PciHostBridgeLib.h >> index 16ad104a9368..b67ac5e17d48 100644 >> --- a/MdeModulePkg/Include/Library/PciHostBridgeLib.h >> +++ b/MdeModulePkg/Include/Library/PciHostBridgeLib.h >> @@ -34,6 +34,10 @@ typedef struct { >> ///< and SetAttributes() in >> EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL. >> BOOLEAN DmaAbove4G; ///< DMA above 4GB memory. >> ///< Set to TRUE when root >> bridge supports DMA above 4GB >> memory. >> + BOOLEAN NoExtendedConfigSpace; ///< When FALSE, the root >> bridge supports >> + ///< Extended (4096-byte) >> Configuration Space. >> + ///< When TRUE, the root >> bridge supports >> + ///< 256-byte >> Configuration Space only. >> UINT64 AllocationAttributes; ///< Allocation attributes. >> ///< Refer to >> EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM and >> ///< >> EFI_PCI_HOST_BRIDGE_MEM64_DECODE used by >> GetAllocAttributes() >> diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> index 932aefd5d621..cda9b49b3925 100644 >> --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c >> @@ -80,6 +80,7 @@ CreateRootBridge ( >> DEBUG ((EFI_D_INFO, "%s\n", DevicePathStr = ConvertDevicePathToText >> (Bridge->DevicePath, FALSE, FALSE))); >> DEBUG ((EFI_D_INFO, " Support/Attr: %lx / %lx\n", Bridge->Supports, >> Bridge->Attributes)); >> DEBUG ((EFI_D_INFO, " DmaAbove4G: %s\n", Bridge->DmaAbove4G ? L"Yes" : >> L"No")); >> + DEBUG ((EFI_D_INFO, "NoExtConfSpace: %s\n", Bridge->NoExtendedConfigSpace >> ? L"Yes" : L"No")); >> DEBUG ((EFI_D_INFO, " AllocAttr: %lx (%s%s)\n", >> Bridge->AllocationAttributes, >> (Bridge->AllocationAttributes & >> EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM) != 0 ? L"CombineMemPMem >> " : L"", >> (Bridge->AllocationAttributes & EFI_PCI_HOST_BRIDGE_MEM64_DECODE) >> != 0 ? L"Mem64Decode" : L"" >> @@ -155,6 +156,7 @@ CreateRootBridge ( >> RootBridge->Supports = Bridge->Supports; >> RootBridge->Attributes = Bridge->Attributes; >> RootBridge->DmaAbove4G = Bridge->DmaAbove4G; >> + RootBridge->NoExtendedConfigSpace = Bridge->NoExtendedConfigSpace; >> RootBridge->AllocationAttributes = Bridge->AllocationAttributes; >> RootBridge->DevicePath = DuplicateDevicePath (Bridge->DevicePath); >> RootBridge->DevicePathStr = DevicePathStr; >> @@ -351,7 +353,7 @@ RootBridgeIoCheckParameter ( >> Address = PciRbAddr->Register; >> } >> Base = 0; >> - Limit = 0xFFF; >> + Limit = RootBridge->NoExtendedConfigSpace ? 0xFF : 0xFFF; >> } >> >> if (Address < Base) { >> -- >> 1.8.3.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel > _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

