diff options
author | Jeff Brasen <jbrasen@nvidia.com> | 2022-09-06 14:33:56 -0600 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2022-09-15 16:33:25 +0000 |
commit | 8c92a9508e16dc78561f1a49917a9d489af0b272 (patch) | |
tree | 73f3e10a25e36ebab0a2ac6f359e87d500bab2e1 /DynamicTablesPkg/Library/Acpi | |
parent | 45297e6c9bd1be53b3c462adb9b37b4df2ea8681 (diff) | |
download | edk2-8c92a9508e16dc78561f1a49917a9d489af0b272.zip edk2-8c92a9508e16dc78561f1a49917a9d489af0b272.tar.gz edk2-8c92a9508e16dc78561f1a49917a9d489af0b272.tar.bz2 |
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/Library/Acpi')
-rw-r--r-- | DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 19 | ||||
-rw-r--r-- | DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf | 3 |
2 files changed, 21 insertions, 1 deletions
diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index d82f071..8509875 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 b38a4e9..c2a1acb 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
|