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