[edk2-devel] [PATCH v5 3/8] DynamicTablesPkg: IORT set reference to Id array only if present

Sami Mujawar sami.mujawar at arm.com
Tue Jul 12 14:31:36 UTC 2022


The IORT table generator is setting up a reference to ID array for
nodes even when the ID Mapping count is zero. This is not an issue as an
OS would only access the ID Reference if the ID mapping count is not zero.

However, it would be good to set the reference to ID array to zero when
the ID Mapping count is zero rather than populating it with an incorrect
value.

Signed-off-by: Sami Mujawar <sami.mujawar at arm.com>
Reviewed-by: Pierre Gondois <pierre.gondois at arm.com>
---

Notes:
    v5:
     - No code change since v1. Re-sending with v5 series.    [SAMI]
    
    v4:
     - No code change since v1. Re-sending with v4 series.    [SAMI]
    
    v3:
     - No code change since v1. Re-sending with v3 series.    [SAMI]
    
    v2:
     - No code change since v1. Re-sending with v2 series.    [SAMI]

 DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c | 27 +++++++++++---------
 1 file changed, 15 insertions(+), 12 deletions(-)

diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c
index daf9ff00c3deab4005814bbfcf1650469d1e7d92..a4dd3d4a895e0a1ae305c937d9a413665fb8e171 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/IortGenerator.c
@@ -876,9 +876,9 @@ AddNamedComponentNodes (
     NcNode->Node.NumIdMappings = NodeList->IdMappingCount;
 
     ObjectNameLength         = AsciiStrLen (NodeList->ObjectName) + 1;
-    NcNode->Node.IdReference =
-      (UINT32)(sizeof (EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE) +
-               (ALIGN_VALUE (ObjectNameLength, 4)));
+    NcNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
+                               0 : ((UINT32)(sizeof (EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE) +
+                                             (ALIGN_VALUE (ObjectNameLength, 4))));
 
     // Named Component specific data
     NcNode->Flags             = NodeList->Flags;
@@ -1007,7 +1007,8 @@ AddRootComplexNodes (
     RcNode->Node.Revision      = 1;
     RcNode->Node.Reserved      = EFI_ACPI_RESERVED_DWORD;
     RcNode->Node.NumIdMappings = NodeList->IdMappingCount;
-    RcNode->Node.IdReference   = sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);
+    RcNode->Node.IdReference   = (NodeList->IdMappingCount == 0) ?
+                                 0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);
 
     // Root Complex specific data
     RcNode->CacheCoherent     = NodeList->CacheCoherent;
@@ -1188,11 +1189,12 @@ AddSmmuV1V2Nodes (
     SmmuNode->Node.Revision      = 0;
     SmmuNode->Node.Reserved      = EFI_ACPI_RESERVED_DWORD;
     SmmuNode->Node.NumIdMappings = NodeList->IdMappingCount;
-    SmmuNode->Node.IdReference   = sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +
-                                   (NodeList->ContextInterruptCount *
-                                    sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)) +
-                                   (NodeList->PmuInterruptCount *
-                                    sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT));
+    SmmuNode->Node.IdReference   = (NodeList->IdMappingCount == 0) ?
+                                   0 : (sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +
+                                        (NodeList->ContextInterruptCount *
+                                         sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)) +
+                                        (NodeList->PmuInterruptCount *
+                                         sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)));
 
     // SMMU v1/v2 specific data
     SmmuNode->Base  = NodeList->BaseAddress;
@@ -1360,8 +1362,8 @@ AddSmmuV3Nodes (
     SmmuV3Node->Node.Revision      = 2;
     SmmuV3Node->Node.Reserved      = EFI_ACPI_RESERVED_DWORD;
     SmmuV3Node->Node.NumIdMappings = NodeList->IdMappingCount;
-    SmmuV3Node->Node.IdReference   =
-      sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);
+    SmmuV3Node->Node.IdReference   = (NodeList->IdMappingCount == 0) ?
+                                     0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);
 
     // SMMUv3 specific data
     SmmuV3Node->Base         = NodeList->BaseAddress;
@@ -1491,7 +1493,8 @@ AddPmcgNodes (
     PmcgNode->Node.Revision      = 1;
     PmcgNode->Node.Reserved      = EFI_ACPI_RESERVED_DWORD;
     PmcgNode->Node.NumIdMappings = NodeList->IdMappingCount;
-    PmcgNode->Node.IdReference   = sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);
+    PmcgNode->Node.IdReference   = (NodeList->IdMappingCount == 0) ?
+                                   0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);
 
     // PMCG specific data
     PmcgNode->Base                  = NodeList->BaseAddress;
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#91263): https://edk2.groups.io/g/devel/message/91263
Mute This Topic: https://groups.io/mt/92334074/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list