public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
@ 2020-12-28  8:26 Heng Luo
  2020-12-28  8:26 ` [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe " Heng Luo
  2020-12-29  1:45 ` 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for " gaoliming
  0 siblings, 2 replies; 9+ messages in thread
From: Heng Luo @ 2020-12-28  8:26 UTC (permalink / raw)
  To: devel; +Cc: Ray Ni, Hao A Wu

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138

Define structures for Resizable BAR Capability in
MdePkg/Include/IndustryStandard/PciExpress21.h,
Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
to use new structures.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Heng Luo <heng.luo@intel.com>
---
 MdePkg/Include/IndustryStandard/PciExpress21.h    | 30 +++++++++++++++++++++++++-----
 ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h b/MdePkg/Include/IndustryStandard/PciExpress21.h
index 2c07cb560e..b7629444eb 100644
--- a/MdePkg/Include/IndustryStandard/PciExpress21.h
+++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
@@ -1,7 +1,7 @@
 /** @file
   Support for the latest PCI standard.
 
-  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -632,10 +632,30 @@ typedef struct {
 #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID    0x0015
 #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1  0x1
 
+typedef union {
+  struct {
+    UINT32 Reserved:4;
+    UINT32 BarSizeCapability:28;
+  } Bits;
+  UINT32   Uint32;
+} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
+
+
+typedef union {
+  struct {
+    UINT32 BarIndex:3;
+    UINT32 Reserved:2;
+    UINT32 ResizableBarNumber:3;
+    UINT32 BarSize:6;
+    UINT32 Reserved2:2;
+    UINT32 BarSizeCapability:16;
+  } Bits;
+  UINT32   Uint32;
+} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
+
 typedef struct {
-  UINT32                                                 ResizableBarCapability;
-  UINT16                                                 ResizableBarControl;
-  UINT16                                                 Reserved;
+  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY ResizableBarCapability;
+  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL    ResizableBarControl;
 } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
 
 typedef struct {
@@ -643,7 +663,7 @@ typedef struct {
   PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY  Capability[1];
 } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
 
-#define GET_NUMBER_RESIZABLE_BARS(x) (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
+#define GET_NUMBER_RESIZABLE_BARS(x) (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
 
 #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID    0x000E
 #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1  0x1
diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
index 3e138188ce..5077d56fed 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
@@ -1,7 +1,7 @@
 /** @file
   Main file for Pci shell Debug1 function.
 
-  Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2005 - 2020, Intel Corporation. All rights reserved.<BR>
   (C) Copyright 2013-2015 Hewlett-Packard Development Company, L.P.<BR>
   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -5534,8 +5534,8 @@ PrintInterpretedExtendedCompatibilityResizeableBar (
       STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
       gShellDebug1HiiHandle,
       ItemCount+1,
-      Header->Capability[ItemCount].ResizableBarCapability,
-      Header->Capability[ItemCount].ResizableBarControl
+      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
+      Header->Capability[ItemCount].ResizableBarControl.Uint32
       );
   }
 
-- 
2.24.0.windows.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe Resizable BAR Capability
  2020-12-28  8:26 [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability Heng Luo
@ 2020-12-28  8:26 ` Heng Luo
  2021-01-04  5:34   ` [edk2-devel] " Ni, Ray
  2020-12-29  1:45 ` 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for " gaoliming
  1 sibling, 1 reply; 9+ messages in thread
From: Heng Luo @ 2020-12-28  8:26 UTC (permalink / raw)
  To: devel; +Cc: Ray Ni, Hao A Wu

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=313

Add PcdPcieResizableBarCapabilitySupport to enable/disable PCIe Resizable
BAR Capability fearture.
Program the Resizable BAR Register if the device suports PCIe Resizable
BAR Capability and PcdPcieResizableBarCapabilitySupport is TRUE.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Heng Luo <heng.luo@intel.com>
---
 MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h               |   4 +++-
 MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf          |   3 ++-
 MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c |  27 ++++++++++++++++++++++++++-
 MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h |  12 +++++++++++-
 MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c               | 185 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
 MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h               |  22 +++++++++++++++++++++-
 MdeModulePkg/MdeModulePkg.dec                         |   6 ++++++
 7 files changed, 240 insertions(+), 19 deletions(-)

diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
index d4113993c8..add1756d5c 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
@@ -1,7 +1,7 @@
 /** @file
   Header files and data structures needed by PCI Bus module.
 
-Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -280,6 +280,8 @@ struct _PCI_IO_DEVICE {
   // This field is used to support this case.
   //
   UINT16                                    BridgeIoAlignment;
+  UINT32                                    ResizableBarOffset;
+  UINT32                                    ResizableBarNumber;
 };
 
 #define PCI_IO_DEVICE_FROM_PCI_IO_THIS(a) \
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
index 9284998f36..b3e5213b92 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
@@ -2,7 +2,7 @@
 #  The PCI bus driver will probe all PCI devices and allocate MMIO and IO space for these devices.
 #  Please use PCD feature flag PcdPciBusHotplugDeviceSupport to enable hot plug supporting.
 #
-#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 #
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -106,6 +106,7 @@
   gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport                  ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport                ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration    ## SOMETIMES_CONSUMES
+  gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport          ## CONSUMES
 
 [UserExtensions.TianoCore."ExtraFiles"]
   PciBusDxeExtra.uni
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
index 6c68a97d4e..d1d38241da 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
@@ -1,7 +1,7 @@
 /** @file
   PCI emumeration support functions implementation for PCI Bus module.
 
-Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -2426,6 +2426,31 @@ CreatePciIoDevice (
     }
   }
 
+  PciIoDevice->ResizableBarOffset = 0;
+  if (PcdGetBool (PcdPcieResizableBarCapabilitySupport)) {
+    Status = LocatePciExpressCapabilityRegBlock (
+               PciIoDevice,
+               PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID,
+               &PciIoDevice->ResizableBarOffset,
+               NULL
+               );
+    if (!EFI_ERROR (Status)) {
+      PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL ResizableBarControl;
+      UINT32                                                  Offset;
+      Offset = PciIoDevice->ResizableBarOffset + sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
+                + sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY),
+      PciIo->Pci.Read (
+              PciIo,
+              EfiPciIoWidthUint8,
+              Offset,
+              sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL),
+              &ResizableBarControl
+              );
+      PciIoDevice->ResizableBarNumber = ResizableBarControl.Bits.ResizableBarNumber;
+      PciProgramResizableBar (PciIoDevice, PciResizableBarMax);
+    }
+  }
+
   //
   // Initialize the reserved resource list
   //
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
index d76606c7df..919d678e2f 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
@@ -1,7 +1,7 @@
 /** @file
   PCI enumeration support functions declaration for PCI Bus module.
 
-Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -467,4 +467,14 @@ DumpPpbPaddingResource (
   IN PCI_BAR_TYPE                     ResourceType
   );
 
+/**
+  Dump the PCI BAR information.
+
+  @param PciIoDevice     PCI IO instance.
+**/
+VOID
+DumpPciBars (
+  IN PCI_IO_DEVICE                    *PciIoDevice
+  );
+
 #endif
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
index 72690ab647..1a7ddb4455 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
@@ -1,7 +1,7 @@
 /** @file
   Internal library implementation for PCI Bus module.
 
-Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -377,6 +377,60 @@ DumpResourceMap (
   }
 }
 
+/**
+  Adjust the Devices' BAR size to minimum value if it support Resizeable BAR capability.
+
+  @param RootBridgeDev  Pointer to instance of PCI_IO_DEVICE..
+
+  @return TRUE if BAR size is adjusted.
+
+**/
+BOOLEAN
+AdjustPciDeviceBarSize (
+  IN PCI_IO_DEVICE *RootBridgeDev
+  )
+{
+  PCI_IO_DEVICE     *PciIoDevice;
+  LIST_ENTRY        *CurrentLink;
+  BOOLEAN           Adjusted;
+  UINTN             Offset;
+  UINTN             BarIndex;
+
+  Adjusted    = FALSE;
+  CurrentLink = RootBridgeDev->ChildList.ForwardLink;
+
+  while (CurrentLink != NULL && CurrentLink != &RootBridgeDev->ChildList) {
+    PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
+
+    if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {
+      if (AdjustPciDeviceBarSize (PciIoDevice)) {
+        Adjusted = TRUE;
+      }
+    } else {
+      if (PciIoDevice->ResizableBarOffset != 0) {
+        DEBUG ((
+          DEBUG_ERROR,
+          "PciBus: [%02x|%02x|%02x] Adjust Pci Device Bar Size\n",
+          PciIoDevice->BusNumber, PciIoDevice->DeviceNumber, PciIoDevice->FunctionNumber
+          ));
+        PciProgramResizableBar (PciIoDevice, PciResizableBarMin);
+        //
+        // Start to parse the bars
+        //
+        for (Offset = 0x10, BarIndex = 0; Offset <= 0x24 && BarIndex < PCI_MAX_BAR; BarIndex++) {
+          Offset = PciParseBar (PciIoDevice, Offset, BarIndex);
+        }
+        Adjusted = TRUE;
+        DEBUG_CODE (DumpPciBars (PciIoDevice););
+      }
+    }
+
+    CurrentLink = CurrentLink->ForwardLink;
+  }
+
+  return Adjusted;
+}
+
 /**
   Submits the I/O and memory resource requirements for the specified PCI Host Bridge.
 
@@ -422,6 +476,10 @@ PciHostBridgeResourceAllocator (
   PCI_RESOURCE_NODE                              PMem64Pool;
   EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD        HandleExtendedData;
   EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD  AllocFailExtendedData;
+  BOOLEAN                                        ResizableBarNeedAdjust;
+  BOOLEAN                                        ResizableBarAdjusted;
+
+  ResizableBarNeedAdjust = PcdGetBool (PcdPcieResizableBarCapabilitySupport);
 
   //
   // It may try several times if the resource allocation fails
@@ -703,19 +761,30 @@ PciHostBridgeResourceAllocator (
             sizeof (AllocFailExtendedData)
             );
 
-      Status = PciHostBridgeAdjustAllocation (
-                 &IoPool,
-                 &Mem32Pool,
-                 &PMem32Pool,
-                 &Mem64Pool,
-                 &PMem64Pool,
-                 IoResStatus,
-                 Mem32ResStatus,
-                 PMem32ResStatus,
-                 Mem64ResStatus,
-                 PMem64ResStatus
-                 );
-
+      //
+      // Try to adjust the Devices' BAR size to minimum value in first loop
+      // if enabling PCIe Resizable BAR Capability support.
+      // call PciHostBridgeAdjustAllocation() only if BAR size is not adjust.
+      //
+      ResizableBarAdjusted = FALSE;
+      if (ResizableBarNeedAdjust) {
+        ResizableBarAdjusted = AdjustPciDeviceBarSize (RootBridgeDev);
+        ResizableBarNeedAdjust = FALSE;
+      }
+      if (!ResizableBarAdjusted) {
+        Status = PciHostBridgeAdjustAllocation (
+                  &IoPool,
+                  &Mem32Pool,
+                  &PMem32Pool,
+                  &Mem64Pool,
+                  &PMem64Pool,
+                  IoResStatus,
+                  Mem32ResStatus,
+                  PMem32ResStatus,
+                  Mem64ResStatus,
+                  PMem64ResStatus
+                  );
+      }
       //
       // Destroy all the resource tree
       //
@@ -1651,3 +1720,91 @@ PciHostBridgeEnumerator (
 
   return EFI_SUCCESS;
 }
+
+/**
+  This function is used to program the Resizable BAR Register.
+
+  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
+  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
+                                PciResizableBarMin: set BAR to min size.
+
+  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
+  @retval other                 Some error occurred when enumerating the host bridge.
+
+**/
+EFI_STATUS
+PciProgramResizableBar (
+  IN PCI_IO_DEVICE          *PciIoDevice,
+  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
+  )
+{
+  EFI_PCI_IO_PROTOCOL  *PciIo;
+  UINT64                Capabilities;
+  UINT32                BarIndex;
+  UINT32                Offset;
+  INTN                  Bit;
+  UINTN                 ResizableBarNumber;
+  EFI_STATUS            Status;
+  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY   Entries[PCI_MAX_BAR];
+
+  ASSERT (PciIoDevice->ResizableBarOffset != 0);
+
+  DEBUG ((DEBUG_INFO, "   Programs Resizable BAR register, offset: 0x%08x, number: %d\n",
+        PciIoDevice->ResizableBarOffset, PciIoDevice->ResizableBarNumber));
+
+  ResizableBarNumber = MIN (PciIoDevice->ResizableBarNumber, PCI_MAX_BAR);
+  PciIo = &PciIoDevice->PciIo;
+  Status = PciIo->Pci.Read (
+          PciIo,
+          EfiPciIoWidthUint8,
+          PciIoDevice->ResizableBarOffset + sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER),
+          sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY) * ResizableBarNumber,
+          (VOID *)(&Entries)
+          );
+  ASSERT_EFI_ERROR (Status);
+
+  for (BarIndex = 0; BarIndex < ResizableBarNumber; BarIndex++) {
+
+    //
+    // When the bit of Capabilities Set, indicates that the Function supports
+    // operating with the BAR sized to (2^Bit) MB.
+    // Example:
+    // Bit 0 is set: supports operating with the BAR sized to 1 MB
+    // Bit 1 is set: supports operating with the BAR sized to 2 MB
+    // Bit n is set: supports operating with the BAR sized to (2^n) MB
+    //
+    Capabilities = Entries[BarIndex].ResizableBarControl.Bits.BarSizeCapability << 28
+                  | Entries[BarIndex].ResizableBarCapability.Bits.BarSizeCapability;
+
+    if (ResizableBarCap == PciResizableBarMax) {
+      Bit = HighBitSet64(Capabilities);
+    } else if (ResizableBarCap == PciResizableBarMin) {
+      Bit = LowBitSet64(Capabilities);
+    } else {
+      ASSERT ((ResizableBarCap == PciResizableBarMax) || (ResizableBarCap == PciResizableBarMin));
+    }
+
+    ASSERT (Bit >= 0);
+
+    Offset = PciIoDevice->ResizableBarOffset + sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
+            + BarIndex * sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY)
+            + OFFSET_OF (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY, ResizableBarControl);
+
+    Entries[BarIndex].ResizableBarControl.Bits.BarSize = (UINT32) Bit;
+    DEBUG ((
+      DEBUG_INFO,
+      "   Resizable Bar: Offset = 0x%x, Bar Size Capability = 0x%016lx, New Bar Size = 0x%lx\n",
+      OFFSET_OF (PCI_TYPE00, Device.Bar[Entries[BarIndex].ResizableBarControl.Bits.BarIndex]),
+      Capabilities, LShiftU64 (SIZE_1MB, Bit)
+      ));
+    PciIo->Pci.Write (
+            PciIo,
+            EfiPciIoWidthUint32,
+            Offset,
+            1,
+            &Entries[BarIndex].ResizableBarControl.Uint32
+            );
+  }
+
+  return EFI_SUCCESS;
+}
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
index 10b435d146..94b20f18e8 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
@@ -1,7 +1,7 @@
 /** @file
   Internal library declaration for PCI Bus module.
 
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -24,6 +24,10 @@ typedef struct {
   UINT8                              *AllocRes;
 } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
 
+typedef enum {
+  PciResizableBarMin = 0x00,
+  PciResizableBarMax = 0xFF
+} PCI_RESIZEABLE_BAR_CAP;
 
 /**
   Retrieve the PCI Card device BAR information via PciIo interface.
@@ -156,4 +160,20 @@ PciHostBridgeEnumerator (
   IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *PciResAlloc
   );
 
+/**
+  This function is used to program the Resizable BAR Register.
+
+  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
+  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
+                                PciResizableBarMin: set BAR to min size.
+
+  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
+  @retval other                 Some error occurred when enumerating the host bridge.
+
+**/
+EFI_STATUS
+PciProgramResizableBar (
+  IN PCI_IO_DEVICE          *PciIoDevice,
+  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
+  );
 #endif
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 9b52b34494..10c819ee39 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -2043,6 +2043,12 @@
   # @Prompt Enable StatusCode via memory.
   gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE|BOOLEAN|0x00010023
 
+  ## Indicates if the PCIe Resizable BAR Capability Supported.<BR><BR>
+  #   TRUE  - PCIe Resizable BAR Capability is supported.<BR>
+  #   FALSE - PCIe Resizable BAR Capability is not supported.<BR>
+  # @Prompt Enable PCIe Resizable BAR Capability support.
+  gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport|TRUE|BOOLEAN|0x10000024
+
 [PcdsPatchableInModule]
   ## Specify memory size with page number for PEI code when
   #  Loading Module at Fixed Address feature is enabled.
-- 
2.24.0.windows.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
  2020-12-28  8:26 [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability Heng Luo
  2020-12-28  8:26 ` [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe " Heng Luo
@ 2020-12-29  1:45 ` gaoliming
  2020-12-29  1:55   ` Heng Luo
  1 sibling, 1 reply; 9+ messages in thread
From: gaoliming @ 2020-12-29  1:45 UTC (permalink / raw)
  To: devel, heng.luo; +Cc: 'Ray Ni', 'Hao A Wu'

Heng:
  This is the incompatible change. Have you evaluated its impact in Edk2 and
Edk2Platforms?

Thanks
Liming
> -----邮件原件-----
> 发件人: bounce+27952+69477+4905953+8761045@groups.io
> <bounce+27952+69477+4905953+8761045@groups.io> 代表 Heng Luo
> 发送时间: 2020年12月28日 16:26
> 收件人: devel@edk2.groups.io
> 抄送: Ray Ni <ray.ni@intel.com>; Hao A Wu <hao.a.wu@intel.com>
> 主题: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR
> Capability
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138
> 
> Define structures for Resizable BAR Capability in
> MdePkg/Include/IndustryStandard/PciExpress21.h,
> Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> to use new structures.
> 
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Signed-off-by: Heng Luo <heng.luo@intel.com>
> ---
>  MdePkg/Include/IndustryStandard/PciExpress21.h    | 30
> +++++++++++++++++++++++++-----
>  ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
>  2 files changed, 28 insertions(+), 8 deletions(-)
> 
> diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h
> b/MdePkg/Include/IndustryStandard/PciExpress21.h
> index 2c07cb560e..b7629444eb 100644
> --- a/MdePkg/Include/IndustryStandard/PciExpress21.h
> +++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Support for the latest PCI standard.
> 
> 
> 
> -  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
> @@ -632,10 +632,30 @@ typedef struct {
>  #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID
> 0x0015
> 
>  #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1  0x1
> 
> 
> 
> +typedef union {
> 
> +  struct {
> 
> +    UINT32 Reserved:4;
> 
> +    UINT32 BarSizeCapability:28;
> 
> +  } Bits;
> 
> +  UINT32   Uint32;
> 
> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
> 
> +
> 
> +
> 
> +typedef union {
> 
> +  struct {
> 
> +    UINT32 BarIndex:3;
> 
> +    UINT32 Reserved:2;
> 
> +    UINT32 ResizableBarNumber:3;
> 
> +    UINT32 BarSize:6;
> 
> +    UINT32 Reserved2:2;
> 
> +    UINT32 BarSizeCapability:16;
> 
> +  } Bits;
> 
> +  UINT32   Uint32;
> 
> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
> 
> +
> 
>  typedef struct {
> 
> -  UINT32
> ResizableBarCapability;
> 
> -  UINT16
> ResizableBarControl;
> 
> -  UINT16
> Reserved;
> 
> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY
> ResizableBarCapability;
> 
> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> ResizableBarControl;
> 
>  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
> 
> 
> 
>  typedef struct {
> 
> @@ -643,7 +663,7 @@ typedef struct {
>    PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> Capability[1];
> 
>  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
> 
> 
> 
> -#define GET_NUMBER_RESIZABLE_BARS(x)
> (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
> 
> +#define GET_NUMBER_RESIZABLE_BARS(x)
> (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
> 
> 
> 
>  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID
> 0x000E
> 
>  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1  0x1
> 
> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> index 3e138188ce..5077d56fed 100644
> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Main file for Pci shell Debug1 function.
> 
> 
> 
> -  Copyright (c) 2005 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +  Copyright (c) 2005 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>    (C) Copyright 2013-2015 Hewlett-Packard Development Company,
> L.P.<BR>
> 
>    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -5534,8 +5534,8 @@
> PrintInterpretedExtendedCompatibilityResizeableBar (
>        STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
> 
>        gShellDebug1HiiHandle,
> 
>        ItemCount+1,
> 
> -      Header->Capability[ItemCount].ResizableBarCapability,
> 
> -      Header->Capability[ItemCount].ResizableBarControl
> 
> +      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
> 
> +      Header->Capability[ItemCount].ResizableBarControl.Uint32
> 
>        );
> 
>    }
> 
> 
> 
> --
> 2.24.0.windows.2
> 
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#69477): https://edk2.groups.io/g/devel/message/69477
> Mute This Topic: https://groups.io/mt/79265864/4905953
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub
> [gaoliming@byosoft.com.cn]
> -=-=-=-=-=-=
> 




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
  2020-12-29  1:45 ` 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for " gaoliming
@ 2020-12-29  1:55   ` Heng Luo
  2021-01-04  0:58     ` 回复: " gaoliming
  2021-01-07 14:51     ` Cindy Roberts
  0 siblings, 2 replies; 9+ messages in thread
From: Heng Luo @ 2020-12-29  1:55 UTC (permalink / raw)
  To: devel@edk2.groups.io, gaoliming@byosoft.com.cn; +Cc: Ni, Ray, Wu, Hao A

Hi Liming,
Ray and I have evaluated the impact, we think only UefiShellDebug1CommandsLib/Pci.c uses this structure, I have change  this file in this patch, we think it doesn't impact Edk2 and Edk2Platforms.

Thanks,
Heng

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> gaoliming
> Sent: Tuesday, December 29, 2020 9:46 AM
> To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> Subject: 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for
> Resizable BAR Capability
> 
> Heng:
>   This is the incompatible change. Have you evaluated its impact in Edk2 and
> Edk2Platforms?
> 
> Thanks
> Liming
> > -----邮件原件-----
> > 发件人: bounce+27952+69477+4905953+8761045@groups.io
> > <bounce+27952+69477+4905953+8761045@groups.io> 代表 Heng Luo
> > 发送时间: 2020年12月28日 16:26
> > 收件人: devel@edk2.groups.io
> > 抄送: Ray Ni <ray.ni@intel.com>; Hao A Wu <hao.a.wu@intel.com>
> > 主题: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
> > BAR Capability
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138
> >
> > Define structures for Resizable BAR Capability in
> > MdePkg/Include/IndustryStandard/PciExpress21.h,
> > Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > to use new structures.
> >
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Hao A Wu <hao.a.wu@intel.com>
> > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > ---
> >  MdePkg/Include/IndustryStandard/PciExpress21.h    | 30
> > +++++++++++++++++++++++++-----
> >  ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
> >  2 files changed, 28 insertions(+), 8 deletions(-)
> >
> > diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h
> > b/MdePkg/Include/IndustryStandard/PciExpress21.h
> > index 2c07cb560e..b7629444eb 100644
> > --- a/MdePkg/Include/IndustryStandard/PciExpress21.h
> > +++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    Support for the latest PCI standard.
> >
> >
> >
> > -  Copyright (c) 2006 - 2018, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +  Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > + reserved.<BR>
> >
> >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> >
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > @@ -632,10 +632,30 @@ typedef struct {  #define
> > PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID
> > 0x0015
> >
> >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1  0x1
> >
> >
> >
> > +typedef union {
> >
> > +  struct {
> >
> > +    UINT32 Reserved:4;
> >
> > +    UINT32 BarSizeCapability:28;
> >
> > +  } Bits;
> >
> > +  UINT32   Uint32;
> >
> > +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
> >
> > +
> >
> > +
> >
> > +typedef union {
> >
> > +  struct {
> >
> > +    UINT32 BarIndex:3;
> >
> > +    UINT32 Reserved:2;
> >
> > +    UINT32 ResizableBarNumber:3;
> >
> > +    UINT32 BarSize:6;
> >
> > +    UINT32 Reserved2:2;
> >
> > +    UINT32 BarSizeCapability:16;
> >
> > +  } Bits;
> >
> > +  UINT32   Uint32;
> >
> > +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
> >
> > +
> >
> >  typedef struct {
> >
> > -  UINT32
> > ResizableBarCapability;
> >
> > -  UINT16
> > ResizableBarControl;
> >
> > -  UINT16
> > Reserved;
> >
> > +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY
> > ResizableBarCapability;
> >
> > +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> > ResizableBarControl;
> >
> >  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
> >
> >
> >
> >  typedef struct {
> >
> > @@ -643,7 +663,7 @@ typedef struct {
> >    PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> > Capability[1];
> >
> >  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
> >
> >
> >
> > -#define GET_NUMBER_RESIZABLE_BARS(x)
> > (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
> >
> > +#define GET_NUMBER_RESIZABLE_BARS(x)
> > (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
> >
> >
> >
> >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID
> > 0x000E
> >
> >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1  0x1
> >
> > diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > index 3e138188ce..5077d56fed 100644
> > --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    Main file for Pci shell Debug1 function.
> >
> >
> >
> > -  Copyright (c) 2005 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +  Copyright (c) 2005 - 2020, Intel Corporation. All rights
> > + reserved.<BR>
> >
> >    (C) Copyright 2013-2015 Hewlett-Packard Development Company,
> > L.P.<BR>
> >
> >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> >
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > @@ -5534,8 +5534,8 @@
> > PrintInterpretedExtendedCompatibilityResizeableBar (
> >        STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
> >
> >        gShellDebug1HiiHandle,
> >
> >        ItemCount+1,
> >
> > -      Header->Capability[ItemCount].ResizableBarCapability,
> >
> > -      Header->Capability[ItemCount].ResizableBarControl
> >
> > +      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
> >
> > +      Header->Capability[ItemCount].ResizableBarControl.Uint32
> >
> >        );
> >
> >    }
> >
> >
> >
> > --
> > 2.24.0.windows.2
> >
> >
> >
> > -=-=-=-=-=-=
> > Groups.io Links: You receive all messages sent to this group.
> > View/Reply Online (#69477):
> > https://edk2.groups.io/g/devel/message/69477
> > Mute This Topic: https://groups.io/mt/79265864/4905953
> > Group Owner: devel+owner@edk2.groups.io
> > Unsubscribe: https://edk2.groups.io/g/devel/unsub
> > [gaoliming@byosoft.com.cn]
> > -=-=-=-=-=-=
> >
> 
> 
> 
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
  2020-12-29  1:55   ` Heng Luo
@ 2021-01-04  0:58     ` gaoliming
  2021-01-07 14:51     ` Cindy Roberts
  1 sibling, 0 replies; 9+ messages in thread
From: gaoliming @ 2021-01-04  0:58 UTC (permalink / raw)
  To: devel, heng.luo; +Cc: 'Ni, Ray', 'Wu, Hao A'

Heng:
 That's good. Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>

Thanks
Liming
> -----邮件原件-----
> 发件人: bounce+27952+69493+4905953+8761045@groups.io
> <bounce+27952+69493+4905953+8761045@groups.io> 代表 Heng Luo
> 发送时间: 2020年12月29日 9:56
> 收件人: devel@edk2.groups.io; gaoliming@byosoft.com.cn
> 抄送: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> 主题: Re: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
> BAR Capability
> 
> Hi Liming,
> Ray and I have evaluated the impact, we think only
> UefiShellDebug1CommandsLib/Pci.c uses this structure, I have change  this
> file in this patch, we think it doesn't impact Edk2 and Edk2Platforms.
> 
> Thanks,
> Heng
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> > gaoliming
> > Sent: Tuesday, December 29, 2020 9:46 AM
> > To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> > Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> > Subject: 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for
> > Resizable BAR Capability
> >
> > Heng:
> >   This is the incompatible change. Have you evaluated its impact in Edk2
> and
> > Edk2Platforms?
> >
> > Thanks
> > Liming
> > > -----邮件原件-----
> > > 发件人: bounce+27952+69477+4905953+8761045@groups.io
> > > <bounce+27952+69477+4905953+8761045@groups.io> 代表 Heng Luo
> > > 发送时间: 2020年12月28日 16:26
> > > 收件人: devel@edk2.groups.io
> > > 抄送: Ray Ni <ray.ni@intel.com>; Hao A Wu <hao.a.wu@intel.com>
> > > 主题: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
> > > BAR Capability
> > >
> > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138
> > >
> > > Define structures for Resizable BAR Capability in
> > > MdePkg/Include/IndustryStandard/PciExpress21.h,
> > > Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > > to use new structures.
> > >
> > > Cc: Ray Ni <ray.ni@intel.com>
> > > Cc: Hao A Wu <hao.a.wu@intel.com>
> > > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > > ---
> > >  MdePkg/Include/IndustryStandard/PciExpress21.h    | 30
> > > +++++++++++++++++++++++++-----
> > >  ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
> > >  2 files changed, 28 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h
> > > b/MdePkg/Include/IndustryStandard/PciExpress21.h
> > > index 2c07cb560e..b7629444eb 100644
> > > --- a/MdePkg/Include/IndustryStandard/PciExpress21.h
> > > +++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
> > > @@ -1,7 +1,7 @@
> > >  /** @file
> > >
> > >    Support for the latest PCI standard.
> > >
> > >
> > >
> > > -  Copyright (c) 2006 - 2018, Intel Corporation. All rights
> > > reserved.<BR>
> > >
> > > +  Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > > + reserved.<BR>
> > >
> > >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> > >
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > >
> > >
> > > @@ -632,10 +632,30 @@ typedef struct {  #define
> > > PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID
> > > 0x0015
> > >
> > >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1
> 0x1
> > >
> > >
> > >
> > > +typedef union {
> > >
> > > +  struct {
> > >
> > > +    UINT32 Reserved:4;
> > >
> > > +    UINT32 BarSizeCapability:28;
> > >
> > > +  } Bits;
> > >
> > > +  UINT32   Uint32;
> > >
> > > +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
> > >
> > > +
> > >
> > > +
> > >
> > > +typedef union {
> > >
> > > +  struct {
> > >
> > > +    UINT32 BarIndex:3;
> > >
> > > +    UINT32 Reserved:2;
> > >
> > > +    UINT32 ResizableBarNumber:3;
> > >
> > > +    UINT32 BarSize:6;
> > >
> > > +    UINT32 Reserved2:2;
> > >
> > > +    UINT32 BarSizeCapability:16;
> > >
> > > +  } Bits;
> > >
> > > +  UINT32   Uint32;
> > >
> > > +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
> > >
> > > +
> > >
> > >  typedef struct {
> > >
> > > -  UINT32
> > > ResizableBarCapability;
> > >
> > > -  UINT16
> > > ResizableBarControl;
> > >
> > > -  UINT16
> > > Reserved;
> > >
> > > +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY
> > > ResizableBarCapability;
> > >
> > > +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> > > ResizableBarControl;
> > >
> > >  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
> > >
> > >
> > >
> > >  typedef struct {
> > >
> > > @@ -643,7 +663,7 @@ typedef struct {
> > >    PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> > > Capability[1];
> > >
> > >  } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
> > >
> > >
> > >
> > > -#define GET_NUMBER_RESIZABLE_BARS(x)
> > > (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
> > >
> > > +#define GET_NUMBER_RESIZABLE_BARS(x)
> > > (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
> > >
> > >
> > >
> > >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID
> > > 0x000E
> > >
> > >  #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1
> 0x1
> > >
> > > diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > > b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > > index 3e138188ce..5077d56fed 100644
> > > --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > > +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> > > @@ -1,7 +1,7 @@
> > >  /** @file
> > >
> > >    Main file for Pci shell Debug1 function.
> > >
> > >
> > >
> > > -  Copyright (c) 2005 - 2019, Intel Corporation. All rights
> > > reserved.<BR>
> > >
> > > +  Copyright (c) 2005 - 2020, Intel Corporation. All rights
> > > + reserved.<BR>
> > >
> > >    (C) Copyright 2013-2015 Hewlett-Packard Development Company,
> > > L.P.<BR>
> > >
> > >    (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> > >
> > >    SPDX-License-Identifier: BSD-2-Clause-Patent
> > >
> > > @@ -5534,8 +5534,8 @@
> > > PrintInterpretedExtendedCompatibilityResizeableBar (
> > >        STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
> > >
> > >        gShellDebug1HiiHandle,
> > >
> > >        ItemCount+1,
> > >
> > > -      Header->Capability[ItemCount].ResizableBarCapability,
> > >
> > > -      Header->Capability[ItemCount].ResizableBarControl
> > >
> > > +      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
> > >
> > > +      Header->Capability[ItemCount].ResizableBarControl.Uint32
> > >
> > >        );
> > >
> > >    }
> > >
> > >
> > >
> > > --
> > > 2.24.0.windows.2
> > >
> > >
> > >
> > > -=-=-=-=-=-=
> > > Groups.io Links: You receive all messages sent to this group.
> > > View/Reply Online (#69477):
> > > https://edk2.groups.io/g/devel/message/69477
> > > Mute This Topic: https://groups.io/mt/79265864/4905953
> > > Group Owner: devel+owner@edk2.groups.io
> > > Unsubscribe: https://edk2.groups.io/g/devel/unsub
> > > [gaoliming@byosoft.com.cn]
> > > -=-=-=-=-=-=
> > >
> >
> >
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [edk2-devel] [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe Resizable BAR Capability
  2020-12-28  8:26 ` [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe " Heng Luo
@ 2021-01-04  5:34   ` Ni, Ray
  2021-01-04  6:39     ` Heng Luo
  0 siblings, 1 reply; 9+ messages in thread
From: Ni, Ray @ 2021-01-04  5:34 UTC (permalink / raw)
  To: devel@edk2.groups.io, Luo, Heng; +Cc: Wu, Hao A

1. PcdPcieResizableBarCapabilitySupport: can you rename to PcdPcieResizableBarSupport?
    I understand your name is more precise but it's a bit long.:)

2.    
     //
      // Try to adjust the Devices' BAR size to minimum value in first loop
      // if enabling PCIe Resizable BAR Capability support.
      // call PciHostBridgeAdjustAllocation() only if BAR size is not adjust.
      //
-->
     //
     // When resource conflict happens, adjust the BAR size first.
     // Only when adjusting BAR size doesn't help or BAR size cannot be adjusted,
     // reject the device who requests largest resource that causes conflict.
     //
3. PCI_RESIZEABLE_BAR_CAP: Can you please rename the type to PCI_RESIZABLE_BAR_OPERATION?
    Similar comments to ResizableBarCap. Can you please rename to ResizableBarOp?

4. Capabilities = Entries[BarIndex].ResizableBarControl.Bits.BarSizeCapability << 28
                  | Entries[BarIndex].ResizableBarCapability.Bits.BarSizeCapability;

You need to use LShiftU64()

5.   Entries[BarIndex].ResizableBarControl.Bits.BarIndex
I suggest you rename BarIndex to Index. Because it can avoid confusion. So the above code will be:
      Entries[Index].ResizableBarControl.Bits.BarIndex

Thanks,
Ray

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Heng Luo
> Sent: Monday, December 28, 2020 4:26 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> Subject: [edk2-devel] [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support
> PCIe Resizable BAR Capability
> 
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=313
> 
> Add PcdPcieResizableBarCapabilitySupport to enable/disable PCIe Resizable
> BAR Capability fearture.
> Program the Resizable BAR Register if the device suports PCIe Resizable
> BAR Capability and PcdPcieResizableBarCapabilitySupport is TRUE.
> 
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Hao A Wu <hao.a.wu@intel.com>
> Signed-off-by: Heng Luo <heng.luo@intel.com>
> ---
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h               |   4 +++-
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf          |   3 ++-
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c |  27
> ++++++++++++++++++++++++++-
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h |  12
> +++++++++++-
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c               | 185
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++++++++++++++++++++++++++++--------------
>  MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h               |  22
> +++++++++++++++++++++-
>  MdeModulePkg/MdeModulePkg.dec                         |   6 ++++++
>  7 files changed, 240 insertions(+), 19 deletions(-)
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> index d4113993c8..add1756d5c 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Header files and data structures needed by PCI Bus module.
> 
> 
> 
> -Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> @@ -280,6 +280,8 @@ struct _PCI_IO_DEVICE {
>    // This field is used to support this case.
> 
>    //
> 
>    UINT16                                    BridgeIoAlignment;
> 
> +  UINT32                                    ResizableBarOffset;
> 
> +  UINT32                                    ResizableBarNumber;
> 
>  };
> 
> 
> 
>  #define PCI_IO_DEVICE_FROM_PCI_IO_THIS(a) \
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> index 9284998f36..b3e5213b92 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> @@ -2,7 +2,7 @@
>  #  The PCI bus driver will probe all PCI devices and allocate MMIO and IO
> space for these devices.
> 
>  #  Please use PCD feature flag PcdPciBusHotplugDeviceSupport to enable hot
> plug supporting.
> 
>  #
> 
> -#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +#  Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  #
> 
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  #
> 
> @@ -106,6 +106,7 @@
>    gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport                  ## CONSUMES
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport                ##
> CONSUMES
> 
>    gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration    ##
> SOMETIMES_CONSUMES
> 
> +  gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport
> ## CONSUMES
> 
> 
> 
>  [UserExtensions.TianoCore."ExtraFiles"]
> 
>    PciBusDxeExtra.uni
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> index 6c68a97d4e..d1d38241da 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    PCI emumeration support functions implementation for PCI Bus module.
> 
> 
> 
> -Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
> @@ -2426,6 +2426,31 @@ CreatePciIoDevice (
>      }
> 
>    }
> 
> 
> 
> +  PciIoDevice->ResizableBarOffset = 0;
> 
> +  if (PcdGetBool (PcdPcieResizableBarCapabilitySupport)) {
> 
> +    Status = LocatePciExpressCapabilityRegBlock (
> 
> +               PciIoDevice,
> 
> +               PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID,
> 
> +               &PciIoDevice->ResizableBarOffset,
> 
> +               NULL
> 
> +               );
> 
> +    if (!EFI_ERROR (Status)) {
> 
> +      PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> ResizableBarControl;
> 
> +      UINT32                                                  Offset;
> 
> +      Offset = PciIoDevice->ResizableBarOffset + sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
> 
> +                + sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY),
> 
> +      PciIo->Pci.Read (
> 
> +              PciIo,
> 
> +              EfiPciIoWidthUint8,
> 
> +              Offset,
> 
> +              sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL),
> 
> +              &ResizableBarControl
> 
> +              );
> 
> +      PciIoDevice->ResizableBarNumber =
> ResizableBarControl.Bits.ResizableBarNumber;
> 
> +      PciProgramResizableBar (PciIoDevice, PciResizableBarMax);
> 
> +    }
> 
> +  }
> 
> +
> 
>    //
> 
>    // Initialize the reserved resource list
> 
>    //
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> index d76606c7df..919d678e2f 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    PCI enumeration support functions declaration for PCI Bus module.
> 
> 
> 
> -Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> @@ -467,4 +467,14 @@ DumpPpbPaddingResource (
>    IN PCI_BAR_TYPE                     ResourceType
> 
>    );
> 
> 
> 
> +/**
> 
> +  Dump the PCI BAR information.
> 
> +
> 
> +  @param PciIoDevice     PCI IO instance.
> 
> +**/
> 
> +VOID
> 
> +DumpPciBars (
> 
> +  IN PCI_IO_DEVICE                    *PciIoDevice
> 
> +  );
> 
> +
> 
>  #endif
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> index 72690ab647..1a7ddb4455 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Internal library implementation for PCI Bus module.
> 
> 
> 
> -Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
> @@ -377,6 +377,60 @@ DumpResourceMap (
>    }
> 
>  }
> 
> 
> 
> +/**
> 
> +  Adjust the Devices' BAR size to minimum value if it support Resizeable BAR
> capability.
> 
> +
> 
> +  @param RootBridgeDev  Pointer to instance of PCI_IO_DEVICE..
> 
> +
> 
> +  @return TRUE if BAR size is adjusted.
> 
> +
> 
> +**/
> 
> +BOOLEAN
> 
> +AdjustPciDeviceBarSize (
> 
> +  IN PCI_IO_DEVICE *RootBridgeDev
> 
> +  )
> 
> +{
> 
> +  PCI_IO_DEVICE     *PciIoDevice;
> 
> +  LIST_ENTRY        *CurrentLink;
> 
> +  BOOLEAN           Adjusted;
> 
> +  UINTN             Offset;
> 
> +  UINTN             BarIndex;
> 
> +
> 
> +  Adjusted    = FALSE;
> 
> +  CurrentLink = RootBridgeDev->ChildList.ForwardLink;
> 
> +
> 
> +  while (CurrentLink != NULL && CurrentLink != &RootBridgeDev->ChildList) {
> 
> +    PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
> 
> +
> 
> +    if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {
> 
> +      if (AdjustPciDeviceBarSize (PciIoDevice)) {
> 
> +        Adjusted = TRUE;
> 
> +      }
> 
> +    } else {
> 
> +      if (PciIoDevice->ResizableBarOffset != 0) {
> 
> +        DEBUG ((
> 
> +          DEBUG_ERROR,
> 
> +          "PciBus: [%02x|%02x|%02x] Adjust Pci Device Bar Size\n",
> 
> +          PciIoDevice->BusNumber, PciIoDevice->DeviceNumber, PciIoDevice-
> >FunctionNumber
> 
> +          ));
> 
> +        PciProgramResizableBar (PciIoDevice, PciResizableBarMin);
> 
> +        //
> 
> +        // Start to parse the bars
> 
> +        //
> 
> +        for (Offset = 0x10, BarIndex = 0; Offset <= 0x24 && BarIndex <
> PCI_MAX_BAR; BarIndex++) {
> 
> +          Offset = PciParseBar (PciIoDevice, Offset, BarIndex);
> 
> +        }
> 
> +        Adjusted = TRUE;
> 
> +        DEBUG_CODE (DumpPciBars (PciIoDevice););
> 
> +      }
> 
> +    }
> 
> +
> 
> +    CurrentLink = CurrentLink->ForwardLink;
> 
> +  }
> 
> +
> 
> +  return Adjusted;
> 
> +}
> 
> +
> 
>  /**
> 
>    Submits the I/O and memory resource requirements for the specified PCI
> Host Bridge.
> 
> 
> 
> @@ -422,6 +476,10 @@ PciHostBridgeResourceAllocator (
>    PCI_RESOURCE_NODE                              PMem64Pool;
> 
>    EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD        HandleExtendedData;
> 
>    EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD
> AllocFailExtendedData;
> 
> +  BOOLEAN                                        ResizableBarNeedAdjust;
> 
> +  BOOLEAN                                        ResizableBarAdjusted;
> 
> +
> 
> +  ResizableBarNeedAdjust = PcdGetBool
> (PcdPcieResizableBarCapabilitySupport);
> 
> 
> 
>    //
> 
>    // It may try several times if the resource allocation fails
> 
> @@ -703,19 +761,30 @@ PciHostBridgeResourceAllocator (
>              sizeof (AllocFailExtendedData)
> 
>              );
> 
> 
> 
> -      Status = PciHostBridgeAdjustAllocation (
> 
> -                 &IoPool,
> 
> -                 &Mem32Pool,
> 
> -                 &PMem32Pool,
> 
> -                 &Mem64Pool,
> 
> -                 &PMem64Pool,
> 
> -                 IoResStatus,
> 
> -                 Mem32ResStatus,
> 
> -                 PMem32ResStatus,
> 
> -                 Mem64ResStatus,
> 
> -                 PMem64ResStatus
> 
> -                 );
> 
> -
> 
> +      //
> 
> +      // Try to adjust the Devices' BAR size to minimum value in first loop
> 
> +      // if enabling PCIe Resizable BAR Capability support.
> 
> +      // call PciHostBridgeAdjustAllocation() only if BAR size is not adjust.
> 
> +      //
> 
> +      ResizableBarAdjusted = FALSE;
> 
> +      if (ResizableBarNeedAdjust) {
> 
> +        ResizableBarAdjusted = AdjustPciDeviceBarSize (RootBridgeDev);
> 
> +        ResizableBarNeedAdjust = FALSE;
> 
> +      }
> 
> +      if (!ResizableBarAdjusted) {
> 
> +        Status = PciHostBridgeAdjustAllocation (
> 
> +                  &IoPool,
> 
> +                  &Mem32Pool,
> 
> +                  &PMem32Pool,
> 
> +                  &Mem64Pool,
> 
> +                  &PMem64Pool,
> 
> +                  IoResStatus,
> 
> +                  Mem32ResStatus,
> 
> +                  PMem32ResStatus,
> 
> +                  Mem64ResStatus,
> 
> +                  PMem64ResStatus
> 
> +                  );
> 
> +      }
> 
>        //
> 
>        // Destroy all the resource tree
> 
>        //
> 
> @@ -1651,3 +1720,91 @@ PciHostBridgeEnumerator (
> 
> 
>    return EFI_SUCCESS;
> 
>  }
> 
> +
> 
> +/**
> 
> +  This function is used to program the Resizable BAR Register.
> 
> +
> 
> +  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
> 
> +  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
> 
> +                                PciResizableBarMin: set BAR to min size.
> 
> +
> 
> +  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
> 
> +  @retval other                 Some error occurred when enumerating the host
> bridge.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +PciProgramResizableBar (
> 
> +  IN PCI_IO_DEVICE          *PciIoDevice,
> 
> +  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
> 
> +  )
> 
> +{
> 
> +  EFI_PCI_IO_PROTOCOL  *PciIo;
> 
> +  UINT64                Capabilities;
> 
> +  UINT32                BarIndex;
> 
> +  UINT32                Offset;
> 
> +  INTN                  Bit;
> 
> +  UINTN                 ResizableBarNumber;
> 
> +  EFI_STATUS            Status;
> 
> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> Entries[PCI_MAX_BAR];
> 
> +
> 
> +  ASSERT (PciIoDevice->ResizableBarOffset != 0);
> 
> +
> 
> +  DEBUG ((DEBUG_INFO, "   Programs Resizable BAR register, offset: 0x%08x,
> number: %d\n",
> 
> +        PciIoDevice->ResizableBarOffset, PciIoDevice->ResizableBarNumber));
> 
> +
> 
> +  ResizableBarNumber = MIN (PciIoDevice->ResizableBarNumber,
> PCI_MAX_BAR);
> 
> +  PciIo = &PciIoDevice->PciIo;
> 
> +  Status = PciIo->Pci.Read (
> 
> +          PciIo,
> 
> +          EfiPciIoWidthUint8,
> 
> +          PciIoDevice->ResizableBarOffset + sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER),
> 
> +          sizeof (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY)
> * ResizableBarNumber,
> 
> +          (VOID *)(&Entries)
> 
> +          );
> 
> +  ASSERT_EFI_ERROR (Status);
> 
> +
> 
> +  for (BarIndex = 0; BarIndex < ResizableBarNumber; BarIndex++) {
> 
> +
> 
> +    //
> 
> +    // When the bit of Capabilities Set, indicates that the Function supports
> 
> +    // operating with the BAR sized to (2^Bit) MB.
> 
> +    // Example:
> 
> +    // Bit 0 is set: supports operating with the BAR sized to 1 MB
> 
> +    // Bit 1 is set: supports operating with the BAR sized to 2 MB
> 
> +    // Bit n is set: supports operating with the BAR sized to (2^n) MB
> 
> +    //
> 
> +    Capabilities = Entries[BarIndex].ResizableBarControl.Bits.BarSizeCapability
> << 28
> 
> +                  | Entries[BarIndex].ResizableBarCapability.Bits.BarSizeCapability;
> 
> +
> 
> +    if (ResizableBarCap == PciResizableBarMax) {
> 
> +      Bit = HighBitSet64(Capabilities);
> 
> +    } else if (ResizableBarCap == PciResizableBarMin) {
> 
> +      Bit = LowBitSet64(Capabilities);
> 
> +    } else {
> 
> +      ASSERT ((ResizableBarCap == PciResizableBarMax) || (ResizableBarCap
> == PciResizableBarMin));
> 
> +    }
> 
> +
> 
> +    ASSERT (Bit >= 0);
> 
> +
> 
> +    Offset = PciIoDevice->ResizableBarOffset + sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
> 
> +            + BarIndex * sizeof
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY)
> 
> +            + OFFSET_OF
> (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY,
> ResizableBarControl);
> 
> +
> 
> +    Entries[BarIndex].ResizableBarControl.Bits.BarSize = (UINT32) Bit;
> 
> +    DEBUG ((
> 
> +      DEBUG_INFO,
> 
> +      "   Resizable Bar: Offset = 0x%x, Bar Size Capability = 0x%016lx, New Bar
> Size = 0x%lx\n",
> 
> +      OFFSET_OF (PCI_TYPE00,
> Device.Bar[Entries[BarIndex].ResizableBarControl.Bits.BarIndex]),
> 
> +      Capabilities, LShiftU64 (SIZE_1MB, Bit)
> 
> +      ));
> 
> +    PciIo->Pci.Write (
> 
> +            PciIo,
> 
> +            EfiPciIoWidthUint32,
> 
> +            Offset,
> 
> +            1,
> 
> +            &Entries[BarIndex].ResizableBarControl.Uint32
> 
> +            );
> 
> +  }
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> index 10b435d146..94b20f18e8 100644
> --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> @@ -1,7 +1,7 @@
>  /** @file
> 
>    Internal library declaration for PCI Bus module.
> 
> 
> 
> -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> 
> +Copyright (c) 2006 - 2020, Intel Corporation. All rights reserved.<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> 
>  **/
> 
> @@ -24,6 +24,10 @@ typedef struct {
>    UINT8                              *AllocRes;
> 
>  } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
> 
> 
> 
> +typedef enum {
> 
> +  PciResizableBarMin = 0x00,
> 
> +  PciResizableBarMax = 0xFF
> 
> +} PCI_RESIZEABLE_BAR_CAP;
> 
> 
> 
>  /**
> 
>    Retrieve the PCI Card device BAR information via PciIo interface.
> 
> @@ -156,4 +160,20 @@ PciHostBridgeEnumerator (
>    IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
> *PciResAlloc
> 
>    );
> 
> 
> 
> +/**
> 
> +  This function is used to program the Resizable BAR Register.
> 
> +
> 
> +  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
> 
> +  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
> 
> +                                PciResizableBarMin: set BAR to min size.
> 
> +
> 
> +  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
> 
> +  @retval other                 Some error occurred when enumerating the host
> bridge.
> 
> +
> 
> +**/
> 
> +EFI_STATUS
> 
> +PciProgramResizableBar (
> 
> +  IN PCI_IO_DEVICE          *PciIoDevice,
> 
> +  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
> 
> +  );
> 
>  #endif
> 
> diff --git a/MdeModulePkg/MdeModulePkg.dec
> b/MdeModulePkg/MdeModulePkg.dec
> index 9b52b34494..10c819ee39 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -2043,6 +2043,12 @@
>    # @Prompt Enable StatusCode via memory.
> 
> 
> gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE|BOOLE
> AN|0x00010023
> 
> 
> 
> +  ## Indicates if the PCIe Resizable BAR Capability Supported.<BR><BR>
> 
> +  #   TRUE  - PCIe Resizable BAR Capability is supported.<BR>
> 
> +  #   FALSE - PCIe Resizable BAR Capability is not supported.<BR>
> 
> +  # @Prompt Enable PCIe Resizable BAR Capability support.
> 
> +
> gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport|TR
> UE|BOOLEAN|0x10000024
> 
> +
> 
>  [PcdsPatchableInModule]
> 
>    ## Specify memory size with page number for PEI code when
> 
>    #  Loading Module at Fixed Address feature is enabled.
> 
> --
> 2.24.0.windows.2
> 
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#69478): https://edk2.groups.io/g/devel/message/69478
> Mute This Topic: https://groups.io/mt/79265865/1712937
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com]
> -=-=-=-=-=-=
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [edk2-devel] [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe Resizable BAR Capability
  2021-01-04  5:34   ` [edk2-devel] " Ni, Ray
@ 2021-01-04  6:39     ` Heng Luo
  0 siblings, 0 replies; 9+ messages in thread
From: Heng Luo @ 2021-01-04  6:39 UTC (permalink / raw)
  To: Ni, Ray, devel@edk2.groups.io; +Cc: Wu, Hao A

Thank Ray, I will send out patch V2 following you comments, and also change Copyright year to 2021.

Thanks,
heng

> -----Original Message-----
> From: Ni, Ray <ray.ni@intel.com>
> Sent: Monday, January 4, 2021 1:34 PM
> To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> Cc: Wu, Hao A <hao.a.wu@intel.com>
> Subject: RE: [edk2-devel] [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe:
> Support PCIe Resizable BAR Capability
> 
> 1. PcdPcieResizableBarCapabilitySupport: can you rename to
> PcdPcieResizableBarSupport?
>     I understand your name is more precise but it's a bit long.:)
> 
> 2.
>      //
>       // Try to adjust the Devices' BAR size to minimum value in first loop
>       // if enabling PCIe Resizable BAR Capability support.
>       // call PciHostBridgeAdjustAllocation() only if BAR size is not adjust.
>       //
> -->
>      //
>      // When resource conflict happens, adjust the BAR size first.
>      // Only when adjusting BAR size doesn't help or BAR size cannot be
> adjusted,
>      // reject the device who requests largest resource that causes conflict.
>      //
> 3. PCI_RESIZEABLE_BAR_CAP: Can you please rename the type to
> PCI_RESIZABLE_BAR_OPERATION?
>     Similar comments to ResizableBarCap. Can you please rename to
> ResizableBarOp?
> 
> 4. Capabilities = Entries[BarIndex].ResizableBarControl.Bits.BarSizeCapability
> << 28
>                   | Entries[BarIndex].ResizableBarCapability.Bits.BarSizeCapability;
> 
> You need to use LShiftU64()
> 
> 5.   Entries[BarIndex].ResizableBarControl.Bits.BarIndex
> I suggest you rename BarIndex to Index. Because it can avoid confusion. So
> the above code will be:
>       Entries[Index].ResizableBarControl.Bits.BarIndex
> 
> Thanks,
> Ray
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Heng
> > Luo
> > Sent: Monday, December 28, 2020 4:26 PM
> > To: devel@edk2.groups.io
> > Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> > Subject: [edk2-devel] [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe:
> > Support PCIe Resizable BAR Capability
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=313
> >
> > Add PcdPcieResizableBarCapabilitySupport to enable/disable PCIe
> > Resizable BAR Capability fearture.
> > Program the Resizable BAR Register if the device suports PCIe
> > Resizable BAR Capability and PcdPcieResizableBarCapabilitySupport is
> TRUE.
> >
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Hao A Wu <hao.a.wu@intel.com>
> > Signed-off-by: Heng Luo <heng.luo@intel.com>
> > ---
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h               |   4 +++-
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf          |   3 ++-
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c |  27
> > ++++++++++++++++++++++++++-
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h |  12
> > +++++++++++-
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c               | 185
> >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> > +++++++++++++++++++++++++++++++++++++++++++--------------
> >  MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h               |  22
> > +++++++++++++++++++++-
> >  MdeModulePkg/MdeModulePkg.dec                         |   6 ++++++
> >  7 files changed, 240 insertions(+), 19 deletions(-)
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > index d4113993c8..add1756d5c 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    Header files and data structures needed by PCI Bus module.
> >
> >
> >
> > -Copyright (c) 2006 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> >  **/
> >
> > @@ -280,6 +280,8 @@ struct _PCI_IO_DEVICE {
> >    // This field is used to support this case.
> >
> >    //
> >
> >    UINT16                                    BridgeIoAlignment;
> >
> > +  UINT32                                    ResizableBarOffset;
> >
> > +  UINT32                                    ResizableBarNumber;
> >
> >  };
> >
> >
> >
> >  #define PCI_IO_DEVICE_FROM_PCI_IO_THIS(a) \
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > index 9284998f36..b3e5213b92 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > @@ -2,7 +2,7 @@
> >  #  The PCI bus driver will probe all PCI devices and allocate MMIO
> > and IO space for these devices.
> >
> >  #  Please use PCD feature flag PcdPciBusHotplugDeviceSupport to
> > enable hot plug supporting.
> >
> >  #
> >
> > -#  Copyright (c) 2006 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +#  Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  #
> >
> >  #  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  #
> >
> > @@ -106,6 +106,7 @@
> >    gEfiMdeModulePkgTokenSpaceGuid.PcdAriSupport                  ##
> CONSUMES
> >
> >    gEfiMdeModulePkgTokenSpaceGuid.PcdMrIovSupport                ##
> > CONSUMES
> >
> >    gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration    ##
> > SOMETIMES_CONSUMES
> >
> > +
> gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport
> > ## CONSUMES
> >
> >
> >
> >  [UserExtensions.TianoCore."ExtraFiles"]
> >
> >    PciBusDxeExtra.uni
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> > index 6c68a97d4e..d1d38241da 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    PCI emumeration support functions implementation for PCI Bus module.
> >
> >
> >
> > -Copyright (c) 2006 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > @@ -2426,6 +2426,31 @@ CreatePciIoDevice (
> >      }
> >
> >    }
> >
> >
> >
> > +  PciIoDevice->ResizableBarOffset = 0;
> >
> > +  if (PcdGetBool (PcdPcieResizableBarCapabilitySupport)) {
> >
> > +    Status = LocatePciExpressCapabilityRegBlock (
> >
> > +               PciIoDevice,
> >
> > +               PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID,
> >
> > +               &PciIoDevice->ResizableBarOffset,
> >
> > +               NULL
> >
> > +               );
> >
> > +    if (!EFI_ERROR (Status)) {
> >
> > +      PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> > ResizableBarControl;
> >
> > +      UINT32                                                  Offset;
> >
> > +      Offset = PciIoDevice->ResizableBarOffset + sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
> >
> > +                + sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY),
> >
> > +      PciIo->Pci.Read (
> >
> > +              PciIo,
> >
> > +              EfiPciIoWidthUint8,
> >
> > +              Offset,
> >
> > +              sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL),
> >
> > +              &ResizableBarControl
> >
> > +              );
> >
> > +      PciIoDevice->ResizableBarNumber =
> > ResizableBarControl.Bits.ResizableBarNumber;
> >
> > +      PciProgramResizableBar (PciIoDevice, PciResizableBarMax);
> >
> > +    }
> >
> > +  }
> >
> > +
> >
> >    //
> >
> >    // Initialize the reserved resource list
> >
> >    //
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> > index d76606c7df..919d678e2f 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    PCI enumeration support functions declaration for PCI Bus module.
> >
> >
> >
> > -Copyright (c) 2006 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> >  **/
> >
> > @@ -467,4 +467,14 @@ DumpPpbPaddingResource (
> >    IN PCI_BAR_TYPE                     ResourceType
> >
> >    );
> >
> >
> >
> > +/**
> >
> > +  Dump the PCI BAR information.
> >
> > +
> >
> > +  @param PciIoDevice     PCI IO instance.
> >
> > +**/
> >
> > +VOID
> >
> > +DumpPciBars (
> >
> > +  IN PCI_IO_DEVICE                    *PciIoDevice
> >
> > +  );
> >
> > +
> >
> >  #endif
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> > index 72690ab647..1a7ddb4455 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    Internal library implementation for PCI Bus module.
> >
> >
> >
> > -Copyright (c) 2006 - 2019, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > @@ -377,6 +377,60 @@ DumpResourceMap (
> >    }
> >
> >  }
> >
> >
> >
> > +/**
> >
> > +  Adjust the Devices' BAR size to minimum value if it support
> > + Resizeable BAR
> > capability.
> >
> > +
> >
> > +  @param RootBridgeDev  Pointer to instance of PCI_IO_DEVICE..
> >
> > +
> >
> > +  @return TRUE if BAR size is adjusted.
> >
> > +
> >
> > +**/
> >
> > +BOOLEAN
> >
> > +AdjustPciDeviceBarSize (
> >
> > +  IN PCI_IO_DEVICE *RootBridgeDev
> >
> > +  )
> >
> > +{
> >
> > +  PCI_IO_DEVICE     *PciIoDevice;
> >
> > +  LIST_ENTRY        *CurrentLink;
> >
> > +  BOOLEAN           Adjusted;
> >
> > +  UINTN             Offset;
> >
> > +  UINTN             BarIndex;
> >
> > +
> >
> > +  Adjusted    = FALSE;
> >
> > +  CurrentLink = RootBridgeDev->ChildList.ForwardLink;
> >
> > +
> >
> > +  while (CurrentLink != NULL && CurrentLink !=
> > + &RootBridgeDev->ChildList) {
> >
> > +    PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
> >
> > +
> >
> > +    if (IS_PCI_BRIDGE (&PciIoDevice->Pci)) {
> >
> > +      if (AdjustPciDeviceBarSize (PciIoDevice)) {
> >
> > +        Adjusted = TRUE;
> >
> > +      }
> >
> > +    } else {
> >
> > +      if (PciIoDevice->ResizableBarOffset != 0) {
> >
> > +        DEBUG ((
> >
> > +          DEBUG_ERROR,
> >
> > +          "PciBus: [%02x|%02x|%02x] Adjust Pci Device Bar Size\n",
> >
> > +          PciIoDevice->BusNumber, PciIoDevice->DeviceNumber,
> > + PciIoDevice-
> > >FunctionNumber
> >
> > +          ));
> >
> > +        PciProgramResizableBar (PciIoDevice, PciResizableBarMin);
> >
> > +        //
> >
> > +        // Start to parse the bars
> >
> > +        //
> >
> > +        for (Offset = 0x10, BarIndex = 0; Offset <= 0x24 && BarIndex
> > + <
> > PCI_MAX_BAR; BarIndex++) {
> >
> > +          Offset = PciParseBar (PciIoDevice, Offset, BarIndex);
> >
> > +        }
> >
> > +        Adjusted = TRUE;
> >
> > +        DEBUG_CODE (DumpPciBars (PciIoDevice););
> >
> > +      }
> >
> > +    }
> >
> > +
> >
> > +    CurrentLink = CurrentLink->ForwardLink;
> >
> > +  }
> >
> > +
> >
> > +  return Adjusted;
> >
> > +}
> >
> > +
> >
> >  /**
> >
> >    Submits the I/O and memory resource requirements for the specified
> > PCI Host Bridge.
> >
> >
> >
> > @@ -422,6 +476,10 @@ PciHostBridgeResourceAllocator (
> >    PCI_RESOURCE_NODE                              PMem64Pool;
> >
> >    EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD
> HandleExtendedData;
> >
> >    EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD
> > AllocFailExtendedData;
> >
> > +  BOOLEAN                                        ResizableBarNeedAdjust;
> >
> > +  BOOLEAN                                        ResizableBarAdjusted;
> >
> > +
> >
> > +  ResizableBarNeedAdjust = PcdGetBool
> > (PcdPcieResizableBarCapabilitySupport);
> >
> >
> >
> >    //
> >
> >    // It may try several times if the resource allocation fails
> >
> > @@ -703,19 +761,30 @@ PciHostBridgeResourceAllocator (
> >              sizeof (AllocFailExtendedData)
> >
> >              );
> >
> >
> >
> > -      Status = PciHostBridgeAdjustAllocation (
> >
> > -                 &IoPool,
> >
> > -                 &Mem32Pool,
> >
> > -                 &PMem32Pool,
> >
> > -                 &Mem64Pool,
> >
> > -                 &PMem64Pool,
> >
> > -                 IoResStatus,
> >
> > -                 Mem32ResStatus,
> >
> > -                 PMem32ResStatus,
> >
> > -                 Mem64ResStatus,
> >
> > -                 PMem64ResStatus
> >
> > -                 );
> >
> > -
> >
> > +      //
> >
> > +      // Try to adjust the Devices' BAR size to minimum value in
> > + first loop
> >
> > +      // if enabling PCIe Resizable BAR Capability support.
> >
> > +      // call PciHostBridgeAdjustAllocation() only if BAR size is not adjust.
> >
> > +      //
> >
> > +      ResizableBarAdjusted = FALSE;
> >
> > +      if (ResizableBarNeedAdjust) {
> >
> > +        ResizableBarAdjusted = AdjustPciDeviceBarSize
> > + (RootBridgeDev);
> >
> > +        ResizableBarNeedAdjust = FALSE;
> >
> > +      }
> >
> > +      if (!ResizableBarAdjusted) {
> >
> > +        Status = PciHostBridgeAdjustAllocation (
> >
> > +                  &IoPool,
> >
> > +                  &Mem32Pool,
> >
> > +                  &PMem32Pool,
> >
> > +                  &Mem64Pool,
> >
> > +                  &PMem64Pool,
> >
> > +                  IoResStatus,
> >
> > +                  Mem32ResStatus,
> >
> > +                  PMem32ResStatus,
> >
> > +                  Mem64ResStatus,
> >
> > +                  PMem64ResStatus
> >
> > +                  );
> >
> > +      }
> >
> >        //
> >
> >        // Destroy all the resource tree
> >
> >        //
> >
> > @@ -1651,3 +1720,91 @@ PciHostBridgeEnumerator (
> >
> >
> >    return EFI_SUCCESS;
> >
> >  }
> >
> > +
> >
> > +/**
> >
> > +  This function is used to program the Resizable BAR Register.
> >
> > +
> >
> > +  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
> >
> > +  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
> >
> > +                                PciResizableBarMin: set BAR to min size.
> >
> > +
> >
> > +  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
> >
> > +  @retval other                 Some error occurred when enumerating the host
> > bridge.
> >
> > +
> >
> > +**/
> >
> > +EFI_STATUS
> >
> > +PciProgramResizableBar (
> >
> > +  IN PCI_IO_DEVICE          *PciIoDevice,
> >
> > +  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
> >
> > +  )
> >
> > +{
> >
> > +  EFI_PCI_IO_PROTOCOL  *PciIo;
> >
> > +  UINT64                Capabilities;
> >
> > +  UINT32                BarIndex;
> >
> > +  UINT32                Offset;
> >
> > +  INTN                  Bit;
> >
> > +  UINTN                 ResizableBarNumber;
> >
> > +  EFI_STATUS            Status;
> >
> > +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> > Entries[PCI_MAX_BAR];
> >
> > +
> >
> > +  ASSERT (PciIoDevice->ResizableBarOffset != 0);
> >
> > +
> >
> > +  DEBUG ((DEBUG_INFO, "   Programs Resizable BAR register, offset:
> 0x%08x,
> > number: %d\n",
> >
> > +        PciIoDevice->ResizableBarOffset,
> > + PciIoDevice->ResizableBarNumber));
> >
> > +
> >
> > +  ResizableBarNumber = MIN (PciIoDevice->ResizableBarNumber,
> > PCI_MAX_BAR);
> >
> > +  PciIo = &PciIoDevice->PciIo;
> >
> > +  Status = PciIo->Pci.Read (
> >
> > +          PciIo,
> >
> > +          EfiPciIoWidthUint8,
> >
> > +          PciIoDevice->ResizableBarOffset + sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER),
> >
> > +          sizeof
> > + (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY)
> > * ResizableBarNumber,
> >
> > +          (VOID *)(&Entries)
> >
> > +          );
> >
> > +  ASSERT_EFI_ERROR (Status);
> >
> > +
> >
> > +  for (BarIndex = 0; BarIndex < ResizableBarNumber; BarIndex++) {
> >
> > +
> >
> > +    //
> >
> > +    // When the bit of Capabilities Set, indicates that the Function
> > + supports
> >
> > +    // operating with the BAR sized to (2^Bit) MB.
> >
> > +    // Example:
> >
> > +    // Bit 0 is set: supports operating with the BAR sized to 1 MB
> >
> > +    // Bit 1 is set: supports operating with the BAR sized to 2 MB
> >
> > +    // Bit n is set: supports operating with the BAR sized to (2^n)
> > + MB
> >
> > +    //
> >
> > +    Capabilities =
> > + Entries[BarIndex].ResizableBarControl.Bits.BarSizeCapability
> > << 28
> >
> > +                  |
> > + Entries[BarIndex].ResizableBarCapability.Bits.BarSizeCapability;
> >
> > +
> >
> > +    if (ResizableBarCap == PciResizableBarMax) {
> >
> > +      Bit = HighBitSet64(Capabilities);
> >
> > +    } else if (ResizableBarCap == PciResizableBarMin) {
> >
> > +      Bit = LowBitSet64(Capabilities);
> >
> > +    } else {
> >
> > +      ASSERT ((ResizableBarCap == PciResizableBarMax) ||
> > + (ResizableBarCap
> > == PciResizableBarMin));
> >
> > +    }
> >
> > +
> >
> > +    ASSERT (Bit >= 0);
> >
> > +
> >
> > +    Offset = PciIoDevice->ResizableBarOffset + sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_HEADER)
> >
> > +            + BarIndex * sizeof
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY)
> >
> > +            + OFFSET_OF
> > (PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY,
> > ResizableBarControl);
> >
> > +
> >
> > +    Entries[BarIndex].ResizableBarControl.Bits.BarSize = (UINT32)
> > + Bit;
> >
> > +    DEBUG ((
> >
> > +      DEBUG_INFO,
> >
> > +      "   Resizable Bar: Offset = 0x%x, Bar Size Capability = 0x%016lx, New
> Bar
> > Size = 0x%lx\n",
> >
> > +      OFFSET_OF (PCI_TYPE00,
> > Device.Bar[Entries[BarIndex].ResizableBarControl.Bits.BarIndex]),
> >
> > +      Capabilities, LShiftU64 (SIZE_1MB, Bit)
> >
> > +      ));
> >
> > +    PciIo->Pci.Write (
> >
> > +            PciIo,
> >
> > +            EfiPciIoWidthUint32,
> >
> > +            Offset,
> >
> > +            1,
> >
> > +            &Entries[BarIndex].ResizableBarControl.Uint32
> >
> > +            );
> >
> > +  }
> >
> > +
> >
> > +  return EFI_SUCCESS;
> >
> > +}
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> > index 10b435d146..94b20f18e8 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.h
> > @@ -1,7 +1,7 @@
> >  /** @file
> >
> >    Internal library declaration for PCI Bus module.
> >
> >
> >
> > -Copyright (c) 2006 - 2011, Intel Corporation. All rights
> > reserved.<BR>
> >
> > +Copyright (c) 2006 - 2020, Intel Corporation. All rights
> > +reserved.<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> >  **/
> >
> > @@ -24,6 +24,10 @@ typedef struct {
> >    UINT8                              *AllocRes;
> >
> >  } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
> >
> >
> >
> > +typedef enum {
> >
> > +  PciResizableBarMin = 0x00,
> >
> > +  PciResizableBarMax = 0xFF
> >
> > +} PCI_RESIZEABLE_BAR_CAP;
> >
> >
> >
> >  /**
> >
> >    Retrieve the PCI Card device BAR information via PciIo interface.
> >
> > @@ -156,4 +160,20 @@ PciHostBridgeEnumerator (
> >    IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL
> > *PciResAlloc
> >
> >    );
> >
> >
> >
> > +/**
> >
> > +  This function is used to program the Resizable BAR Register.
> >
> > +
> >
> > +  @param PciIoDevice            A pointer to the PCI_IO_DEVICE.
> >
> > +  @param ResizableBarCap        PciResizableBarMax: Set BAR to max size
> >
> > +                                PciResizableBarMin: set BAR to min size.
> >
> > +
> >
> > +  @retval EFI_SUCCESS           Successfully enumerated the host bridge.
> >
> > +  @retval other                 Some error occurred when enumerating the host
> > bridge.
> >
> > +
> >
> > +**/
> >
> > +EFI_STATUS
> >
> > +PciProgramResizableBar (
> >
> > +  IN PCI_IO_DEVICE          *PciIoDevice,
> >
> > +  IN PCI_RESIZEABLE_BAR_CAP ResizableBarCap
> >
> > +  );
> >
> >  #endif
> >
> > diff --git a/MdeModulePkg/MdeModulePkg.dec
> > b/MdeModulePkg/MdeModulePkg.dec index 9b52b34494..10c819ee39
> 100644
> > --- a/MdeModulePkg/MdeModulePkg.dec
> > +++ b/MdeModulePkg/MdeModulePkg.dec
> > @@ -2043,6 +2043,12 @@
> >    # @Prompt Enable StatusCode via memory.
> >
> >
> >
> gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory|FALSE|BOOL
> E
> > AN|0x00010023
> >
> >
> >
> > +  ## Indicates if the PCIe Resizable BAR Capability
> > + Supported.<BR><BR>
> >
> > +  #   TRUE  - PCIe Resizable BAR Capability is supported.<BR>
> >
> > +  #   FALSE - PCIe Resizable BAR Capability is not supported.<BR>
> >
> > +  # @Prompt Enable PCIe Resizable BAR Capability support.
> >
> > +
> >
> gEfiMdeModulePkgTokenSpaceGuid.PcdPcieResizableBarCapabilitySupport|T
> R
> > UE|BOOLEAN|0x10000024
> >
> > +
> >
> >  [PcdsPatchableInModule]
> >
> >    ## Specify memory size with page number for PEI code when
> >
> >    #  Loading Module at Fixed Address feature is enabled.
> >
> > --
> > 2.24.0.windows.2
> >
> >
> >
> > -=-=-=-=-=-=
> > Groups.io Links: You receive all messages sent to this group.
> > View/Reply Online (#69478):
> > https://edk2.groups.io/g/devel/message/69478
> > Mute This Topic: https://groups.io/mt/79265865/1712937
> > Group Owner: devel+owner@edk2.groups.io
> > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com]
> > -=-=-=-=-=-=
> >


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
  2020-12-29  1:55   ` Heng Luo
  2021-01-04  0:58     ` 回复: " gaoliming
@ 2021-01-07 14:51     ` Cindy Roberts
  2021-01-08  0:44       ` 回复: " gaoliming
  1 sibling, 1 reply; 9+ messages in thread
From: Cindy Roberts @ 2021-01-07 14:51 UTC (permalink / raw)
  To: devel, heng.luo

Stop!

Cindy

> On Jan 7, 2021, at 12:32 AM, Heng Luo <heng.luo@intel.com> wrote:
> 
> Hi Liming,
> Ray and I have evaluated the impact, we think only UefiShellDebug1CommandsLib/Pci.c uses this structure, I have change  this file in this patch, we think it doesn't impact Edk2 and Edk2Platforms.
> 
> Thanks,
> Heng
> 
>> -----Original Message-----
>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>> gaoliming
>> Sent: Tuesday, December 29, 2020 9:46 AM
>> To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
>> Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
>> Subject: 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for
>> Resizable BAR Capability
>> 
>> Heng:
>>  This is the incompatible change. Have you evaluated its impact in Edk2 and
>> Edk2Platforms?
>> 
>> Thanks
>> Liming
>>> -----邮件原件-----
>>> 发件人: bounce+27952+69477+4905953+8761045@groups.io
>>> <bounce+27952+69477+4905953+8761045@groups.io> 代表 Heng Luo
>>> 发送时间: 2020年12月28日 16:26
>>> 收件人: devel@edk2.groups.io
>>> 抄送: Ray Ni <ray.ni@intel.com>; Hao A Wu <hao.a.wu@intel.com>
>>> 主题: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
>>> BAR Capability
>>> 
>>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138
>>> 
>>> Define structures for Resizable BAR Capability in
>>> MdePkg/Include/IndustryStandard/PciExpress21.h,
>>> Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
>>> to use new structures.
>>> 
>>> Cc: Ray Ni <ray.ni@intel.com>
>>> Cc: Hao A Wu <hao.a.wu@intel.com>
>>> Signed-off-by: Heng Luo <heng.luo@intel.com>
>>> ---
>>> MdePkg/Include/IndustryStandard/PciExpress21.h    | 30
>>> +++++++++++++++++++++++++-----
>>> ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
>>> 2 files changed, 28 insertions(+), 8 deletions(-)
>>> 
>>> diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h
>>> b/MdePkg/Include/IndustryStandard/PciExpress21.h
>>> index 2c07cb560e..b7629444eb 100644
>>> --- a/MdePkg/Include/IndustryStandard/PciExpress21.h
>>> +++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
>>> @@ -1,7 +1,7 @@
>>> /** @file
>>> 
>>>   Support for the latest PCI standard.
>>> 
>>> 
>>> 
>>> -  Copyright (c) 2006 - 2018, Intel Corporation. All rights
>>> reserved.<BR>
>>> 
>>> +  Copyright (c) 2006 - 2020, Intel Corporation. All rights
>>> + reserved.<BR>
>>> 
>>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>>> 
>>>   SPDX-License-Identifier: BSD-2-Clause-Patent
>>> 
>>> 
>>> 
>>> @@ -632,10 +632,30 @@ typedef struct {  #define
>>> PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID
>>> 0x0015
>>> 
>>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1  0x1
>>> 
>>> 
>>> 
>>> +typedef union {
>>> 
>>> +  struct {
>>> 
>>> +    UINT32 Reserved:4;
>>> 
>>> +    UINT32 BarSizeCapability:28;
>>> 
>>> +  } Bits;
>>> 
>>> +  UINT32   Uint32;
>>> 
>>> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
>>> 
>>> +
>>> 
>>> +
>>> 
>>> +typedef union {
>>> 
>>> +  struct {
>>> 
>>> +    UINT32 BarIndex:3;
>>> 
>>> +    UINT32 Reserved:2;
>>> 
>>> +    UINT32 ResizableBarNumber:3;
>>> 
>>> +    UINT32 BarSize:6;
>>> 
>>> +    UINT32 Reserved2:2;
>>> 
>>> +    UINT32 BarSizeCapability:16;
>>> 
>>> +  } Bits;
>>> 
>>> +  UINT32   Uint32;
>>> 
>>> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
>>> 
>>> +
>>> 
>>> typedef struct {
>>> 
>>> -  UINT32
>>> ResizableBarCapability;
>>> 
>>> -  UINT16
>>> ResizableBarControl;
>>> 
>>> -  UINT16
>>> Reserved;
>>> 
>>> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY
>>> ResizableBarCapability;
>>> 
>>> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
>>> ResizableBarControl;
>>> 
>>> } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
>>> 
>>> 
>>> 
>>> typedef struct {
>>> 
>>> @@ -643,7 +663,7 @@ typedef struct {
>>>   PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
>>> Capability[1];
>>> 
>>> } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
>>> 
>>> 
>>> 
>>> -#define GET_NUMBER_RESIZABLE_BARS(x)
>>> (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
>>> 
>>> +#define GET_NUMBER_RESIZABLE_BARS(x)
>>> (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
>>> 
>>> 
>>> 
>>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID
>>> 0x000E
>>> 
>>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1  0x1
>>> 
>>> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
>>> b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
>>> index 3e138188ce..5077d56fed 100644
>>> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
>>> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
>>> @@ -1,7 +1,7 @@
>>> /** @file
>>> 
>>>   Main file for Pci shell Debug1 function.
>>> 
>>> 
>>> 
>>> -  Copyright (c) 2005 - 2019, Intel Corporation. All rights
>>> reserved.<BR>
>>> 
>>> +  Copyright (c) 2005 - 2020, Intel Corporation. All rights
>>> + reserved.<BR>
>>> 
>>>   (C) Copyright 2013-2015 Hewlett-Packard Development Company,
>>> L.P.<BR>
>>> 
>>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
>>> 
>>>   SPDX-License-Identifier: BSD-2-Clause-Patent
>>> 
>>> @@ -5534,8 +5534,8 @@
>>> PrintInterpretedExtendedCompatibilityResizeableBar (
>>>       STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
>>> 
>>>       gShellDebug1HiiHandle,
>>> 
>>>       ItemCount+1,
>>> 
>>> -      Header->Capability[ItemCount].ResizableBarCapability,
>>> 
>>> -      Header->Capability[ItemCount].ResizableBarControl
>>> 
>>> +      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
>>> 
>>> +      Header->Capability[ItemCount].ResizableBarControl.Uint32
>>> 
>>>       );
>>> 
>>>   }
>>> 
>>> 
>>> 
>>> --
>>> 2.24.0.windows.2
>>> 
>>> 
>>> 
>>> -=-=-=-=-=-=
>>> Groups.io Links: You receive all messages sent to this group.
>>> View/Reply Online (#69477):
>>> https://edk2.groups.io/g/devel/message/69477
>>> Mute This Topic: https://groups.io/mt/79265864/4905953
>>> Group Owner: devel+owner@edk2.groups.io
>>> Unsubscribe: https://edk2.groups.io/g/devel/unsub
>>> [gaoliming@byosoft.com.cn]
>>> -=-=-=-=-=-=
>>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 
> 
> 
> 
> 
> 


^ permalink raw reply	[flat|nested] 9+ messages in thread

* 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability
  2021-01-07 14:51     ` Cindy Roberts
@ 2021-01-08  0:44       ` gaoliming
  0 siblings, 0 replies; 9+ messages in thread
From: gaoliming @ 2021-01-08  0:44 UTC (permalink / raw)
  To: devel, croberts4464, heng.luo; +Cc: 'Ni, Ray', gaoliming

Cindy:
  Do you find any impact by this change? 

Thanks
Liming
> -----邮件原件-----
> 发件人: bounce+27952+69934+4905953+8761045@groups.io
> <bounce+27952+69934+4905953+8761045@groups.io> 代表 Cindy Roberts
> via groups.io
> 发送时间: 2021年1月7日 22:52
> 收件人: devel@edk2.groups.io; heng.luo@intel.com
> 主题: Re: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
> BAR Capability
> 
> Stop!
> 
> Cindy
> 
> > On Jan 7, 2021, at 12:32 AM, Heng Luo <heng.luo@intel.com> wrote:
> >
> > Hi Liming,
> > Ray and I have evaluated the impact, we think only
> UefiShellDebug1CommandsLib/Pci.c uses this structure, I have change  this
> file in this patch, we think it doesn't impact Edk2 and Edk2Platforms.
> >
> > Thanks,
> > Heng
> >
> >> -----Original Message-----
> >> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> >> gaoliming
> >> Sent: Tuesday, December 29, 2020 9:46 AM
> >> To: devel@edk2.groups.io; Luo, Heng <heng.luo@intel.com>
> >> Cc: Ni, Ray <ray.ni@intel.com>; Wu, Hao A <hao.a.wu@intel.com>
> >> Subject: 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for
> >> Resizable BAR Capability
> >>
> >> Heng:
> >>  This is the incompatible change. Have you evaluated its impact in Edk2
> and
> >> Edk2Platforms?
> >>
> >> Thanks
> >> Liming
> >>> -----邮件原件-----
> >>> 发件人: bounce+27952+69477+4905953+8761045@groups.io
> >>> <bounce+27952+69477+4905953+8761045@groups.io> 代表 Heng Luo
> >>> 发送时间: 2020年12月28日 16:26
> >>> 收件人: devel@edk2.groups.io
> >>> 抄送: Ray Ni <ray.ni@intel.com>; Hao A Wu <hao.a.wu@intel.com>
> >>> 主题: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for Resizable
> >>> BAR Capability
> >>>
> >>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3138
> >>>
> >>> Define structures for Resizable BAR Capability in
> >>> MdePkg/Include/IndustryStandard/PciExpress21.h,
> >>> Change ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> >>> to use new structures.
> >>>
> >>> Cc: Ray Ni <ray.ni@intel.com>
> >>> Cc: Hao A Wu <hao.a.wu@intel.com>
> >>> Signed-off-by: Heng Luo <heng.luo@intel.com>
> >>> ---
> >>> MdePkg/Include/IndustryStandard/PciExpress21.h    | 30
> >>> +++++++++++++++++++++++++-----
> >>> ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c |  6 +++---
> >>> 2 files changed, 28 insertions(+), 8 deletions(-)
> >>>
> >>> diff --git a/MdePkg/Include/IndustryStandard/PciExpress21.h
> >>> b/MdePkg/Include/IndustryStandard/PciExpress21.h
> >>> index 2c07cb560e..b7629444eb 100644
> >>> --- a/MdePkg/Include/IndustryStandard/PciExpress21.h
> >>> +++ b/MdePkg/Include/IndustryStandard/PciExpress21.h
> >>> @@ -1,7 +1,7 @@
> >>> /** @file
> >>>
> >>>   Support for the latest PCI standard.
> >>>
> >>>
> >>>
> >>> -  Copyright (c) 2006 - 2018, Intel Corporation. All rights
> >>> reserved.<BR>
> >>>
> >>> +  Copyright (c) 2006 - 2020, Intel Corporation. All rights
> >>> + reserved.<BR>
> >>>
> >>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> >>>
> >>>   SPDX-License-Identifier: BSD-2-Clause-Patent
> >>>
> >>>
> >>>
> >>> @@ -632,10 +632,30 @@ typedef struct {  #define
> >>> PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_ID
> >>> 0x0015
> >>>
> >>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_RESIZABLE_BAR_VER1
> 0x1
> >>>
> >>>
> >>>
> >>> +typedef union {
> >>>
> >>> +  struct {
> >>>
> >>> +    UINT32 Reserved:4;
> >>>
> >>> +    UINT32 BarSizeCapability:28;
> >>>
> >>> +  } Bits;
> >>>
> >>> +  UINT32   Uint32;
> >>>
> >>> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY;
> >>>
> >>> +
> >>>
> >>> +
> >>>
> >>> +typedef union {
> >>>
> >>> +  struct {
> >>>
> >>> +    UINT32 BarIndex:3;
> >>>
> >>> +    UINT32 Reserved:2;
> >>>
> >>> +    UINT32 ResizableBarNumber:3;
> >>>
> >>> +    UINT32 BarSize:6;
> >>>
> >>> +    UINT32 Reserved2:2;
> >>>
> >>> +    UINT32 BarSizeCapability:16;
> >>>
> >>> +  } Bits;
> >>>
> >>> +  UINT32   Uint32;
> >>>
> >>> +} PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL;
> >>>
> >>> +
> >>>
> >>> typedef struct {
> >>>
> >>> -  UINT32
> >>> ResizableBarCapability;
> >>>
> >>> -  UINT16
> >>> ResizableBarControl;
> >>>
> >>> -  UINT16
> >>> Reserved;
> >>>
> >>> +
> PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CAPABILITY
> >>> ResizableBarCapability;
> >>>
> >>> +  PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_CONTROL
> >>> ResizableBarControl;
> >>>
> >>> } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY;
> >>>
> >>>
> >>>
> >>> typedef struct {
> >>>
> >>> @@ -643,7 +663,7 @@ typedef struct {
> >>>   PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR_ENTRY
> >>> Capability[1];
> >>>
> >>> } PCI_EXPRESS_EXTENDED_CAPABILITIES_RESIZABLE_BAR;
> >>>
> >>>
> >>>
> >>> -#define GET_NUMBER_RESIZABLE_BARS(x)
> >>> (((x->Capability[0].ResizableBarControl) & 0xE0) >> 5)
> >>>
> >>> +#define GET_NUMBER_RESIZABLE_BARS(x)
> >>> (x->Capability[0].ResizableBarControl.Bits.ResizableBarNumber)
> >>>
> >>>
> >>>
> >>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_ID
> >>> 0x000E
> >>>
> >>> #define PCI_EXPRESS_EXTENDED_CAPABILITY_ARI_CAPABILITY_VER1
> 0x1
> >>>
> >>> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> >>> b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> >>> index 3e138188ce..5077d56fed 100644
> >>> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> >>> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Pci.c
> >>> @@ -1,7 +1,7 @@
> >>> /** @file
> >>>
> >>>   Main file for Pci shell Debug1 function.
> >>>
> >>>
> >>>
> >>> -  Copyright (c) 2005 - 2019, Intel Corporation. All rights
> >>> reserved.<BR>
> >>>
> >>> +  Copyright (c) 2005 - 2020, Intel Corporation. All rights
> >>> + reserved.<BR>
> >>>
> >>>   (C) Copyright 2013-2015 Hewlett-Packard Development Company,
> >>> L.P.<BR>
> >>>
> >>>   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
> >>>
> >>>   SPDX-License-Identifier: BSD-2-Clause-Patent
> >>>
> >>> @@ -5534,8 +5534,8 @@
> >>> PrintInterpretedExtendedCompatibilityResizeableBar (
> >>>       STRING_TOKEN (STR_PCI_EXT_CAP_RESIZE_BAR),
> >>>
> >>>       gShellDebug1HiiHandle,
> >>>
> >>>       ItemCount+1,
> >>>
> >>> -      Header->Capability[ItemCount].ResizableBarCapability,
> >>>
> >>> -      Header->Capability[ItemCount].ResizableBarControl
> >>>
> >>> +      Header->Capability[ItemCount].ResizableBarCapability.Uint32,
> >>>
> >>> +      Header->Capability[ItemCount].ResizableBarControl.Uint32
> >>>
> >>>       );
> >>>
> >>>   }
> >>>
> >>>
> >>>
> >>> --
> >>> 2.24.0.windows.2
> >>>
> >>>
> >>>
> >>> -=-=-=-=-=-=
> >>> Groups.io Links: You receive all messages sent to this group.
> >>> View/Reply Online (#69477):
> >>> https://edk2.groups.io/g/devel/message/69477
> >>> Mute This Topic: https://groups.io/mt/79265864/4905953
> >>> Group Owner: devel+owner@edk2.groups.io
> >>> Unsubscribe: https://edk2.groups.io/g/devel/unsub
> >>> [gaoliming@byosoft.com.cn]
> >>> -=-=-=-=-=-=
> >>>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
> >
> >
> >
> 
> 
> 
> 
> 




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-01-08  0:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-28  8:26 [PATCH 1/2] MdePkg: Define structures for Resizable BAR Capability Heng Luo
2020-12-28  8:26 ` [PATCH 2/2] MdeModulePkg/Bus/Pci/PciBusDxe: Support PCIe " Heng Luo
2021-01-04  5:34   ` [edk2-devel] " Ni, Ray
2021-01-04  6:39     ` Heng Luo
2020-12-29  1:45 ` 回复: [edk2-devel] [PATCH 1/2] MdePkg: Define structures for " gaoliming
2020-12-29  1:55   ` Heng Luo
2021-01-04  0:58     ` 回复: " gaoliming
2021-01-07 14:51     ` Cindy Roberts
2021-01-08  0:44       ` 回复: " gaoliming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox