From b2bbe3df54704da40a8f520e7b0ea41dbe00a57f Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 8 Dec 2021 16:06:28 +0000 Subject: [PATCH] DynamicTablesPkg: Remove PPTT ID structure from ACPI 6.4 generator Bugzilla: 3697 (https://bugzilla.tianocore.org/show_bug.cgi?id=3697) ACPI 6.3A deprecated PPTT ID (type 2) structure which was subsequently removed in ACPI 6.4. Therefore remove support for generating PPTT ID structures. Mantis ID for removing PPTT type 2 structure: 2072 (https://mantis.uefi.org/mantis/view.php?id=2072) Signed-off-by: Chris Jones Reviewed-by: Sami Mujawar --- .../Include/ArmNameSpaceObjects.h | 23 +-- .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c | 154 +----------------- .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h | 4 - 3 files changed, 3 insertions(+), 178 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 22b37edfab..3246e88847 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -50,7 +50,7 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info EArmObjCacheInfo, ///< 28 - Cache Info - EArmObjProcNodeIdInfo, ///< 29 - Processor Node ID Info + EArmObjReserved29, ///< 29 - Reserved EArmObjCmRef, ///< 30 - CM Object Reference EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi @@ -747,27 +747,6 @@ typedef struct CmArmCacheInfo { UINT16 LineSize; } CM_ARM_CACHE_INFO; -/** A structure that describes the ID Structure (Type 2) in PPTT - - ID: EArmObjProcNodeIdInfo -*/ -typedef struct CmArmProcNodeIdInfo { - /// A unique token used to identify this object - CM_OBJECT_TOKEN Token; - // Vendor ID (as described in ACPI ID registry) - UINT32 VendorId; - /// First level unique node ID - UINT64 Level1Id; - /// Second level unique node ID - UINT64 Level2Id; - /// Major revision of the node - UINT16 MajorRev; - /// Minor revision of the node - UINT16 MinorRev; - /// Spin revision of the node - UINT16 SpinRev; -} CM_ARM_PROC_NODE_ID_INFO; - /** A structure that describes a reference to another Configuration Manager object. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index f78bbed7c1..58ad338d33 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -34,7 +34,6 @@ The following Configuration Manager Object(s) are used by this Generator: - EArmObjProcHierarchyInfo (REQUIRED) - EArmObjCacheInfo - - EArmObjProcNodeIdInfo - EArmObjCmRef - EArmObjGicCInfo (REQUIRED) */ @@ -59,16 +58,6 @@ GET_OBJECT_LIST ( CM_ARM_CACHE_INFO ); -/** - This macro expands to a function that retrieves the ID information for - Processor Hierarchy Nodes from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjProcNodeIdInfo, - CM_ARM_PROC_NODE_ID_INFO - ); - /** This macro expands to a function that retrieves the cross-CM-object- reference information from the Configuration Manager. @@ -131,15 +120,6 @@ GET_SIZE_OF_PPTT_STRUCTS ( CM_ARM_CACHE_INFO ); -/** This macro expands to a function that retrieves the amount of memory - required to store the ID Structures (Type 2) and updates the Node Indexer. -*/ -GET_SIZE_OF_PPTT_STRUCTS ( - IdStructs, - sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_ID), - CM_ARM_PROC_NODE_ID_INFO - ); - /** Search the Node Indexer and return the indexed PPTT node with the given Token. @@ -373,8 +353,8 @@ AddPrivateResources ( } // The Node indexer has the Processor hierarchy nodes at the begining - // followed by the cache structs and Id structs. Therefore we can - // skip the Processor hierarchy nodes in the node indexer search. + // followed by the cache structs. Therefore we can skip the Processor + // hierarchy nodes in the node indexer search. Status = GetPpttNodeReferencedByToken ( Generator->CacheStructIndexedList, (Generator->ProcTopologyStructCount - @@ -969,71 +949,6 @@ AddCacheTypeStructures ( return EFI_SUCCESS; } -/** - Update the ID Type Structure (Type 2) information. - - This function populates the ID Type Structures with information from - the Configuration Manager and and adds this information to the PPTT table. - - @param [in] Generator Pointer to the PPTT Generator. - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - @param [in] Pptt Pointer to PPTT table structure. - @param [in] NodesStartOffset Offset from the start of PPTT table to the - start of ID Type Structures. - - @retval EFI_SUCCESS Structures updated successfully. - @retval EFI_INVALID_PARAMETER A parameter is invalid. - @retval EFI_NOT_FOUND A required object was not found. -**/ -STATIC -EFI_STATUS -AddIdTypeStructures ( - IN CONST ACPI_PPTT_GENERATOR *CONST Generator, - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CONST EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER *Pptt, - IN CONST UINT32 NodesStartOffset - ) -{ - EFI_ACPI_6_3_PPTT_STRUCTURE_ID *IdStruct; - CM_ARM_PROC_NODE_ID_INFO *ProcIdInfoNode; - PPTT_NODE_INDEXER *IdStructIterator; - UINT32 NodeCount; - - ASSERT ( - (Generator != NULL) && - (CfgMgrProtocol != NULL) && - (Pptt != NULL) - ); - - IdStruct = (EFI_ACPI_6_3_PPTT_STRUCTURE_ID *)((UINT8 *)Pptt + NodesStartOffset); - - IdStructIterator = Generator->IdStructIndexedList; - NodeCount = Generator->IdStructCount; - while (NodeCount-- != 0) { - ProcIdInfoNode = (CM_ARM_PROC_NODE_ID_INFO *)IdStructIterator->Object; - - // Populate the node - IdStruct->Type = EFI_ACPI_6_3_PPTT_TYPE_ID; - IdStruct->Length = sizeof (EFI_ACPI_6_3_PPTT_STRUCTURE_ID); - IdStruct->Reserved[0] = EFI_ACPI_RESERVED_BYTE; - IdStruct->Reserved[1] = EFI_ACPI_RESERVED_BYTE; - IdStruct->VendorId = ProcIdInfoNode->VendorId; - IdStruct->Level1Id = ProcIdInfoNode->Level1Id; - IdStruct->Level2Id = ProcIdInfoNode->Level2Id; - IdStruct->MajorRev = ProcIdInfoNode->MajorRev; - IdStruct->MinorRev = ProcIdInfoNode->MinorRev; - IdStruct->SpinRev = ProcIdInfoNode->SpinRev; - - // Next ID Type Structure - IdStruct = (EFI_ACPI_6_3_PPTT_STRUCTURE_ID *)((UINT8 *)IdStruct + - IdStruct->Length); - IdStructIterator++; - } // ID Type Structure - - return EFI_SUCCESS; -} - /** Construct the PPTT ACPI table. @@ -1072,15 +987,12 @@ BuildPpttTable ( UINT32 ProcTopologyStructCount; UINT32 ProcHierarchyNodeCount; UINT32 CacheStructCount; - UINT32 IdStructCount; UINT32 ProcHierarchyNodeOffset; UINT32 CacheStructOffset; - UINT32 IdStructOffset; CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; CM_ARM_CACHE_INFO *CacheStructList; - CM_ARM_PROC_NODE_ID_INFO *IdStructList; ACPI_PPTT_GENERATOR *Generator; @@ -1155,27 +1067,6 @@ BuildPpttTable ( ProcTopologyStructCount += CacheStructCount; Generator->CacheStructCount = CacheStructCount; - // Get the processor hierarchy node ID info and update the processor topology - // structure count with ID Structures (Type 2) - Status = GetEArmObjProcNodeIdInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &IdStructList, - &IdStructCount - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: PPTT: Failed to get processor hierarchy node ID info. " \ - "Status = %r\n", - Status - )); - goto error_handler; - } - - ProcTopologyStructCount += IdStructCount; - Generator->IdStructCount = IdStructCount; - // Allocate Node Indexer array NodeIndexer = (PPTT_NODE_INDEXER *)AllocateZeroPool ( sizeof (PPTT_NODE_INDEXER) * @@ -1241,27 +1132,6 @@ BuildPpttTable ( )); } - // Include the size of ID Type Structures and index them - if (Generator->IdStructCount != 0) { - IdStructOffset = TableSize; - Generator->IdStructIndexedList = NodeIndexer; - TableSize += GetSizeofIdStructs ( - IdStructOffset, - IdStructList, - Generator->IdStructCount, - &NodeIndexer - ); - DEBUG (( - DEBUG_INFO, - " IdStructCount = %d\n" \ - " IdStructOffset = 0x%x\n" \ - " IdStructIndexedList = 0x%p\n", - Generator->IdStructCount, - IdStructOffset, - Generator->IdStructIndexedList - )); - } - DEBUG (( DEBUG_INFO, "INFO: PPTT:\n" \ @@ -1347,24 +1217,6 @@ BuildPpttTable ( } } - // Add ID Type Structures (Type 2) to the generated table - if (Generator->IdStructCount != 0) { - Status = AddIdTypeStructures ( - Generator, - CfgMgrProtocol, - Pptt, - IdStructOffset - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: PPTT: Failed to add ID Type Structures. Status = %r\n", - Status - )); - goto error_handler; - } - } - // Validate CM object cross-references in PPTT Status = DetectCyclesInTopology (Generator); if (EFI_ERROR (Status)) { @@ -1488,8 +1340,6 @@ ACPI_PPTT_GENERATOR PpttGenerator = { 0, // Count of Cache Structures 0, - // Count of Id Structures - 0, // Pointer to PPTT Node Indexer NULL }; diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h index f587e67e9f..15b0a9871c 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h @@ -171,8 +171,6 @@ typedef struct AcpiPpttGenerator { UINT32 ProcHierarchyNodeCount; /// Count of Cache Structures UINT32 CacheStructCount; - /// Count of Id Structures - UINT32 IdStructCount; /// List of indexed CM objects for PPTT generation PPTT_NODE_INDEXER *NodeIndexer; /// Pointer to the start of Processor Hierarchy nodes in @@ -180,8 +178,6 @@ typedef struct AcpiPpttGenerator { PPTT_NODE_INDEXER *ProcHierarchyNodeIndexedList; /// Pointer to the start of Cache Structures in the Node Indexer array PPTT_NODE_INDEXER *CacheStructIndexedList; - /// Pointer to the start of Id Structures in the Node Indexer array - PPTT_NODE_INDEXER *IdStructIndexedList; } ACPI_PPTT_GENERATOR; #pragma pack() -- 2.39.2