Hello Jeff,

From "PCI Firmware Specification Revision 3.3", s4.1.2.
"MCFG Table Description", the "PCI Segment Group Number" field of the
MCFG table must match the value returned by the _SEG object in the
corresponding object.

I didn't find any constraint about the _UID value. Would it be possible
to know why this is required ?

Regards,
Pierre

On 6/30/22 17:48, Jeff Brasen wrote:
Add support for selecting to use index or segment number as UID and name.
This allows the path of the nodes to be well known.

Signed-off-by: Jeff Brasen <jbra...@nvidia.com>
---
  DynamicTablesPkg/DynamicTablesPkg.dec         |  3 +++
  .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c    | 19 ++++++++++++++++++-
  .../Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf |  3 +++
  3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec 
b/DynamicTablesPkg/DynamicTablesPkg.dec
index 9b74c5a671..a890a048be 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dec
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -57,5 +57,8 @@
    # Non BSA Compliant 16550 Serial HID
    
gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdNonBsaCompliant16550SerialHid|""|VOID*|0x40000008
+ # Use PCI segment numbers as UID
+  
gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid|FALSE|BOOLEAN|0x40000009
+
  [Guids]
    gEdkiiDynamicTablesPkgTokenSpaceGuid = { 0xab226e66, 0x31d8, 0x4613, { 
0x87, 0x9d, 0xd2, 0xfa, 0xb6, 0x10, 0x26, 0x3c } }
diff --git 
a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c 
b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c
index f0d15f69a4..85782af380 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c
@@ -996,6 +996,7 @@ BuildSsdtPciTableEx (
    UINTN                         Index;
    EFI_ACPI_DESCRIPTION_HEADER   **TableList;
    ACPI_PCI_GENERATOR            *Generator;
+  UINT32                        Uid;
ASSERT (This != NULL);
    ASSERT (AcpiTableInfo != NULL);
@@ -1051,13 +1052,29 @@ BuildSsdtPciTableEx (
    *Table = TableList;
for (Index = 0; Index < PciCount; Index++) {
+    if (PcdGetBool (PcdPciUseSegmentAsUid)) {
+      Uid = PciInfo[Index].PciSegmentGroupNumber;
+      if (Uid > MAX_PCI_ROOT_COMPLEXES_SUPPORTED) {
+        DEBUG ((
+          DEBUG_ERROR,
+          "ERROR: SSDT-PCI: Pci root complexes segment number: %d."
+          " Greater than maximum number of Pci root complexes supported = 
%d.\n",
+          Uid,
+          MAX_PCI_ROOT_COMPLEXES_SUPPORTED
+          ));
+        return EFI_INVALID_PARAMETER;
+      }
+    } else {
+      Uid = Index;
+    }
+
      // Build a SSDT table describing the Pci devices.
      Status = BuildSsdtPciTable (
                 Generator,
                 CfgMgrProtocol,
                 AcpiTableInfo,
                 &PciInfo[Index],
-               Index,
+               Uid,
                 &TableList[Index]
                 );
      if (EFI_ERROR (Status)) {
diff --git 
a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf 
b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf
index 283b564801..431e32a777 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf
@@ -30,3 +30,6 @@
    AcpiHelperLib
    AmlLib
    BaseLib
+
+[Pcd]
+  gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90977): https://edk2.groups.io/g/devel/message/90977
Mute This Topic: https://groups.io/mt/92089320/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to