Reviewed-by: Ruiyu Ni <[email protected]>

>-----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

Reply via email to