-----Original Message-----
From: Pierre Gondois <pierre.gond...@arm.com>
Sent: Friday, July 1, 2022 6:42 AM
To: Jeff Brasen <jbra...@nvidia.com>; devel@edk2.groups.io
Cc: sami.muja...@arm.com; alexei.fedo...@arm.com
Subject: Re: [PATCH 2/4] DynamicTablesPkg: AcpiSsdtPcieLibArm: Allow use
of segment number as UID
External email: Use caution opening links or attachments
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.PcdNonBsaCompliant16550SerialHi
d|
""|VOID*|0x40000008
+ # Use PCI segment numbers as UID
+
+
gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid|FALSE|B
OO
+ LEAN|0x40000009
+
[Guids]
gEdkiiDynamicTablesPkgTokenSpaceGuid = { 0xab226e66, 0x31d8,
0x4613, { 0x87, 0x9d, 0xd2, 0xfa, 0xb6, 0x10, 0x26, 0x3c } } diff
--git
a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenera
t
or.c
b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenera
t
or.c
index f0d15f69a4..85782af380 100644
---
a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenera
t
or.c
+++
b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGen
+++ erator.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/SsdtPcieLib
+++ Arm.inf
@@ -30,3 +30,6 @@
AcpiHelperLib
AmlLib
BaseLib
+
+[Pcd]
+ gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid