summaryrefslogtreecommitdiffstats
path: root/DynamicTablesPkg
diff options
context:
space:
mode:
authorJeff Brasen <jbrasen@nvidia.com>2022-09-06 14:33:56 -0600
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2022-09-15 16:33:25 +0000
commit8c92a9508e16dc78561f1a49917a9d489af0b272 (patch)
tree73f3e10a25e36ebab0a2ac6f359e87d500bab2e1 /DynamicTablesPkg
parent45297e6c9bd1be53b3c462adb9b37b4df2ea8681 (diff)
downloadedk2-8c92a9508e16dc78561f1a49917a9d489af0b272.tar.gz
edk2-8c92a9508e16dc78561f1a49917a9d489af0b272.tar.bz2
edk2-8c92a9508e16dc78561f1a49917a9d489af0b272.zip
DynamicTablesPkg: AcpiSsdtPcieLibArm: Allow use of segment number as UID
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. For example, if the PCIe node needs to be notified from by an interrupt for a Generic Event Device Signed-off-by: Jeff Brasen <jbrasen@nvidia.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Diffstat (limited to 'DynamicTablesPkg')
-rw-r--r--DynamicTablesPkg/DynamicTablesPkg.dec3
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c19
-rw-r--r--DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf3
3 files changed, 24 insertions, 1 deletions
diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
index cc34c2bdd6..adc2e67cbf 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dec
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -60,5 +60,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 d82f071e85..85098752c6 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c
@@ -981,6 +981,7 @@ BuildSsdtPciTableEx (
UINTN Index;
EFI_ACPI_DESCRIPTION_HEADER **TableList;
ACPI_PCI_GENERATOR *Generator;
+ UINT32 Uid;
ASSERT (This != NULL);
ASSERT (AcpiTableInfo != NULL);
@@ -1036,13 +1037,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 b38a4e9d34..c2a1acb570 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf
@@ -30,3 +30,6 @@
AmlLib
BaseLib
SsdtPcieSupportLib
+
+[Pcd]
+ gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid