From dda10c83b30a71a06c10e3e8866d0a620e843a71 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 14 Feb 2024 10:06:54 +0000 Subject: [PATCH 01/56] DynamicTablesPkg: Introduce an Arch Common Namespace Introduce an Arch Common Namespace so that the common architectural objects can be defined under this namespace in the Configuration manager. Also rearrange the namespace IDs so that the Arch Common Namespace has a value of 0x1, the Arm Namespace ID has a value of 0x2, and the Custom/OEM namespace ID has a value of 0xF. Also introduce a helper macro to create configuration manager objects in the Arch Common Namespace. The Arch Common Namespace shall contain objects like Serial Port, PCI Bus information etc. It must not contain Architecture specific components e.g. GICC which is Arm architecture specific component and therefore must be defined in the Arm Namespace. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Reviewed-by: Sunil V L --- .../Include/ConfigurationManagerObject.h | 26 +++-- DynamicTablesPkg/Readme.md | 97 +++++++++++++++++++ 2 files changed, 116 insertions(+), 7 deletions(-) diff --git a/DynamicTablesPkg/Include/ConfigurationManagerObject.h b/DynamicTablesPkg/Include/ConfigurationManagerObject.h index 74ad25d5d94a..4255c82b42ae 100644 --- a/DynamicTablesPkg/Include/ConfigurationManagerObject.h +++ b/DynamicTablesPkg/Include/ConfigurationManagerObject.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2017 - 2022, ARM Limited. All rights reserved. + Copyright (c) 2017 - 2024, Arm Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -29,8 +29,9 @@ _______________________________________________________________________________ Bits: [31:28] - Name Space ID 0000 - Standard - 0001 - ARM - 1000 - Custom/OEM + 0001 - Arch Common + 0010 - ARM + 1111 - Custom/OEM All other values are reserved. Bits: [27:16] - Reserved. @@ -105,10 +106,11 @@ typedef UINT32 CM_OBJECT_ID; for the Configuration Manager Objects. */ typedef enum ObjectNameSpaceID { - EObjNameSpaceStandard, ///< Standard Objects Namespace - EObjNameSpaceArm, ///< ARM Objects Namespace - EObjNameSpaceOem = 0x8, ///< OEM Objects Namespace - EObjNameSpaceMax + EObjNameSpaceStandard, ///< Standard Objects Namespace + EObjNameSpaceArchCommon, ///< Arch Common Objects Namespace + EObjNameSpaceArm, ///< ARM Objects Namespace + EObjNameSpaceOem = 0xF, ///< OEM Objects Namespace + EObjNameSpaceMax, } EOBJECT_NAMESPACE_ID; /** A descriptor for Configuration Manager Objects. @@ -182,6 +184,16 @@ typedef struct CmObjDescriptor { #define CREATE_CM_ARM_OBJECT_ID(ObjectId) \ (CREATE_CM_OBJECT_ID (EObjNameSpaceArm, ObjectId)) +/** This macro returns a Configuration Manager Object ID + in the Arch Common Object Namespace. + + @param [in] ObjectId The Object ID. + + @retval Returns an Arch Common Configuration Manager Object ID. +**/ +#define CREATE_CM_ARCH_COMMON_OBJECT_ID(ObjectId) \ + (CREATE_CM_OBJECT_ID (EObjNameSpaceArchCommon, ObjectId)) + /** This macro returns a Configuration Manager Object ID in the OEM Object Namespace. diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index c1cdc5e17326..1ae423af7562 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -402,3 +402,100 @@ Refer to the following presentation from *UEFI Plugfest Seattle 2018*: [Dynamic Tables Framework: A Step Towards Automatic Generation of Advanced Configuration and Power Interface (ACPI) & System Management BIOS (SMBIOS) Tables](http://www.uefi.org/sites/default/files/resources/Arm_Dynamic%20Tables%20Framework%20A%20Step%20Towards%20Automatic%20Generation%20of%20Advanced%20Configuration%20and%20Power%20Interface%20%28ACPI%29%20%26%20System%20Management%20BIOS%20%28SMBIOS%29%20Tables%20_0.pdf) +## Configuration Manager Objects + +The CM_OBJECT_ID type is used to identify the Configuration Manager + objects. + +## Description of Configuration Manager Object ID + +| 31 - 28 | 27 - 8 | 7 - 0 | +| :-------------: | :----: | :---------: | +| `Name Space ID` | 0 | `Object ID` | +------------------------------------------ + +### Name Space ID: Bits [31:28] + +| ID | Description | Comments | +| ---: | :-------------------------- | :--- | +| 0000b | Standard | | +| 0001b | Arch Common | | +| 0010b | ARM | | +| 1111b | Custom/OEM | | +| `*` | All other values are reserved. | | + +### Bits: [27:8] - Reserved, must be zero. + +### Bits: [7:0] - Object ID + +#### Object ID's in the Standard Namespace: + +| ID | Description | Comments | +| ---: | :-------------------------- | :--- | +| 0 | Configuration Manager Revision | | +| 1 | ACPI Table List | | +| 2 | SMBIOS Table List | | + +#### Object ID's in the ARM Namespace: + +| ID | Description | Comments | +| ---: | :-------------------------- | :--- | +| 0 | Reserved | | +| 1 | Boot Architecture Info | | +| 2 | CPU Info | | +| 3 | Power Management Profile Info | | +| 4 | GICC Info | | +| 5 | GICD Info | | +| 6 | GIC MSI Frame Info | | +| 7 | GIC Redistributor Info | | +| 8 | GIC ITS Info | | +| 9 | Serial Console Port Info | | +| 10 | Serial Debug Port Info | | +| 11 | Generic Timer Info | | +| 12 | Platform GT Block Info | | +| 13 | Generic Timer Block Frame Info | | +| 14 | Platform Generic Watchdog | | +| 15 | PCI Configuration Space Info | | +| 16 | Hypervisor Vendor Id | | +| 17 | Fixed feature flags for FADT | | +| 18 | ITS Group | | +| 19 | Named Component | | +| 20 | Root Complex | | +| 21 | SMMUv1 or SMMUv2 | | +| 22 | SMMUv3 | | +| 23 | PMCG | | +| 24 | GIC ITS Identifier Array | | +| 25 | ID Mapping Array | | +| 26 | SMMU Interrupt Array | | +| 27 | Processor Hierarchy Info | | +| 28 | Cache Info | | +| 29 | Reserved29 | | +| 30 | CM Object Reference | | +| 31 | Memory Affinity Info | | +| 32 | Device Handle Acpi | | +| 33 | Device Handle PCI | | +| 34 | Generic Initiator Affinity Info | | +| 35 | Serial Port Info | | +| 36 | CMN 600 Info | | +| 37 | Low Power Idle State Info | | +| 38 | PCI Address Map Info | | +| 39 | PCI Interrupt Map Info | | +| 40 | Reserved Memory Range Node | | +| 41 | Memory Range Descriptor | | +| 42 | Continuous Performance Control Info | | +| 43 | Pcc Subspace Type 0 Info | | +| 44 | Pcc Subspace Type 1 Info | | +| 45 | Pcc Subspace Type 2 Info | | +| 46 | Pcc Subspace Type 3 Info | | +| 47 | Pcc Subspace Type 4 Info | | +| 48 | Pcc Subspace Type 5 Info | | +| 49 | Embedded Trace Extension/Module Info | | +| 50 | P-State Dependency (PSD) Info | | +| `*` | All other values are reserved. | | + +#### Object ID's in the Arch Common Namespace: + +| ID | Description | Comments | +| ---: | :-------------------------- | :--- | +| 0 | Reserved | | +| `*` | All other values are reserved. | | From bb4460243be9475723a96e549b76b39f1b991cad Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Thu, 21 Mar 2024 15:12:17 +0100 Subject: [PATCH 02/56] DynamicTablesPkg/SsdtCpuTopology: Update function's parameter description The parameters of CreateAmlProcessorContainer() were not updated in: commit 5fb3f5723a1e ("DynamicTablesPkg: Allow for specified CPU names") This causes the EccCheck CI test to fail. Fix this. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index 40ed10eae6e1..e3cbe18a4950 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -980,7 +980,8 @@ CreateAmlCpuFromProcHierarchy ( container node to. @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO object used to create the node. - @param [in] ProcContainerIndex Index used to generate the node name. + @param [in] ProcContainerName Name of the processor container. + @param [in] ProcContainerUid Uid of the processor container. @param [out] ProcContainerNodePtr If success, contains the created processor container node. From efcde208c20537c0588c1971c3bae90cb5acb13d Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Thu, 7 Mar 2024 14:38:01 +0000 Subject: [PATCH 03/56] DynamicTablesPkg: Replace ProcNodeIdInfo with EArmObjReserved29 The CM_ARM_PROC_NODE_ID_INFO was dropped by the patch at "b2bbe3df5470 DynamicTablesPkg: Remove PPTT ID structure from ACPI 6.4 generator" and the EArmObjProcNodeIdInfo was made EArmObjReserved29. Since ProcNodeIdInfo is no longer used drop the CM object parser code from EArmObjProcNodeIdInfo and specify a null entry for EArmObjReserved29. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 2 +- .../ConfigurationManagerObjectParser.c | 15 +-------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 345acab53f74..9a6ab2a274aa 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -172,7 +172,7 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 26 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 27 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 28 - Cache Info - TokenFixerNotImplemented, ///< 29 - Processor Node ID Info + TokenFixerNotImplemented, ///< 29 - Reserved NULL, ///< 30 - CM Object Reference NULL, ///< 31 - Memory Affinity Info NULL, ///< 32 - Device Handle Acpi diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 69b6eba23cf4..f96b05b1c0b9 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -350,18 +350,6 @@ STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser[] = { { "CacheId", 4, "0x%x", NULL }, }; -/** A parser for EArmObjProcNodeIdInfo. -*/ -STATIC CONST CM_OBJ_PARSER CmArmProcNodeIdInfoParser[] = { - { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, - { "VendorId", 4, "0x%p", NULL }, - { "Level1Id", 8, "0x%x", NULL }, - { "Level2Id", 8, "0x%x", NULL }, - { "MajorRev", 2, "0x%x", NULL }, - { "MinorRev", 2, "0x%x", NULL }, - { "SpinRev", 2, "0x%x", NULL } -}; - /** A parser for EArmObjCmRef. */ STATIC CONST CM_OBJ_PARSER CmArmObjRefParser[] = { @@ -735,8 +723,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { ARRAY_SIZE (CmArmProcHierarchyInfoParser) }, { "EArmObjCacheInfo", CmArmCacheInfoParser, ARRAY_SIZE (CmArmCacheInfoParser) }, - { "EArmObjProcNodeIdInfo", CmArmProcNodeIdInfoParser, - ARRAY_SIZE (CmArmProcNodeIdInfoParser) }, + { "EArmObjReserved29", NULL, 0 }, { "EArmObjCmRef", CmArmObjRefParser, ARRAY_SIZE (CmArmObjRefParser) }, { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser, ARRAY_SIZE (CmArmMemoryAffinityInfoParser) }, From 3a7a8d097ee10db6c0aed4dec3965731ea1def10 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Thu, 7 Mar 2024 14:05:40 +0000 Subject: [PATCH 04/56] DynamicTablesPkg: Introduce ObjectId to validate CmObject Parser Array Add ObjectId to CM_OBJ_PARSER_ARRAY so that the code can validate the entries in the Cm object parser array. Also introduce helper macros to populate the Cm Object Parser Arrays. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../ConfigurationManagerObjectParser.c | 165 +++++++----------- .../ConfigurationManagerObjectParser.h | 15 ++ 2 files changed, 75 insertions(+), 105 deletions(-) diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index f96b05b1c0b9..68d6c57acfc0 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -670,103 +670,58 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { /** A parser for Arm namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { - { "EArmObjReserved", NULL, 0 }, - { "EArmObjBootArchInfo", CmArmBootArchInfoParser, - ARRAY_SIZE (CmArmBootArchInfoParser) }, - { "EArmObjCpuInfo", NULL, 0 }, - { "EArmObjPowerManagementProfileInfo", CmArmPowerManagementProfileInfoParser, - ARRAY_SIZE (CmArmPowerManagementProfileInfoParser) }, - { "EArmObjGicCInfo", CmArmGicCInfoParser, ARRAY_SIZE (CmArmGicCInfoParser) }, - { "EArmObjGicDInfo", CmArmGicDInfoParser, ARRAY_SIZE (CmArmGicDInfoParser) }, - { "EArmObjGicMsiFrameInfo", CmArmGicMsiFrameInfoParser, - ARRAY_SIZE (CmArmGicMsiFrameInfoParser) }, - { "EArmObjGicRedistributorInfo", CmArmGicRedistInfoParser, - ARRAY_SIZE (CmArmGicRedistInfoParser) }, - { "EArmObjGicItsInfo", CmArmGicItsInfoParser, - ARRAY_SIZE (CmArmGicItsInfoParser) }, - { "EArmObjSerialConsolePortInfo", CmArmSerialPortInfoParser, - ARRAY_SIZE (CmArmSerialPortInfoParser) }, - { "EArmObjSerialDebugPortInfo", CmArmSerialPortInfoParser, - ARRAY_SIZE (CmArmSerialPortInfoParser) }, - { "EArmObjGenericTimerInfo", CmArmGenericTimerInfoParser, - ARRAY_SIZE (CmArmGenericTimerInfoParser) }, - { "EArmObjPlatformGTBlockInfo", CmArmGTBlockInfoParser, - ARRAY_SIZE (CmArmGTBlockInfoParser) }, - { "EArmObjGTBlockTimerFrameInfo", CmArmGTBlockTimerFrameInfoParser, - ARRAY_SIZE (CmArmGTBlockTimerFrameInfoParser) }, - { "EArmObjPlatformGenericWatchdogInfo", CmArmGenericWatchdogInfoParser, - ARRAY_SIZE (CmArmGenericWatchdogInfoParser) }, - { "EArmObjPciConfigSpaceInfo", CmArmPciConfigSpaceInfoParser, - ARRAY_SIZE (CmArmPciConfigSpaceInfoParser) }, - { "EArmObjHypervisorVendorIdentity", CmArmHypervisorVendorIdParser, - ARRAY_SIZE (CmArmHypervisorVendorIdParser) }, - { "EArmObjFixedFeatureFlags", CmArmFixedFeatureFlagsParser, - ARRAY_SIZE (CmArmFixedFeatureFlagsParser) }, - { "EArmObjItsGroup", CmArmItsGroupNodeParser, - ARRAY_SIZE (CmArmItsGroupNodeParser) }, - { "EArmObjNamedComponent", CmArmNamedComponentNodeParser, - ARRAY_SIZE (CmArmNamedComponentNodeParser) }, - { "EArmObjRootComplex", CmArmRootComplexNodeParser, - ARRAY_SIZE (CmArmRootComplexNodeParser) }, - { "EArmObjSmmuV1SmmuV2", CmArmSmmuV1SmmuV2NodeParser, - ARRAY_SIZE (CmArmSmmuV1SmmuV2NodeParser) }, - { "EArmObjSmmuV3", CmArmSmmuV3NodeParser, - ARRAY_SIZE (CmArmSmmuV3NodeParser) }, - { "EArmObjPmcg", CmArmPmcgNodeParser, ARRAY_SIZE (CmArmPmcgNodeParser) }, - { "EArmObjGicItsIdentifierArray", CmArmGicItsIdentifierParser, - ARRAY_SIZE (CmArmGicItsIdentifierParser) }, - { "EArmObjIdMappingArray", CmArmIdMappingParser, - ARRAY_SIZE (CmArmIdMappingParser) }, - { "EArmObjSmmuInterruptArray", CmArmGenericInterruptParser, - ARRAY_SIZE (CmArmGenericInterruptParser) }, - { "EArmObjProcHierarchyInfo", CmArmProcHierarchyInfoParser, - ARRAY_SIZE (CmArmProcHierarchyInfoParser) }, - { "EArmObjCacheInfo", CmArmCacheInfoParser, - ARRAY_SIZE (CmArmCacheInfoParser) }, - { "EArmObjReserved29", NULL, 0 }, - { "EArmObjCmRef", CmArmObjRefParser, ARRAY_SIZE (CmArmObjRefParser) }, - { "EArmObjMemoryAffinityInfo", CmArmMemoryAffinityInfoParser, - ARRAY_SIZE (CmArmMemoryAffinityInfoParser) }, - { "EArmObjDeviceHandleAcpi", CmArmDeviceHandleAcpiParser, - ARRAY_SIZE (CmArmDeviceHandleAcpiParser) }, - { "EArmObjDeviceHandlePci", CmArmDeviceHandlePciParser, - ARRAY_SIZE (CmArmDeviceHandlePciParser) }, - { "EArmObjGenericInitiatorAffinityInfo", - CmArmGenericInitiatorAffinityInfoParser, - ARRAY_SIZE (CmArmGenericInitiatorAffinityInfoParser) }, - { "EArmObjSerialPortInfo", CmArmSerialPortInfoParser, - ARRAY_SIZE (CmArmSerialPortInfoParser) }, - { "EArmObjCmn600Info", CmArmCmn600InfoParser, - ARRAY_SIZE (CmArmCmn600InfoParser) }, - { "EArmObjLpiInfo", CmArmLpiInfoParser, - ARRAY_SIZE (CmArmLpiInfoParser) }, - { "EArmObjPciAddressMapInfo", CmArmPciAddressMapInfoParser, - ARRAY_SIZE (CmArmPciAddressMapInfoParser) }, - { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser, - ARRAY_SIZE (CmPciInterruptMapInfoParser) }, - { "EArmObjRmr", CmArmRmrInfoParser, - ARRAY_SIZE (CmArmRmrInfoParser) }, - { "EArmObjMemoryRangeDescriptor", CmArmMemoryRangeDescriptorInfoParser, - ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser) }, - { "EArmObjCpcInfo", CmArmCpcInfoParser, - ARRAY_SIZE (CmArmCpcInfoParser) }, - { "EArmObjPccSubspaceType0Info", CmArmPccSubspaceType0InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, - { "EArmObjPccSubspaceType1Info", CmArmPccSubspaceType1InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType1InfoParser) }, - { "EArmObjPccSubspaceType2Info", CmArmPccSubspaceType2InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType2InfoParser) }, - { "EArmObjPccSubspaceType3Info", CmArmPccSubspaceType34InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) }, - { "EArmObjPccSubspaceType4Info", CmArmPccSubspaceType34InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) }, - { "EArmObjPccSubspaceType5Info", CmArmPccSubspaceType5InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) }, - { "EArmObjEtInfo", CmArmEtInfo, - ARRAY_SIZE (CmArmEtInfo) }, - { "EArmObjPsdInfo", CmArmPsdInfoParser, - ARRAY_SIZE (CmArmPsdInfoParser) }, - { "EArmObjMax", NULL, 0 }, + CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved), + CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser), + CM_PARSER_ADD_OBJECT_RESERVED (EArmObjCpuInfo), + CM_PARSER_ADD_OBJECT (EArmObjPowerManagementProfileInfo, CmArmPowerManagementProfileInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicRedistributorInfo, CmArmGicRedistInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicItsInfo, CmArmGicItsInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjSerialConsolePortInfo, CmArmSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjSerialDebugPortInfo, CmArmSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGenericTimerInfo, CmArmGenericTimerInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPciConfigSpaceInfo, CmArmPciConfigSpaceInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjHypervisorVendorIdentity, CmArmHypervisorVendorIdParser), + CM_PARSER_ADD_OBJECT (EArmObjFixedFeatureFlags, CmArmFixedFeatureFlagsParser), + CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuV1SmmuV2, CmArmSmmuV1SmmuV2NodeParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuV3, CmArmSmmuV3NodeParser), + CM_PARSER_ADD_OBJECT (EArmObjPmcg, CmArmPmcgNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), + CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArmGenericInterruptParser), + CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), + CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved29), + CM_PARSER_ADD_OBJECT (EArmObjCmRef, CmArmObjRefParser), + CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), + CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), + CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjSerialPortInfo, CmArmSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPciAddressMapInfo, CmArmPciAddressMapInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPciInterruptMapInfo, CmPciInterruptMapInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), + CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), + CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax) }; /** A parser for EStdObjCfgMgrInfo. @@ -798,13 +753,10 @@ STATIC CONST CM_OBJ_PARSER StdObjSmbiosTableInfoParser[] = { /** A parser for Standard namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY StdNamespaceObjectParser[] = { - { "EStdObjCfgMgrInfo", StdObjCfgMgrInfoParser, - ARRAY_SIZE (StdObjCfgMgrInfoParser) }, - { "EStdObjAcpiTableList", StdObjAcpiTableInfoParser, - ARRAY_SIZE (StdObjAcpiTableInfoParser) }, - { "EStdObjSmbiosTableList", StdObjSmbiosTableInfoParser, - ARRAY_SIZE (StdObjSmbiosTableInfoParser) }, - { "EStdObjMax", NULL, 0} + CM_PARSER_ADD_OBJECT (EStdObjCfgMgrInfo, StdObjCfgMgrInfoParser), + CM_PARSER_ADD_OBJECT (EStdObjAcpiTableList, StdObjAcpiTableInfoParser), + CM_PARSER_ADD_OBJECT (EStdObjSmbiosTableList, StdObjSmbiosTableInfoParser), + CM_PARSER_ADD_OBJECT_RESERVED (EStdObjMax) }; /** Print string data. @@ -975,7 +927,7 @@ PrintCmObjDesc ( *RemainingSize -= Parser[Index].Length; if (*RemainingSize < 0) { DEBUG (( - DEBUG_INFO, + DEBUG_ERROR, "\nERROR: %a: Buffer overrun\n", Parser[Index].NameStr )); @@ -1118,6 +1070,9 @@ ParseCmObjDesc ( ObjIndex + 1, ObjectCount )); + + ASSERT (ObjId == ParserArray->ObjectId); + if (ParserArray->Parser == NULL) { DEBUG ((DEBUG_ERROR, "Parser not implemented\n")); RemainingSize = 0; diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h index 3204f5314340..d996d05a55dd 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.h @@ -11,6 +11,18 @@ #define OUTPUT_FIELD_COLUMN_WIDTH 32 +/** A helper macro for populating the Reserved objects + like EArmObjReserved, EArmObjMax, etc. in the CM_OBJ_PARSER_ARRAY. +**/ +#define CM_PARSER_ADD_OBJECT_RESERVED(ObjectId) \ + {ObjectId, #ObjectId, NULL, 0} + +/** A helper macro for populating the Cm Arm objects + in the CM_OBJ_PARSER_ARRAY. +**/ +#define CM_PARSER_ADD_OBJECT(ObjectId, Parser) \ + {ObjectId, #ObjectId, Parser, ARRAY_SIZE(Parser) } + /** Function prototype to format a field print. @param [in] Format Format string for tracing the data as specified by @@ -58,6 +70,9 @@ struct CmObjParser { with their object names. */ typedef struct CmObjParserArray { + /// Object ID + CONST UINTN ObjectId; + /// Object name CONST CHAR8 *ObjectName; From 84ce8a3283d69802e571c83d2961ee40db01708d Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 09:04:09 +0000 Subject: [PATCH 05/56] DynamicTablesPkg: Introduce an Arch Common Namespace header file Introduce a new header file for defining the Arch Common Namespace objects. Also include it in the Configuration Manager Object header file so that the required definitions are propagated. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- DynamicTablesPkg/DynamicTablesPkg.ci.yaml | 1 + .../Include/ArchCommonNameSpaceObjects.h | 27 +++++++++++++++++++ .../Include/ConfigurationManagerObject.h | 1 + 3 files changed, 29 insertions(+) create mode 100644 DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h diff --git a/DynamicTablesPkg/DynamicTablesPkg.ci.yaml b/DynamicTablesPkg/DynamicTablesPkg.ci.yaml index 42829f393e69..07768ed648ea 100644 --- a/DynamicTablesPkg/DynamicTablesPkg.ci.yaml +++ b/DynamicTablesPkg/DynamicTablesPkg.ci.yaml @@ -104,6 +104,7 @@ "CCIDX", "CCSIDR", "countof", + "EArch", "edynamic", "EOBJECT", "invoc", diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h new file mode 100644 index 000000000000..e4205d6ba6bc --- /dev/null +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -0,0 +1,27 @@ +/** @file + + Copyright (c) 2024, Arm Limited. All rights reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object + - Std or STD - Standard +**/ + +#ifndef ARCH_COMMON_NAMESPACE_OBJECTS_H_ +#define ARCH_COMMON_NAMESPACE_OBJECTS_H_ + +#include +#include + +/** The EARCH_COMMON_OBJECT_ID enum describes the Object IDs + in the Arch Common Namespace +*/ +typedef enum ArchCommonObjectID { + EArchCommonObjReserved, ///< 0 - Reserved + EArchCommonObjMax +} EARCH_COMMON_OBJECT_ID; + +#endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ConfigurationManagerObject.h b/DynamicTablesPkg/Include/ConfigurationManagerObject.h index 4255c82b42ae..04b365f3d0b7 100644 --- a/DynamicTablesPkg/Include/ConfigurationManagerObject.h +++ b/DynamicTablesPkg/Include/ConfigurationManagerObject.h @@ -12,6 +12,7 @@ #ifndef CONFIGURATION_MANAGER_OBJECT_H_ #define CONFIGURATION_MANAGER_OBJECT_H_ +#include #include #include From 2fbd18800c5a4202bb4e3ad6b5f40492a8bc6da9 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Thu, 7 Mar 2024 14:11:31 +0000 Subject: [PATCH 06/56] DynamicTablesPkg: Add support for ArchCommon objects in CmObjParser Update the Cm Object Parser to support parsing of Arch Common namespace objects. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../ConfigurationManagerObjectParser.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 68d6c57acfc0..6f5dbdfd2d86 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -667,6 +667,13 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { { "NumProc", 4, "0x%x", NULL }, }; +/** A parser for Arch Common namespace objects. +*/ +STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { + CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjReserved), + CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) +}; + /** A parser for Arm namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { @@ -1050,6 +1057,21 @@ ParseCmObjDesc ( ParserArray = &ArmNamespaceObjectParser[ObjId]; break; + + case EObjNameSpaceArchCommon: + if (ObjId >= EArchCommonObjMax) { + ASSERT (0); + return; + } + + if (ObjId >= ARRAY_SIZE (ArchCommonNamespaceObjectParser)) { + DEBUG ((DEBUG_ERROR, "ObjId 0x%x is missing from the ArchCommonNamespaceObjectParser array\n", ObjId)); + ASSERT (0); + return; + } + + ParserArray = &ArchCommonNamespaceObjectParser[ObjId]; + break; default: // Not supported DEBUG ((DEBUG_ERROR, "NameSpaceId 0x%x, ObjId 0x%x is not supported by the parser\n", NameSpaceId, ObjId)); From 2f992a18f30589de4c4f8d8e38a7e6a9b0b62536 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Sat, 9 Mar 2024 23:03:06 +0000 Subject: [PATCH 07/56] DynamicTablesPkg: TokenFixer: Return Non Arm NS objs as unsupported Update the Token Fixer to return objects other than Arm Namespace objects as unsupported. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Common/DynamicPlatRepoLib/CmObjectTokenFixer.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 9a6ab2a274aa..bbbb81ea31b0 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -209,14 +209,17 @@ FixupCmObjectSelfToken ( CM_OBJECT_TOKEN_FIXER TokenFixerFunc; CM_OBJECT_ID ArmNamespaceObjId; - // Only support Arm objects for now. - if ((CmObjDesc == NULL) || - (GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId) != EObjNameSpaceArm)) - { + if (CmObjDesc == NULL) { ASSERT (0); return EFI_INVALID_PARAMETER; } + // Only support Arm objects for now. + if (GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId) != EObjNameSpaceArm) { + ASSERT (0); + return EFI_UNSUPPORTED; + } + ArmNamespaceObjId = GET_CM_OBJECT_ID (CmObjDesc->ObjectId); if (ArmNamespaceObjId >= EArmObjMax) { ASSERT (0); From 278d83080433a562c8114959968f75ba23420660 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 16:45:47 +0000 Subject: [PATCH 08/56] DynamicTablesPkg: Update DynamicPlatRepo for Arch Common namespace Update DynamicPlatRepo to reflect the introduction of the Arch Common namespace. Also, update the TokenFixer map to reflect the current state of the ArmNamespace Objects and add a note in the documentation header for the EARM_OBJECT_ID enum, that the Token fixer map needs updating whenever the ArmObjectId space is updated. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArmNameSpaceObjects.h | 6 + .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 11 + .../DynamicPlatRepoLib/DynamicPlatRepo.c | 265 +++++++++++++----- .../DynamicPlatRepoInternal.h | 11 +- 4 files changed, 229 insertions(+), 64 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 4a419a8fcd95..853d722b8c79 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -20,6 +20,12 @@ /** The EARM_OBJECT_ID enum describes the Object IDs in the ARM Namespace + + Note: Whenever an entry in this enum is updated, + the following data structures must also be + updated: + - CM_OBJECT_TOKEN_FIXER TokenFixer[] in + Library\Common\DynamicPlatRepoLib\CmObjectTokenFixer.c */ typedef enum ArmObjectID { EArmObjReserved, ///< 0 - Reserved diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index bbbb81ea31b0..df9452efe5bb 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -183,6 +183,17 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 37 - Lpi Info NULL, ///< 38 - Pci Address Map Info NULL, ///< 39 - Pci Interrupt Map Info + NULL, ///< 40 - Reserved Memory Range Node + NULL, ///< 41 - Memory Range Descriptor + NULL, ///< 42 - Continuous Performance Control Info + NULL, ///< 43 - Pcc Subspace Type 0 Info + NULL, ///< 44 - Pcc Subspace Type 2 Info + NULL, ///< 45 - Pcc Subspace Type 2 Info + NULL, ///< 46 - Pcc Subspace Type 3 Info + NULL, ///< 47 - Pcc Subspace Type 4 Info + NULL, ///< 48 - Pcc Subspace Type 5 Info + NULL, ///< 49 - Embedded Trace Extension/Module Info + NULL ///< 50 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c index bdeb5c78aeb3..e4fa1233708e 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c @@ -127,10 +127,12 @@ DynPlatRepoAddObject ( OUT CM_OBJECT_TOKEN *Token OPTIONAL ) { - EFI_STATUS Status; - CM_OBJ_NODE *ObjNode; - CM_OBJECT_ID ArmNamespaceObjId; - CM_OBJECT_TOKEN NewToken; + EFI_STATUS Status; + CM_OBJ_NODE *ObjNode; + CM_OBJECT_ID ObjId; + CM_OBJECT_TOKEN NewToken; + LIST_ENTRY *ObjList; + EOBJECT_NAMESPACE_ID NamespaceId; // The dynamic repository must be able to receive objects. if ((This == NULL) || @@ -142,15 +144,33 @@ DynPlatRepoAddObject ( } // Check the CmObjDesc: - // - only Arm objects are supported for now. + // - only Arm objects and Arch Common objects are supported for now. // - only EArmObjCmRef objects can be added as arrays. - ArmNamespaceObjId = GET_CM_OBJECT_ID (CmObjDesc->ObjectId); - if ((CmObjDesc->Size == 0) || - (CmObjDesc->Count == 0) || - (ArmNamespaceObjId >= EArmObjMax) || - ((CmObjDesc->Count > 1) && (ArmNamespaceObjId != EArmObjCmRef)) || - (GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId) != EObjNameSpaceArm)) - { + if ((CmObjDesc->Size == 0) || (CmObjDesc->Count == 0)) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + ObjId = GET_CM_OBJECT_ID (CmObjDesc->ObjectId); + NamespaceId = GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId); + + if (EObjNameSpaceArm == NamespaceId) { + if ((ObjId >= EArmObjMax) || + ((CmObjDesc->Count > 1) && (ObjId != EArmObjCmRef))) + { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + ObjList = &This->ArmCmObjList[ObjId]; + } else if (EObjNameSpaceArchCommon == NamespaceId) { + if (ObjId >= EArchCommonObjMax) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + ObjList = &This->ArchCommonCmObjList[ObjId]; + } else { ASSERT (0); return EFI_INVALID_PARAMETER; } @@ -166,15 +186,17 @@ DynPlatRepoAddObject ( } // Fixup self-token if necessary. - Status = FixupCmObjectSelfToken (&ObjNode->CmObjDesc, NewToken); - if (EFI_ERROR (Status)) { - FreeCmObjNode (ObjNode); - ASSERT (0); - return Status; + if (EObjNameSpaceArm == NamespaceId) { + Status = FixupCmObjectSelfToken (&ObjNode->CmObjDesc, NewToken); + if (EFI_ERROR (Status)) { + FreeCmObjNode (ObjNode); + ASSERT (0); + return Status; + } } // Add to link list. - InsertTailList (&This->ArmCmObjList[ArmNamespaceObjId], &ObjNode->Link); + InsertTailList (ObjList, &ObjNode->Link); This->ObjectCount += 1; if (Token != NULL) { @@ -184,11 +206,14 @@ DynPlatRepoAddObject ( return EFI_SUCCESS; } -/** Group lists of CmObjNode from the ArmNameSpace to one array. +/** Group lists of CmObjNode from the Arm Namespace or ArchCommon namespace + to one array. @param [in] This This dynamic platform repository. - @param [in] ArmObjIndex Index in EARM_OBJECT_ID - (must be < EArmObjMax). + @param [in] NamespaceId The namespace ID which can be EObjNameSpaceArm or + EObjNameSpaceArchCommon. + @param [in] ObjIndex Index in EARM_OBJECT_ID (must be < EArmObjMax) or + EARCH_COMMON_OBJECT_ID (must be = EArmObjMax)) - { + if (This == NULL) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + if (NamespaceId == EObjNameSpaceArm) { + if (ObjIndex >= EArmObjMax) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + ListHead = &This->ArmCmObjList[ObjIndex]; + ObjArray = &This->ArmCmObjArray[ObjIndex]; + } else if (NamespaceId == EObjNameSpaceArchCommon) { + if (ObjIndex >= EArchCommonObjMax) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + ListHead = &This->ArchCommonCmObjList[ObjIndex]; + ObjArray = &This->ArchCommonCmObjArray[ObjIndex]; + } else { ASSERT (0); return EFI_INVALID_PARAMETER; } - Count = 0; - Size = 0; - CmObjId = CREATE_CM_ARM_OBJECT_ID (ArmObjIndex); - ListHead = &This->ArmCmObjList[ArmObjIndex]; - Link = GetFirstNode (ListHead); + Count = 0; + Size = 0; + CmObjId = CREATE_CM_OBJECT_ID (NamespaceId, ObjIndex); + Link = GetFirstNode (ListHead); // Compute the total count and size of the CmObj in the list. while (Link != ListHead) { @@ -235,7 +280,10 @@ GroupCmObjNodes ( return EFI_INVALID_PARAMETER; } - if ((CmObjDesc->Count != 1) && (ArmObjIndex != EArmObjCmRef)) { + if ((CmObjDesc->Count != 1) && + ((NamespaceId != EObjNameSpaceArm) || + (ObjIndex != EArmObjCmRef))) + { // We expect each descriptor to contain an individual object. // EArmObjCmRef objects are counted as groups, so +1 as well. ASSERT (0); @@ -286,7 +334,7 @@ GroupCmObjNodes ( Link = GetNextNode (ListHead, Link); } // while - CmObjDesc = &This->ArmCmObjArray[ArmObjIndex]; + CmObjDesc = ObjArray; CmObjDesc->ObjectId = CmObjId; CmObjDesc->Size = (UINT32)Size; CmObjDesc->Count = (UINT32)Count; @@ -317,7 +365,7 @@ DynamicPlatRepoFinalise ( ) { EFI_STATUS Status; - UINTN ArmObjIndex; + UINTN ObjIndex; if ((This == NULL) || (This->RepoState != DynRepoTransient)) @@ -340,18 +388,29 @@ DynamicPlatRepoFinalise ( // - Convert the list of nodes to an array // (the array is wrapped in a CmObjDesc). // - Add the Token/CmObj binding to the token mapper. - for (ArmObjIndex = 0; ArmObjIndex < EArmObjMax; ArmObjIndex++) { - Status = GroupCmObjNodes (This, (UINT32)ArmObjIndex); + for (ObjIndex = 0; ObjIndex < EArmObjMax; ObjIndex++) { + Status = GroupCmObjNodes (This, EObjNameSpaceArm, (UINT32)ObjIndex); if (EFI_ERROR (Status)) { ASSERT (0); - // Free the TokenMapper. - // Ignore the returned Status since we already failed. - TokenMapperShutdown (&This->TokenMapper); - return Status; + goto error_handler; + } + } // for + + for (ObjIndex = 0; ObjIndex < EArchCommonObjMax; ObjIndex++) { + Status = GroupCmObjNodes (This, EObjNameSpaceArchCommon, (UINT32)ObjIndex); + if (EFI_ERROR (Status)) { + ASSERT (0); + goto error_handler; } } // for return EFI_SUCCESS; + +error_handler: + // Free the TokenMapper. + // Ignore the returned Status since we already failed. + TokenMapperShutdown (&This->TokenMapper); + return Status; } /** Get a CmObj from the dynamic repository. @@ -376,9 +435,10 @@ DynamicPlatRepoGetObject ( IN OUT CM_OBJ_DESCRIPTOR *CmObjDesc ) { - EFI_STATUS Status; - CM_OBJ_DESCRIPTOR *Desc; - CM_OBJECT_ID ArmNamespaceObjId; + EFI_STATUS Status; + CM_OBJ_DESCRIPTOR *Desc; + CM_OBJECT_ID ObjId; + EOBJECT_NAMESPACE_ID NamespaceId; if ((This == NULL) || (CmObjDesc == NULL) || @@ -388,8 +448,28 @@ DynamicPlatRepoGetObject ( return EFI_INVALID_PARAMETER; } - ArmNamespaceObjId = GET_CM_OBJECT_ID (CmObjectId); - if (ArmNamespaceObjId >= EArmObjMax) { + NamespaceId = GET_CM_NAMESPACE_ID (CmObjectId); + ObjId = GET_CM_OBJECT_ID (CmObjectId); + + if (NamespaceId == EObjNameSpaceArm) { + if ((ObjId >= EArmObjMax) || + ((ObjId == EArmObjCmRef) && + (Token == CM_NULL_TOKEN))) + { + // EArmObjCmRef object must be requested using a valid token. + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + Desc = &This->ArmCmObjArray[ObjId]; + } else if (NamespaceId == EObjNameSpaceArchCommon) { + if (ObjId >= EArchCommonObjMax) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + Desc = &This->ArchCommonCmObjArray[ObjId]; + } else { ASSERT (0); return EFI_INVALID_PARAMETER; } @@ -406,14 +486,6 @@ DynamicPlatRepoGetObject ( return Status; } - if (ArmNamespaceObjId == EArmObjCmRef) { - // EArmObjCmRef object must be requested using a valid token. - ASSERT (0); - return EFI_INVALID_PARAMETER; - } - - Desc = &This->ArmCmObjArray[ArmNamespaceObjId]; - // Nothing here. if (Desc->Count == 0) { return EFI_NOT_FOUND; @@ -462,6 +534,10 @@ DynamicPlatRepoInit ( InitializeListHead (&Repo->ArmCmObjList[Index]); } + for (Index = 0; Index < EArchCommonObjMax; Index++) { + InitializeListHead (&Repo->ArchCommonCmObjList[Index]); + } + Repo->ObjectCount = 0; Repo->RepoState = DynRepoTransient; @@ -470,31 +546,27 @@ DynamicPlatRepoInit ( return EFI_SUCCESS; } -/** Shutdown the dynamic platform repository. +/** Free Arm Namespace objects. - Free all the memory allocated for the dynamic platform repository. + Free all the memory allocated for the Arm namespace objects in the + dynamic platform repository. @param [in] DynPlatRepo The dynamic platform repository. - @retval EFI_INVALID_PARAMETER A parameter is invalid. - @retval EFI_SUCCESS Success. **/ -EFI_STATUS +STATIC +VOID EFIAPI -DynamicPlatRepoShutdown ( +DynamicPlatRepoFreeArmObjects ( IN DYNAMIC_PLATFORM_REPOSITORY_INFO *DynPlatRepo ) { - EFI_STATUS Status; UINT32 Index; LIST_ENTRY *ListHead; CM_OBJ_DESCRIPTOR *CmObjDesc; VOID *Data; - if (DynPlatRepo == NULL) { - ASSERT (0); - return EFI_INVALID_PARAMETER; - } + ASSERT (DynPlatRepo != NULL); // Free the list of objects. for (Index = 0; Index < EArmObjMax; Index++) { @@ -513,6 +585,73 @@ DynamicPlatRepoShutdown ( FreePool (Data); } } // for +} + +/** Free Arch Common Namespace objects. + + Free all the memory allocated for the Arch Common namespace objects in the + dynamic platform repository. + + @param [in] DynPlatRepo The dynamic platform repository. + +**/ +STATIC +VOID +EFIAPI +DynamicPlatRepoFreeArchCommonObjects ( + IN DYNAMIC_PLATFORM_REPOSITORY_INFO *DynPlatRepo + ) +{ + UINT32 Index; + LIST_ENTRY *ListHead; + CM_OBJ_DESCRIPTOR *CmObjDesc; + VOID *Data; + + ASSERT (DynPlatRepo != NULL); + + // Free the list of objects. + for (Index = 0; Index < EArchCommonObjMax; Index++) { + // Free all the nodes with this object Id. + ListHead = &DynPlatRepo->ArchCommonCmObjList[Index]; + while (!IsListEmpty (ListHead)) { + FreeCmObjNode ((CM_OBJ_NODE *)GetFirstNode (ListHead)); + } // while + } // for + + // Free the arrays. + CmObjDesc = DynPlatRepo->ArchCommonCmObjArray; + for (Index = 0; Index < EArchCommonObjMax; Index++) { + Data = CmObjDesc[Index].Data; + if (Data != NULL) { + FreePool (Data); + } + } // for +} + +/** Shutdown the dynamic platform repository. + + Free all the memory allocated for the dynamic platform repository. + + @param [in] DynPlatRepo The dynamic platform repository. + + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_SUCCESS Success. +**/ +EFI_STATUS +EFIAPI +DynamicPlatRepoShutdown ( + IN DYNAMIC_PLATFORM_REPOSITORY_INFO *DynPlatRepo + ) +{ + EFI_STATUS Status; + + if (DynPlatRepo == NULL) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + DynamicPlatRepoFreeArmObjects (DynPlatRepo); + DynamicPlatRepoFreeArchCommonObjects (DynPlatRepo); // Free the TokenMapper Status = TokenMapperShutdown (&DynPlatRepo->TokenMapper); diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepoInternal.h b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepoInternal.h index eaee5d4ce9d9..0c842bc2d535 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepoInternal.h +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepoInternal.h @@ -67,7 +67,16 @@ typedef struct DynamicPlatformRepositoryInfo { /// This array is populated when the Repo is finalized. CM_OBJ_DESCRIPTOR ArmCmObjArray[EArmObjMax]; - /// A token mapper for the objects in the ArmNamespaceObjectArray + /// Link lists of CmObj from the ArchCommon Namespace + /// that are added in the Transient state. + LIST_ENTRY ArchCommonCmObjList[EArchCommonObjMax]; + + /// Structure Members used in Finalized state. + /// An array of CmObj Descriptors from the ArchCommon Namespace + /// This array is populated when the Repo is finalized. + CM_OBJ_DESCRIPTOR ArchCommonCmObjArray[EArchCommonObjMax]; + + /// A token mapper for the objects in the CmObjArray /// The Token mapper is populated when the Repo is finalized in /// a call to DynamicPlatRepoFinalise (). TOKEN_MAPPER TokenMapper; From 241415c9ed35d31c884d311dc86e729157323f49 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Fri, 8 Mar 2024 16:31:21 +0000 Subject: [PATCH 09/56] DynamicTablesPkg: Update documentation for CM_OBJECT_ID Remove the partial listing of the Arm Namespace object IDs from and add a reference to the enum EARM_OBJECT_ID that is used to describe the object in the ARM Namespace. Also document that the Arch Common namespace objects will be described using the enum EARCH_COMMON_OBJECT_ID. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ConfigurationManagerObject.h | 35 +++---------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/DynamicTablesPkg/Include/ConfigurationManagerObject.h b/DynamicTablesPkg/Include/ConfigurationManagerObject.h index 04b365f3d0b7..dd730ca677f5 100644 --- a/DynamicTablesPkg/Include/ConfigurationManagerObject.h +++ b/DynamicTablesPkg/Include/ConfigurationManagerObject.h @@ -51,38 +51,11 @@ Object ID's in the Standard Namespace: 1 - ACPI Table List 2 - SMBIOS Table List +Object ID's in the Arch Common Namespace: + See EARCH_COMMON_OBJECT_ID. + Object ID's in the ARM Namespace: - 0 - Reserved - 1 - Boot Architecture Info - 2 - CPU Info - 3 - Power Management Profile Info - 4 - GICC Info - 5 - GICD Info - 6 - GIC MSI Frame Info - 7 - GIC Redistributor Info - 8 - GIC ITS Info - 9 - Serial Console Port Info - 10 - Serial Debug Port Info - 11 - Generic Timer Info - 12 - Platform GT Block Info - 13 - Generic Timer Block Frame Info - 14 - Platform Generic Watchdog - 15 - PCI Configuration Space Info - 16 - Hypervisor Vendor Id - 17 - Fixed feature flags for FADT - 18 - ITS Group - 19 - Named Component - 20 - Root Complex - 21 - SMMUv1 or SMMUv2 - 22 - SMMUv3 - 23 - PMCG - 24 - GIC ITS Identifier Array - 25 - ID Mapping Array - 26 - SMMU Interrupt Array - 27 - Processor Hierarchy Info - 28 - Cache Info - 29 - Processor Hierarchy Node ID Info - 30 - CM Object Reference + See EARM_OBJECT_ID. */ typedef UINT32 CM_OBJECT_ID; From 0bc0d4765c11823a032df43ff477306eb802ed34 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Tue, 5 Mar 2024 14:23:38 +0000 Subject: [PATCH 10/56] DynamicTablesPkg: Drop Cpu Info object ID from Arm Namespace The Arm Namespace Object ID for CPU info was not used. Therefore, drop the EArmObjCpuInfo object ID. Also remove - the partial listing of the Arm Namespace object IDs from ConfigurationManagerObject.h and add a reference to the location where they are defined. - the parsing code in Configuration Manager ObjectParser. - update the Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArmNameSpaceObjects.h | 97 +++++++++---------- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 93 +++++++++--------- .../ConfigurationManagerObjectParser.c | 1 - DynamicTablesPkg/Readme.md | 97 +++++++++---------- 4 files changed, 142 insertions(+), 146 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 853d722b8c79..2eeff594fc59 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -30,55 +30,54 @@ typedef enum ArmObjectID { EArmObjReserved, ///< 0 - Reserved EArmObjBootArchInfo, ///< 1 - Boot Architecture Info - EArmObjCpuInfo, ///< 2 - CPU Info - EArmObjPowerManagementProfileInfo, ///< 3 - Power Management Profile Info - EArmObjGicCInfo, ///< 4 - GIC CPU Interface Info - EArmObjGicDInfo, ///< 5 - GIC Distributor Info - EArmObjGicMsiFrameInfo, ///< 6 - GIC MSI Frame Info - EArmObjGicRedistributorInfo, ///< 7 - GIC Redistributor Info - EArmObjGicItsInfo, ///< 8 - GIC ITS Info - EArmObjSerialConsolePortInfo, ///< 9 - Serial Console Port Info - EArmObjSerialDebugPortInfo, ///< 10 - Serial Debug Port Info - EArmObjGenericTimerInfo, ///< 11 - Generic Timer Info - EArmObjPlatformGTBlockInfo, ///< 12 - Platform GT Block Info - EArmObjGTBlockTimerFrameInfo, ///< 13 - Generic Timer Block Frame Info - EArmObjPlatformGenericWatchdogInfo, ///< 14 - Platform Generic Watchdog - EArmObjPciConfigSpaceInfo, ///< 15 - PCI Configuration Space Info - EArmObjHypervisorVendorIdentity, ///< 16 - Hypervisor Vendor Id - EArmObjFixedFeatureFlags, ///< 17 - Fixed feature flags for FADT - EArmObjItsGroup, ///< 18 - ITS Group - EArmObjNamedComponent, ///< 19 - Named Component - EArmObjRootComplex, ///< 20 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 21 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 22 - SMMUv3 - EArmObjPmcg, ///< 23 - PMCG - EArmObjGicItsIdentifierArray, ///< 24 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 25 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 28 - Cache Info - EArmObjReserved29, ///< 29 - Reserved - EArmObjCmRef, ///< 30 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 33 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affinity - EArmObjSerialPortInfo, ///< 35 - Generic Serial Port Info - EArmObjCmn600Info, ///< 36 - CMN-600 Info - EArmObjLpiInfo, ///< 37 - Lpi Info - EArmObjPciAddressMapInfo, ///< 38 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 39 - Pci Interrupt Map Info - EArmObjRmr, ///< 40 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 41 - Memory Range Descriptor - EArmObjCpcInfo, ///< 42 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 43 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 44 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 45 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 46 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 47 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 48 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 49 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 50 - P-State Dependency (PSD) Info + EArmObjPowerManagementProfileInfo, ///< 2 - Power Management Profile Info + EArmObjGicCInfo, ///< 3 - GIC CPU Interface Info + EArmObjGicDInfo, ///< 4 - GIC Distributor Info + EArmObjGicMsiFrameInfo, ///< 5 - GIC MSI Frame Info + EArmObjGicRedistributorInfo, ///< 6 - GIC Redistributor Info + EArmObjGicItsInfo, ///< 7 - GIC ITS Info + EArmObjSerialConsolePortInfo, ///< 8 - Serial Console Port Info + EArmObjSerialDebugPortInfo, ///< 9 - Serial Debug Port Info + EArmObjGenericTimerInfo, ///< 10 - Generic Timer Info + EArmObjPlatformGTBlockInfo, ///< 11 - Platform GT Block Info + EArmObjGTBlockTimerFrameInfo, ///< 12 - Generic Timer Block Frame Info + EArmObjPlatformGenericWatchdogInfo, ///< 13 - Platform Generic Watchdog + EArmObjPciConfigSpaceInfo, ///< 14 - PCI Configuration Space Info + EArmObjHypervisorVendorIdentity, ///< 15 - Hypervisor Vendor Id + EArmObjFixedFeatureFlags, ///< 16 - Fixed feature flags for FADT + EArmObjItsGroup, ///< 17 - ITS Group + EArmObjNamedComponent, ///< 18 - Named Component + EArmObjRootComplex, ///< 19 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 20 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 21 - SMMUv3 + EArmObjPmcg, ///< 22 - PMCG + EArmObjGicItsIdentifierArray, ///< 23 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 24 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 25 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 26 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 27 - Cache Info + EArmObjReserved29, ///< 28 - Reserved + EArmObjCmRef, ///< 29 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 30 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 31 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 32 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 33 - Generic Initiator Affinity + EArmObjSerialPortInfo, ///< 34 - Generic Serial Port Info + EArmObjCmn600Info, ///< 35 - CMN-600 Info + EArmObjLpiInfo, ///< 36 - Lpi Info + EArmObjPciAddressMapInfo, ///< 37 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 38 - Pci Interrupt Map Info + EArmObjRmr, ///< 39 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 40 - Memory Range Descriptor + EArmObjCpcInfo, ///< 41 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 42 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 43 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 44 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 45 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 46 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 47 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 48 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 49 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index df9452efe5bb..07e26a4f4e4c 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -145,55 +145,54 @@ CONST CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 0 - Reserved NULL, ///< 1 - Boot Architecture Info - NULL, ///< 2 - CPU Info - NULL, ///< 3 - Power Management Profile Info - NULL, ///< 4 - GIC CPU Interface Info - NULL, ///< 5 - GIC Distributor Info - NULL, ///< 6 - GIC MSI Frame Info - NULL, ///< 7 - GIC Redistributor Info - NULL, ///< 8 - GIC ITS Info - NULL, ///< 9 - Serial Console Port Info - NULL, ///< 10 - Serial Debug Port Info - NULL, ///< 11 - Generic Timer Info - NULL, ///< 12 - Platform GT Block Info - NULL, ///< 13 - Generic Timer Block Frame Info - NULL, ///< 14 - Platform Generic Watchdog - NULL, ///< 15 - PCI Configuration Space Info - NULL, ///< 16 - Hypervisor Vendor Id - NULL, ///< 17 - Fixed feature flags for FADT - TokenFixerItsGroup, ///< 18 - ITS Group - TokenFixerNamedComponentNode, ///< 19 - Named Component - TokenFixerRootComplexNode, ///< 20 - Root Complex - TokenFixerNotImplemented, ///< 21 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 22 - SMMUv3 - TokenFixerNotImplemented, ///< 23 - PMCG - NULL, ///< 24 - GIC ITS Identifier Array - NULL, ///< 25 - ID Mapping Array - NULL, ///< 26 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 27 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 28 - Cache Info + NULL, ///< 2 - Power Management Profile Info + NULL, ///< 3 - GIC CPU Interface Info + NULL, ///< 4 - GIC Distributor Info + NULL, ///< 5 - GIC MSI Frame Info + NULL, ///< 6 - GIC Redistributor Info + NULL, ///< 7 - GIC ITS Info + NULL, ///< 8 - Serial Console Port Info + NULL, ///< 9 - Serial Debug Port Info + NULL, ///< 10 - Generic Timer Info + NULL, ///< 11 - Platform GT Block Info + NULL, ///< 12 - Generic Timer Block Frame Info + NULL, ///< 13 - Platform Generic Watchdog + NULL, ///< 14 - PCI Configuration Space Info + NULL, ///< 15 - Hypervisor Vendor Id + NULL, ///< 16 - Fixed feature flags for FADT + TokenFixerItsGroup, ///< 17 - ITS Group + TokenFixerNamedComponentNode, ///< 18 - Named Component + TokenFixerRootComplexNode, ///< 19 - Root Complex + TokenFixerNotImplemented, ///< 20 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 21 - SMMUv3 + TokenFixerNotImplemented, ///< 22 - PMCG + NULL, ///< 23 - GIC ITS Identifier Array + NULL, ///< 24 - ID Mapping Array + NULL, ///< 25 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 26 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 27 - Cache Info TokenFixerNotImplemented, ///< 29 - Reserved - NULL, ///< 30 - CM Object Reference - NULL, ///< 31 - Memory Affinity Info - NULL, ///< 32 - Device Handle Acpi - NULL, ///< 33 - Device Handle Pci - NULL, ///< 34 - Generic Initiator Affinity - NULL, ///< 35 - Generic Serial Port Info - NULL, ///< 36 - CMN-600 Info - NULL, ///< 37 - Lpi Info - NULL, ///< 38 - Pci Address Map Info - NULL, ///< 39 - Pci Interrupt Map Info - NULL, ///< 40 - Reserved Memory Range Node - NULL, ///< 41 - Memory Range Descriptor - NULL, ///< 42 - Continuous Performance Control Info - NULL, ///< 43 - Pcc Subspace Type 0 Info + NULL, ///< 29 - CM Object Reference + NULL, ///< 30 - Memory Affinity Info + NULL, ///< 31 - Device Handle Acpi + NULL, ///< 32 - Device Handle Pci + NULL, ///< 33 - Generic Initiator Affinity + NULL, ///< 34 - Generic Serial Port Info + NULL, ///< 35 - CMN-600 Info + NULL, ///< 36 - Lpi Info + NULL, ///< 37 - Pci Address Map Info + NULL, ///< 38 - Pci Interrupt Map Info + NULL, ///< 39 - Reserved Memory Range Node + NULL, ///< 40 - Memory Range Descriptor + NULL, ///< 41 - Continuous Performance Control Info + NULL, ///< 42 - Pcc Subspace Type 0 Info + NULL, ///< 43 - Pcc Subspace Type 2 Info NULL, ///< 44 - Pcc Subspace Type 2 Info - NULL, ///< 45 - Pcc Subspace Type 2 Info - NULL, ///< 46 - Pcc Subspace Type 3 Info - NULL, ///< 47 - Pcc Subspace Type 4 Info - NULL, ///< 48 - Pcc Subspace Type 5 Info - NULL, ///< 49 - Embedded Trace Extension/Module Info - NULL ///< 50 - P-State Dependency (PSD) Info + NULL, ///< 45 - Pcc Subspace Type 3 Info + NULL, ///< 46 - Pcc Subspace Type 4 Info + NULL, ///< 47 - Pcc Subspace Type 5 Info + NULL, ///< 48 - Embedded Trace Extension/Module Info + NULL ///< 49 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 6f5dbdfd2d86..af5884832cda 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -679,7 +679,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved), CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser), - CM_PARSER_ADD_OBJECT_RESERVED (EArmObjCpuInfo), CM_PARSER_ADD_OBJECT (EArmObjPowerManagementProfileInfo, CmArmPowerManagementProfileInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 1ae423af7562..80759f953487 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -442,55 +442,54 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | ---: | :-------------------------- | :--- | | 0 | Reserved | | | 1 | Boot Architecture Info | | -| 2 | CPU Info | | -| 3 | Power Management Profile Info | | -| 4 | GICC Info | | -| 5 | GICD Info | | -| 6 | GIC MSI Frame Info | | -| 7 | GIC Redistributor Info | | -| 8 | GIC ITS Info | | -| 9 | Serial Console Port Info | | -| 10 | Serial Debug Port Info | | -| 11 | Generic Timer Info | | -| 12 | Platform GT Block Info | | -| 13 | Generic Timer Block Frame Info | | -| 14 | Platform Generic Watchdog | | -| 15 | PCI Configuration Space Info | | -| 16 | Hypervisor Vendor Id | | -| 17 | Fixed feature flags for FADT | | -| 18 | ITS Group | | -| 19 | Named Component | | -| 20 | Root Complex | | -| 21 | SMMUv1 or SMMUv2 | | -| 22 | SMMUv3 | | -| 23 | PMCG | | -| 24 | GIC ITS Identifier Array | | -| 25 | ID Mapping Array | | -| 26 | SMMU Interrupt Array | | -| 27 | Processor Hierarchy Info | | -| 28 | Cache Info | | -| 29 | Reserved29 | | -| 30 | CM Object Reference | | -| 31 | Memory Affinity Info | | -| 32 | Device Handle Acpi | | -| 33 | Device Handle PCI | | -| 34 | Generic Initiator Affinity Info | | -| 35 | Serial Port Info | | -| 36 | CMN 600 Info | | -| 37 | Low Power Idle State Info | | -| 38 | PCI Address Map Info | | -| 39 | PCI Interrupt Map Info | | -| 40 | Reserved Memory Range Node | | -| 41 | Memory Range Descriptor | | -| 42 | Continuous Performance Control Info | | -| 43 | Pcc Subspace Type 0 Info | | -| 44 | Pcc Subspace Type 1 Info | | -| 45 | Pcc Subspace Type 2 Info | | -| 46 | Pcc Subspace Type 3 Info | | -| 47 | Pcc Subspace Type 4 Info | | -| 48 | Pcc Subspace Type 5 Info | | -| 49 | Embedded Trace Extension/Module Info | | -| 50 | P-State Dependency (PSD) Info | | +| 2 | Power Management Profile Info | Move to Arch Common NS | +| 3 | GICC Info | | +| 4 | GICD Info | | +| 5 | GIC MSI Frame Info | | +| 6 | GIC Redistributor Info | | +| 7 | GIC ITS Info | | +| 8 | Serial Console Port Info | Move to Arch Common NS | +| 9 | Serial Debug Port Info | Move to Arch Common NS | +| 10 | Generic Timer Info | | +| 11 | Platform GT Block Info | | +| 12 | Generic Timer Block Frame Info | | +| 13 | Platform Generic Watchdog | | +| 14 | PCI Configuration Space Info | Move to Arch Common NS | +| 15 | Hypervisor Vendor Id | Move to Arch Common NS | +| 16 | Fixed feature flags for FADT | Move to Arch Common NS | +| 17 | ITS Group | | +| 18 | Named Component | | +| 19 | Root Complex | | +| 20 | SMMUv1 or SMMUv2 | | +| 21 | SMMUv3 | | +| 22 | PMCG | | +| 23 | GIC ITS Identifier Array | | +| 24 | ID Mapping Array | | +| 25 | SMMU Interrupt Array | | +| 26 | Processor Hierarchy Info | Move to Arch Common NS | +| 27 | Cache Info | Move to Arch Common NS | +| 28 | Reserved29 | Unused to be dropped.| +| 29 | CM Object Reference | Move to Arch Common NS | +| 30 | Memory Affinity Info | Move to Arch Common NS | +| 31 | Device Handle Acpi | Move to Arch Common NS | +| 32 | Device Handle PCI | Move to Arch Common NS | +| 33 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 34 | Serial Port Info | Move to Arch Common NS | +| 35 | CMN 600 Info | | +| 36 | Low Power Idle State Info | Move to Arch Common NS | +| 37 | PCI Address Map Info | Move to Arch Common NS | +| 38 | PCI Interrupt Map Info | Move to Arch Common NS | +| 39 | Reserved Memory Range Node | | +| 40 | Memory Range Descriptor | | +| 41 | Continuous Performance Control Info | Move to Arch Common NS | +| 42 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 43 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 44 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 45 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 46 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 47 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 48 | Embedded Trace Extension/Module Info | | +| 49 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: From ccbf5564933f1c0e8b645892cd75355f4727a805 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Tue, 5 Mar 2024 14:31:49 +0000 Subject: [PATCH 11/56] DynamicTablesPkg: Drop Reserved29 object ID from Arm Namespace The Arm Namespace Object ID Reserved29 was a reserved ID that was never used. Therefore, drop the EArmObjReserved29 object ID also update the Dynamic Plat Repo TokenFixer map and the Configuration Manager Object Parser. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArmNameSpaceObjects.h | 43 +++++++++---------- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 41 +++++++++--------- .../ConfigurationManagerObjectParser.c | 1 - DynamicTablesPkg/Readme.md | 43 +++++++++---------- 4 files changed, 62 insertions(+), 66 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 2eeff594fc59..f7e1a0933f7b 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -56,28 +56,27 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 25 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 26 - Processor Hierarchy Info EArmObjCacheInfo, ///< 27 - Cache Info - EArmObjReserved29, ///< 28 - Reserved - EArmObjCmRef, ///< 29 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 30 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 31 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 32 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 33 - Generic Initiator Affinity - EArmObjSerialPortInfo, ///< 34 - Generic Serial Port Info - EArmObjCmn600Info, ///< 35 - CMN-600 Info - EArmObjLpiInfo, ///< 36 - Lpi Info - EArmObjPciAddressMapInfo, ///< 37 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 38 - Pci Interrupt Map Info - EArmObjRmr, ///< 39 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 40 - Memory Range Descriptor - EArmObjCpcInfo, ///< 41 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 42 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 43 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 44 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 45 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 46 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 47 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 48 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 49 - P-State Dependency (PSD) Info + EArmObjCmRef, ///< 28 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 29 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 30 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 31 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 32 - Generic Initiator Affinity + EArmObjSerialPortInfo, ///< 33 - Generic Serial Port Info + EArmObjCmn600Info, ///< 34 - CMN-600 Info + EArmObjLpiInfo, ///< 35 - Lpi Info + EArmObjPciAddressMapInfo, ///< 36 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 37 - Pci Interrupt Map Info + EArmObjRmr, ///< 38 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 39 - Memory Range Descriptor + EArmObjCpcInfo, ///< 40 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 41 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 42 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 43 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 44 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 45 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 46 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 47 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 48 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 07e26a4f4e4c..833fa2d6a24b 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -171,28 +171,27 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 25 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 26 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 27 - Cache Info - TokenFixerNotImplemented, ///< 29 - Reserved - NULL, ///< 29 - CM Object Reference - NULL, ///< 30 - Memory Affinity Info - NULL, ///< 31 - Device Handle Acpi - NULL, ///< 32 - Device Handle Pci - NULL, ///< 33 - Generic Initiator Affinity - NULL, ///< 34 - Generic Serial Port Info - NULL, ///< 35 - CMN-600 Info - NULL, ///< 36 - Lpi Info - NULL, ///< 37 - Pci Address Map Info - NULL, ///< 38 - Pci Interrupt Map Info - NULL, ///< 39 - Reserved Memory Range Node - NULL, ///< 40 - Memory Range Descriptor - NULL, ///< 41 - Continuous Performance Control Info - NULL, ///< 42 - Pcc Subspace Type 0 Info + NULL, ///< 28 - CM Object Reference + NULL, ///< 29 - Memory Affinity Info + NULL, ///< 30 - Device Handle Acpi + NULL, ///< 31 - Device Handle Pci + NULL, ///< 32 - Generic Initiator Affinity + NULL, ///< 33 - Generic Serial Port Info + NULL, ///< 34 - CMN-600 Info + NULL, ///< 35 - Lpi Info + NULL, ///< 36 - Pci Address Map Info + NULL, ///< 37 - Pci Interrupt Map Info + NULL, ///< 38 - Reserved Memory Range Node + NULL, ///< 39 - Memory Range Descriptor + NULL, ///< 40 - Continuous Performance Control Info + NULL, ///< 41 - Pcc Subspace Type 0 Info + NULL, ///< 42 - Pcc Subspace Type 2 Info NULL, ///< 43 - Pcc Subspace Type 2 Info - NULL, ///< 44 - Pcc Subspace Type 2 Info - NULL, ///< 45 - Pcc Subspace Type 3 Info - NULL, ///< 46 - Pcc Subspace Type 4 Info - NULL, ///< 47 - Pcc Subspace Type 5 Info - NULL, ///< 48 - Embedded Trace Extension/Module Info - NULL ///< 49 - P-State Dependency (PSD) Info + NULL, ///< 44 - Pcc Subspace Type 3 Info + NULL, ///< 45 - Pcc Subspace Type 4 Info + NULL, ///< 46 - Pcc Subspace Type 5 Info + NULL, ///< 47 - Embedded Trace Extension/Module Info + NULL ///< 48 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index af5884832cda..6896463b2848 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -705,7 +705,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArmGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved29), CM_PARSER_ADD_OBJECT (EArmObjCmRef, CmArmObjRefParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 80759f953487..8d30bf560b3d 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -468,28 +468,27 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 25 | SMMU Interrupt Array | | | 26 | Processor Hierarchy Info | Move to Arch Common NS | | 27 | Cache Info | Move to Arch Common NS | -| 28 | Reserved29 | Unused to be dropped.| -| 29 | CM Object Reference | Move to Arch Common NS | -| 30 | Memory Affinity Info | Move to Arch Common NS | -| 31 | Device Handle Acpi | Move to Arch Common NS | -| 32 | Device Handle PCI | Move to Arch Common NS | -| 33 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 34 | Serial Port Info | Move to Arch Common NS | -| 35 | CMN 600 Info | | -| 36 | Low Power Idle State Info | Move to Arch Common NS | -| 37 | PCI Address Map Info | Move to Arch Common NS | -| 38 | PCI Interrupt Map Info | Move to Arch Common NS | -| 39 | Reserved Memory Range Node | | -| 40 | Memory Range Descriptor | | -| 41 | Continuous Performance Control Info | Move to Arch Common NS | -| 42 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 43 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 44 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 45 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 46 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 47 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 48 | Embedded Trace Extension/Module Info | | -| 49 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 28 | CM Object Reference | Move to Arch Common NS | +| 29 | Memory Affinity Info | Move to Arch Common NS | +| 30 | Device Handle Acpi | Move to Arch Common NS | +| 31 | Device Handle PCI | Move to Arch Common NS | +| 32 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 33 | Serial Port Info | Move to Arch Common NS | +| 34 | CMN 600 Info | | +| 35 | Low Power Idle State Info | Move to Arch Common NS | +| 36 | PCI Address Map Info | Move to Arch Common NS | +| 37 | PCI Interrupt Map Info | Move to Arch Common NS | +| 38 | Reserved Memory Range Node | | +| 39 | Memory Range Descriptor | | +| 40 | Continuous Performance Control Info | Move to Arch Common NS | +| 41 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 42 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 43 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 44 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 45 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 46 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 47 | Embedded Trace Extension/Module Info | | +| 48 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: From c462c2f095053b673b6e9c72a8e4b25f2fddcc07 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Thu, 7 Mar 2024 13:31:39 +0000 Subject: [PATCH 12/56] ArmVirtPkg: Kvmtool: Update ConfigMgr to support ArchCommon Update the Configuration Manager for Kvmtool guest firmware to handle ArchComm namespace objects. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../KvmtoolCfgMgrDxe/ConfigurationManager.c | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c index 68b9d2bf0513..4a76583f969c 100644 --- a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c +++ b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c @@ -722,6 +722,73 @@ GetStandardNameSpaceObject ( return Status; } +/** + Return an ArchCommon namespace object. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +EFI_STATUS +EFIAPI +GetArchCommonNameSpaceObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject + ) +{ + EFI_STATUS Status; + EDKII_PLATFORM_REPOSITORY_INFO *PlatformRepo; + + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + Status = EFI_NOT_FOUND; + PlatformRepo = This->PlatRepoInfo; + + // + // First check among the static objects. + // + switch (GET_CM_OBJECT_ID (CmObjectId)) { + default: + // + // No match found among the static objects. + // Check the dynamic objects. + // + Status = DynamicPlatRepoGetObject ( + PlatformRepo->DynamicPlatformRepo, + CmObjectId, + Token, + CmObject + ); + break; + } // switch + + if (Status == EFI_NOT_FOUND) { + DEBUG (( + DEBUG_INFO, + "INFO: CmObjectId " FMT_CM_OBJECT_ID ". Status = %r\n", + CmObjectId, + Status + )); + } else { + ASSERT_EFI_ERROR (Status); + } + + return Status; +} + /** Return an ARM namespace object. @@ -929,6 +996,9 @@ ArmKvmtoolPlatformGetObject ( case EObjNameSpaceStandard: Status = GetStandardNameSpaceObject (This, CmObjectId, Token, CmObject); break; + case EObjNameSpaceArchCommon: + Status = GetArchCommonNameSpaceObject (This, CmObjectId, Token, CmObject); + break; case EObjNameSpaceArm: Status = GetArmNameSpaceObject (This, CmObjectId, Token, CmObject); break; From 02138e71309005d928179861a77b98d8005a628a Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Tue, 5 Mar 2024 16:34:46 +0000 Subject: [PATCH 13/56] DynamicTablesPkg: Move Power Mgmt Profile Info Object Move PowerManagementProfileInfo Object from Arm Namespace to the Arch Common namespace. The following updates are also done to reflect the changes introduced by the move: - Update the FADT Generator to migrate to use the Power Management Profile Info object CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO and EArchCommonObjPowerManagementProfileInfo. - Update the Configuration manager object parser to parse Arch Common namespace objects and update the parsing of the Power Management Profile information object from Arm namespace to the Arch Common namespace. - Update the Dynamic Plat Repo TokenFixer map Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 18 +++ .../Include/ArmNameSpaceObjects.h | 105 ++++++++---------- .../Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c | 14 +-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 91 ++++++++------- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 94 ++++++++-------- 6 files changed, 166 insertions(+), 162 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index e4205d6ba6bc..bbf3cd1e2e39 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -21,7 +21,25 @@ */ typedef enum ArchCommonObjectID { EArchCommonObjReserved, ///< 0 - Reserved + EArchCommonObjPowerManagementProfileInfo, ///< 1 - Power Management Profile Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; +#pragma pack(1) + +/** A structure that describes the + Power Management Profile Information for the Platform. + + ID: EArchCommonObjPowerManagementProfileInfo +*/ +typedef struct CmArchCommonPowerManagementProfileInfo { + /** This is the Preferred_PM_Profile field of the FADT Table + described in the ACPI Specification + */ + UINT8 PowerManagementProfile; +} CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO; + + +#pragma pack() + #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index f7e1a0933f7b..3d9a15184695 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -30,53 +30,52 @@ typedef enum ArmObjectID { EArmObjReserved, ///< 0 - Reserved EArmObjBootArchInfo, ///< 1 - Boot Architecture Info - EArmObjPowerManagementProfileInfo, ///< 2 - Power Management Profile Info - EArmObjGicCInfo, ///< 3 - GIC CPU Interface Info - EArmObjGicDInfo, ///< 4 - GIC Distributor Info - EArmObjGicMsiFrameInfo, ///< 5 - GIC MSI Frame Info - EArmObjGicRedistributorInfo, ///< 6 - GIC Redistributor Info - EArmObjGicItsInfo, ///< 7 - GIC ITS Info - EArmObjSerialConsolePortInfo, ///< 8 - Serial Console Port Info - EArmObjSerialDebugPortInfo, ///< 9 - Serial Debug Port Info - EArmObjGenericTimerInfo, ///< 10 - Generic Timer Info - EArmObjPlatformGTBlockInfo, ///< 11 - Platform GT Block Info - EArmObjGTBlockTimerFrameInfo, ///< 12 - Generic Timer Block Frame Info - EArmObjPlatformGenericWatchdogInfo, ///< 13 - Platform Generic Watchdog - EArmObjPciConfigSpaceInfo, ///< 14 - PCI Configuration Space Info - EArmObjHypervisorVendorIdentity, ///< 15 - Hypervisor Vendor Id - EArmObjFixedFeatureFlags, ///< 16 - Fixed feature flags for FADT - EArmObjItsGroup, ///< 17 - ITS Group - EArmObjNamedComponent, ///< 18 - Named Component - EArmObjRootComplex, ///< 19 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 20 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 21 - SMMUv3 - EArmObjPmcg, ///< 22 - PMCG - EArmObjGicItsIdentifierArray, ///< 23 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 24 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 25 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 26 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 27 - Cache Info - EArmObjCmRef, ///< 28 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 29 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 30 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 31 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 32 - Generic Initiator Affinity - EArmObjSerialPortInfo, ///< 33 - Generic Serial Port Info - EArmObjCmn600Info, ///< 34 - CMN-600 Info - EArmObjLpiInfo, ///< 35 - Lpi Info - EArmObjPciAddressMapInfo, ///< 36 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 37 - Pci Interrupt Map Info - EArmObjRmr, ///< 38 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 39 - Memory Range Descriptor - EArmObjCpcInfo, ///< 40 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 41 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 42 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 43 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 44 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 45 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 46 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 47 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 48 - P-State Dependency (PSD) Info + EArmObjGicCInfo, ///< 2 - GIC CPU Interface Info + EArmObjGicDInfo, ///< 3 - GIC Distributor Info + EArmObjGicMsiFrameInfo, ///< 4 - GIC MSI Frame Info + EArmObjGicRedistributorInfo, ///< 5 - GIC Redistributor Info + EArmObjGicItsInfo, ///< 6 - GIC ITS Info + EArmObjSerialConsolePortInfo, ///< 7 - Serial Console Port Info + EArmObjSerialDebugPortInfo, ///< 8 - Serial Debug Port Info + EArmObjGenericTimerInfo, ///< 9 - Generic Timer Info + EArmObjPlatformGTBlockInfo, ///< 10 - Platform GT Block Info + EArmObjGTBlockTimerFrameInfo, ///< 11 - Generic Timer Block Frame Info + EArmObjPlatformGenericWatchdogInfo, ///< 12 - Platform Generic Watchdog + EArmObjPciConfigSpaceInfo, ///< 13 - PCI Configuration Space Info + EArmObjHypervisorVendorIdentity, ///< 14 - Hypervisor Vendor Id + EArmObjFixedFeatureFlags, ///< 15 - Fixed feature flags for FADT + EArmObjItsGroup, ///< 16 - ITS Group + EArmObjNamedComponent, ///< 17 - Named Component + EArmObjRootComplex, ///< 18 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 19 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 20 - SMMUv3 + EArmObjPmcg, ///< 21 - PMCG + EArmObjGicItsIdentifierArray, ///< 22 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 23 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 24 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 25 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 26 - Cache Info + EArmObjCmRef, ///< 27 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 28 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 29 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 30 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 31 - Generic Initiator Affinity + EArmObjSerialPortInfo, ///< 32 - Generic Serial Port Info + EArmObjCmn600Info, ///< 33 - CMN-600 Info + EArmObjLpiInfo, ///< 34 - Lpi Info + EArmObjPciAddressMapInfo, ///< 35 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 36 - Pci Interrupt Map Info + EArmObjRmr, ///< 37 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 38 - Memory Range Descriptor + EArmObjCpcInfo, ///< 39 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 40 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 41 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 42 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 43 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 44 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 45 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 46 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 47 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -92,18 +91,6 @@ typedef struct CmArmBootArchInfo { UINT16 BootArchFlags; } CM_ARM_BOOT_ARCH_INFO; -/** A structure that describes the - Power Management Profile Information for the Platform. - - ID: EArmObjPowerManagementProfileInfo -*/ -typedef struct CmArmPowerManagementProfileInfo { - /** This is the Preferred_PM_Profile field of the FADT Table - described in the ACPI Specification - */ - UINT8 PowerManagementProfile; -} CM_ARM_POWER_MANAGEMENT_PROFILE_INFO; - /** A structure that describes the GIC CPU Interface for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c index 57aaaf85e64a..ea8c821d1155 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c @@ -25,7 +25,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjPowerManagementProfileInfo + - EArchCommonObjPowerManagementProfileInfo - EArmObjBootArchInfo - EArmObjHypervisorVendorIdentity (OPTIONAL) */ @@ -202,9 +202,9 @@ EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE AcpiFadt = { Management Profile Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPowerManagementProfileInfo, - CM_ARM_POWER_MANAGEMENT_PROFILE_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPowerManagementProfileInfo, + CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO ); /** This macro expands to a function that retrieves the Boot @@ -253,13 +253,13 @@ FadtAddPmProfileInfo ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol ) { - EFI_STATUS Status; - CM_ARM_POWER_MANAGEMENT_PROFILE_INFO *PmProfile; + EFI_STATUS Status; + CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO *PmProfile; ASSERT (CfgMgrProtocol != NULL); // Get the Power Management Profile from the Platform Configuration Manager - Status = GetEArmObjPowerManagementProfileInfo ( + Status = GetEArchCommonObjPowerManagementProfileInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &PmProfile, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 833fa2d6a24b..ef2a8dcfdddf 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -145,53 +145,52 @@ CONST CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 0 - Reserved NULL, ///< 1 - Boot Architecture Info - NULL, ///< 2 - Power Management Profile Info - NULL, ///< 3 - GIC CPU Interface Info - NULL, ///< 4 - GIC Distributor Info - NULL, ///< 5 - GIC MSI Frame Info - NULL, ///< 6 - GIC Redistributor Info - NULL, ///< 7 - GIC ITS Info - NULL, ///< 8 - Serial Console Port Info - NULL, ///< 9 - Serial Debug Port Info - NULL, ///< 10 - Generic Timer Info - NULL, ///< 11 - Platform GT Block Info - NULL, ///< 12 - Generic Timer Block Frame Info - NULL, ///< 13 - Platform Generic Watchdog - NULL, ///< 14 - PCI Configuration Space Info - NULL, ///< 15 - Hypervisor Vendor Id - NULL, ///< 16 - Fixed feature flags for FADT - TokenFixerItsGroup, ///< 17 - ITS Group - TokenFixerNamedComponentNode, ///< 18 - Named Component - TokenFixerRootComplexNode, ///< 19 - Root Complex - TokenFixerNotImplemented, ///< 20 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 21 - SMMUv3 - TokenFixerNotImplemented, ///< 22 - PMCG - NULL, ///< 23 - GIC ITS Identifier Array - NULL, ///< 24 - ID Mapping Array - NULL, ///< 25 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 26 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 27 - Cache Info - NULL, ///< 28 - CM Object Reference - NULL, ///< 29 - Memory Affinity Info - NULL, ///< 30 - Device Handle Acpi - NULL, ///< 31 - Device Handle Pci - NULL, ///< 32 - Generic Initiator Affinity - NULL, ///< 33 - Generic Serial Port Info - NULL, ///< 34 - CMN-600 Info - NULL, ///< 35 - Lpi Info - NULL, ///< 36 - Pci Address Map Info - NULL, ///< 37 - Pci Interrupt Map Info - NULL, ///< 38 - Reserved Memory Range Node - NULL, ///< 39 - Memory Range Descriptor - NULL, ///< 40 - Continuous Performance Control Info - NULL, ///< 41 - Pcc Subspace Type 0 Info + NULL, ///< 2 - GIC CPU Interface Info + NULL, ///< 3 - GIC Distributor Info + NULL, ///< 4 - GIC MSI Frame Info + NULL, ///< 5 - GIC Redistributor Info + NULL, ///< 6 - GIC ITS Info + NULL, ///< 7 - Serial Console Port Info + NULL, ///< 8 - Serial Debug Port Info + NULL, ///< 9 - Generic Timer Info + NULL, ///< 10 - Platform GT Block Info + NULL, ///< 11 - Generic Timer Block Frame Info + NULL, ///< 12 - Platform Generic Watchdog + NULL, ///< 13 - PCI Configuration Space Info + NULL, ///< 14 - Hypervisor Vendor Id + NULL, ///< 15 - Fixed feature flags for FADT + TokenFixerItsGroup, ///< 16 - ITS Group + TokenFixerNamedComponentNode, ///< 17 - Named Component + TokenFixerRootComplexNode, ///< 18 - Root Complex + TokenFixerNotImplemented, ///< 19 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 20 - SMMUv3 + TokenFixerNotImplemented, ///< 21 - PMCG + NULL, ///< 22 - GIC ITS Identifier Array + NULL, ///< 23 - ID Mapping Array + NULL, ///< 24 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 25 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 26 - Cache Info + NULL, ///< 27 - CM Object Reference + NULL, ///< 28 - Memory Affinity Info + NULL, ///< 29 - Device Handle Acpi + NULL, ///< 30 - Device Handle Pci + NULL, ///< 31 - Generic Initiator Affinity + NULL, ///< 32 - Generic Serial Port Info + NULL, ///< 33 - CMN-600 Info + NULL, ///< 34 - Lpi Info + NULL, ///< 35 - Pci Address Map Info + NULL, ///< 36 - Pci Interrupt Map Info + NULL, ///< 37 - Reserved Memory Range Node + NULL, ///< 38 - Memory Range Descriptor + NULL, ///< 39 - Continuous Performance Control Info + NULL, ///< 40 - Pcc Subspace Type 0 Info + NULL, ///< 41 - Pcc Subspace Type 2 Info NULL, ///< 42 - Pcc Subspace Type 2 Info - NULL, ///< 43 - Pcc Subspace Type 2 Info - NULL, ///< 44 - Pcc Subspace Type 3 Info - NULL, ///< 45 - Pcc Subspace Type 4 Info - NULL, ///< 46 - Pcc Subspace Type 5 Info - NULL, ///< 47 - Embedded Trace Extension/Module Info - NULL ///< 48 - P-State Dependency (PSD) Info + NULL, ///< 43 - Pcc Subspace Type 3 Info + NULL, ///< 44 - Pcc Subspace Type 4 Info + NULL, ///< 45 - Pcc Subspace Type 5 Info + NULL, ///< 46 - Embedded Trace Extension/Module Info + NULL ///< 47 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 6896463b2848..0d3e53312bb2 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -57,9 +57,9 @@ STATIC CONST CM_OBJ_PARSER CmArmBootArchInfoParser[] = { { "BootArchFlags", 2, "0x%x", NULL } }; -/** A parser for EArmObjPowerManagementProfileInfo. +/** A parser for EArchCommonObjPowerManagementProfileInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmPowerManagementProfileInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPowerManagementProfileInfoParser[] = { { "PowerManagementProfile", 1, "0x%x", NULL } }; @@ -671,6 +671,7 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { */ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjReserved), + CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo,CmArchCommonPowerManagementProfileInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -679,7 +680,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved), CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPowerManagementProfileInfo, CmArmPowerManagementProfileInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 8d30bf560b3d..3295bb29931a 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -442,53 +442,52 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | ---: | :-------------------------- | :--- | | 0 | Reserved | | | 1 | Boot Architecture Info | | -| 2 | Power Management Profile Info | Move to Arch Common NS | -| 3 | GICC Info | | -| 4 | GICD Info | | -| 5 | GIC MSI Frame Info | | -| 6 | GIC Redistributor Info | | -| 7 | GIC ITS Info | | -| 8 | Serial Console Port Info | Move to Arch Common NS | -| 9 | Serial Debug Port Info | Move to Arch Common NS | -| 10 | Generic Timer Info | | -| 11 | Platform GT Block Info | | -| 12 | Generic Timer Block Frame Info | | -| 13 | Platform Generic Watchdog | | -| 14 | PCI Configuration Space Info | Move to Arch Common NS | -| 15 | Hypervisor Vendor Id | Move to Arch Common NS | -| 16 | Fixed feature flags for FADT | Move to Arch Common NS | -| 17 | ITS Group | | -| 18 | Named Component | | -| 19 | Root Complex | | -| 20 | SMMUv1 or SMMUv2 | | -| 21 | SMMUv3 | | -| 22 | PMCG | | -| 23 | GIC ITS Identifier Array | | -| 24 | ID Mapping Array | | -| 25 | SMMU Interrupt Array | | -| 26 | Processor Hierarchy Info | Move to Arch Common NS | -| 27 | Cache Info | Move to Arch Common NS | -| 28 | CM Object Reference | Move to Arch Common NS | -| 29 | Memory Affinity Info | Move to Arch Common NS | -| 30 | Device Handle Acpi | Move to Arch Common NS | -| 31 | Device Handle PCI | Move to Arch Common NS | -| 32 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 33 | Serial Port Info | Move to Arch Common NS | -| 34 | CMN 600 Info | | -| 35 | Low Power Idle State Info | Move to Arch Common NS | -| 36 | PCI Address Map Info | Move to Arch Common NS | -| 37 | PCI Interrupt Map Info | Move to Arch Common NS | -| 38 | Reserved Memory Range Node | | -| 39 | Memory Range Descriptor | | -| 40 | Continuous Performance Control Info | Move to Arch Common NS | -| 41 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 42 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 43 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 44 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 45 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 46 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 47 | Embedded Trace Extension/Module Info | | -| 48 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 2 | GICC Info | | +| 3 | GICD Info | | +| 4 | GIC MSI Frame Info | | +| 5 | GIC Redistributor Info | | +| 6 | GIC ITS Info | | +| 7 | Serial Console Port Info | Move to Arch Common NS | +| 8 | Serial Debug Port Info | Move to Arch Common NS | +| 9 | Generic Timer Info | | +| 10 | Platform GT Block Info | | +| 11 | Generic Timer Block Frame Info | | +| 12 | Platform Generic Watchdog | | +| 13 | PCI Configuration Space Info | Move to Arch Common NS | +| 14 | Hypervisor Vendor Id | Move to Arch Common NS | +| 15 | Fixed feature flags for FADT | Move to Arch Common NS | +| 16 | ITS Group | | +| 17 | Named Component | | +| 18 | Root Complex | | +| 19 | SMMUv1 or SMMUv2 | | +| 20 | SMMUv3 | | +| 21 | PMCG | | +| 22 | GIC ITS Identifier Array | | +| 23 | ID Mapping Array | | +| 24 | SMMU Interrupt Array | | +| 25 | Processor Hierarchy Info | Move to Arch Common NS | +| 26 | Cache Info | Move to Arch Common NS | +| 27 | CM Object Reference | Move to Arch Common NS | +| 28 | Memory Affinity Info | Move to Arch Common NS | +| 29 | Device Handle Acpi | Move to Arch Common NS | +| 30 | Device Handle PCI | Move to Arch Common NS | +| 31 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 32 | Serial Port Info | Move to Arch Common NS | +| 33 | CMN 600 Info | | +| 34 | Low Power Idle State Info | Move to Arch Common NS | +| 35 | PCI Address Map Info | Move to Arch Common NS | +| 36 | PCI Interrupt Map Info | Move to Arch Common NS | +| 37 | Reserved Memory Range Node | | +| 38 | Memory Range Descriptor | | +| 39 | Continuous Performance Control Info | Move to Arch Common NS | +| 40 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 41 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 42 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 43 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 44 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 45 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 46 | Embedded Trace Extension/Module Info | | +| 47 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | ID | Description | Comments | | ---: | :-------------------------- | :--- | | 0 | Reserved | | +| 1 | Power Management Profile Info | | | `*` | All other values are reserved. | | From b3cd18ea1f577562e064ce95f6ee2142ddcc9101 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Tue, 16 Apr 2024 14:46:50 +0530 Subject: [PATCH 14/56] ArmVirtPkg: Kvmtool: Update Power Mgmt Profile info in Cfg Manager The PowerManagementProfileInfo Object has been moved from the Arm Namespace to the Arch Common namespace. Therefore, update the Kvmtool Guest firmware configuration manager to reflect this change. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Reviewed-by: Sunil V L --- .../KvmtoolCfgMgrDxe/ConfigurationManager.c | 20 +++++++++---------- .../KvmtoolCfgMgrDxe/ConfigurationManager.h | 20 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c index 4a76583f969c..724054440644 100644 --- a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c +++ b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c @@ -761,6 +761,16 @@ GetArchCommonNameSpaceObject ( // First check among the static objects. // switch (GET_CM_OBJECT_ID (CmObjectId)) { + case EArchCommonObjPowerManagementProfileInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->PmProfileInfo, + sizeof (PlatformRepo->PmProfileInfo), + 1, + CmObject + ); + break; + default: // // No match found among the static objects. @@ -828,16 +838,6 @@ GetArmNameSpaceObject ( // First check among the static objects. // switch (GET_CM_OBJECT_ID (CmObjectId)) { - case EArmObjPowerManagementProfileInfo: - Status = HandleCmObject ( - CmObjectId, - &PlatformRepo->PmProfileInfo, - sizeof (PlatformRepo->PmProfileInfo), - 1, - CmObject - ); - break; - case EArmObjItsGroup: Status = HandleCmObject ( CmObjectId, diff --git a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.h b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.h index 3373948bc4eb..4fb12db73b81 100644 --- a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.h +++ b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.h @@ -73,53 +73,53 @@ typedef struct PlatformRepositoryInfo { /// /// Configuration Manager Information. /// - CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; + CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; /// /// List of ACPI tables /// - CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; + CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; /// /// Power management profile information /// - CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; + CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; /// /// ITS Group node /// - CM_ARM_ITS_GROUP_NODE ItsGroupInfo; + CM_ARM_ITS_GROUP_NODE ItsGroupInfo; /// /// ITS Identifier array /// - CM_ARM_ITS_IDENTIFIER ItsIdentifierArray[1]; + CM_ARM_ITS_IDENTIFIER ItsIdentifierArray[1]; /// /// PCI Root complex node /// - CM_ARM_ROOT_COMPLEX_NODE RootComplexInfo; + CM_ARM_ROOT_COMPLEX_NODE RootComplexInfo; /// /// Array of DeviceID mapping /// - CM_ARM_ID_MAPPING DeviceIdMapping[1]; + CM_ARM_ID_MAPPING DeviceIdMapping[1]; /// /// Dynamic platform repository. /// CmObj created by parsing the Kvmtool device tree are stored here. /// - DYNAMIC_PLATFORM_REPOSITORY_INFO *DynamicPlatformRepo; + DYNAMIC_PLATFORM_REPOSITORY_INFO *DynamicPlatformRepo; /// /// Base address of the FDT. /// - VOID *FdtBase; + VOID *FdtBase; /// /// A handle to the FDT HwInfoParser. /// - HW_INFO_PARSER_HANDLE FdtParserHandle; + HW_INFO_PARSER_HANDLE FdtParserHandle; } EDKII_PLATFORM_REPOSITORY_INFO; #endif // CONFIGURATION_MANAGER_H_ From 3f437e625c7ac0727c691d88420edc7f86d6c449 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 10:08:09 +0000 Subject: [PATCH 15/56] DynamicTablesPkg: Move Serial Port Info Objects to Arch Common Move Serial port info objects like the generic serial port info, Serial console port info and Serial debug port info from Arm Namespace to the Arch Common namespace. i.e. EArmObjSerialPortInfo -> EArchCommonObjSerialPortInfo EArmObjConsolePortInfo -> EArchCommonObjConsolePortInfo EArmObjSerialDebugPortInfo -> EArchCommonObjSerialDebugPortInfo CM_ARM_SERIAL_PORT_INFO -> CM_ARCH_COMMON_SERIAL_PORT_INFO Correspondingly also update the following modules to reflect the changes introduced by the move: - DBG2 Generator - SPCR Generator - SSDT Serial Port Fixup Lib - SSDT Serial Port Generator - FdtHwInfoParserLib/ArmSerialPortParser - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 35 ++++++ .../Include/ArmNameSpaceObjects.h | 112 ++++++------------ .../Include/Library/SsdtSerialPortFixupLib.h | 16 +-- .../Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c | 20 ++-- .../Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c | 18 +-- .../SsdtSerialPortGenerator.c | 24 ++-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 79 ++++++------ .../SsdtSerialPortFixupLib.c | 46 +++---- .../ConfigurationManagerObjectParser.c | 12 +- .../Serial/ArmSerialPortParser.c | 79 ++++++------ .../Serial/ArmSerialPortParser.h | 8 +- DynamicTablesPkg/Readme.md | 82 ++++++------- 12 files changed, 264 insertions(+), 267 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index bbf3cd1e2e39..4eabb4d38b40 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -22,6 +22,9 @@ typedef enum ArchCommonObjectID { EArchCommonObjReserved, ///< 0 - Reserved EArchCommonObjPowerManagementProfileInfo, ///< 1 - Power Management Profile Info + EArchCommonObjSerialPortInfo, ///< 2 - Generic Serial Port Info + EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info + EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -39,6 +42,38 @@ typedef struct CmArchCommonPowerManagementProfileInfo { UINT8 PowerManagementProfile; } CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO; +/** A structure that describes the + Serial Port information for the Platform. + + ID: EArchCommonObjConsolePortInfo or + EArchCommonObjSerialDebugPortInfo or + EArchCommonObjSerialPortInfo +*/ +typedef struct EArchCommonSerialPortInfo { + /// The physical base address for the serial port + UINT64 BaseAddress; + + /** The serial port interrupt. + 0 indicates that the serial port does not + have an interrupt wired. + */ + UINT32 Interrupt; + + /// The serial port baud rate + UINT64 BaudRate; + + /// The serial port clock + UINT32 Clock; + + /// Serial Port subtype + UINT16 PortSubtype; + + /// The Base address length + UINT64 BaseAddressLength; + + /// The access size + UINT8 AccessSize; +} CM_ARCH_COMMON_SERIAL_PORT_INFO; #pragma pack() diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 3d9a15184695..4878eb60e3cb 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -35,47 +35,44 @@ typedef enum ArmObjectID { EArmObjGicMsiFrameInfo, ///< 4 - GIC MSI Frame Info EArmObjGicRedistributorInfo, ///< 5 - GIC Redistributor Info EArmObjGicItsInfo, ///< 6 - GIC ITS Info - EArmObjSerialConsolePortInfo, ///< 7 - Serial Console Port Info - EArmObjSerialDebugPortInfo, ///< 8 - Serial Debug Port Info - EArmObjGenericTimerInfo, ///< 9 - Generic Timer Info - EArmObjPlatformGTBlockInfo, ///< 10 - Platform GT Block Info - EArmObjGTBlockTimerFrameInfo, ///< 11 - Generic Timer Block Frame Info - EArmObjPlatformGenericWatchdogInfo, ///< 12 - Platform Generic Watchdog - EArmObjPciConfigSpaceInfo, ///< 13 - PCI Configuration Space Info - EArmObjHypervisorVendorIdentity, ///< 14 - Hypervisor Vendor Id - EArmObjFixedFeatureFlags, ///< 15 - Fixed feature flags for FADT - EArmObjItsGroup, ///< 16 - ITS Group - EArmObjNamedComponent, ///< 17 - Named Component - EArmObjRootComplex, ///< 18 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 19 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 20 - SMMUv3 - EArmObjPmcg, ///< 21 - PMCG - EArmObjGicItsIdentifierArray, ///< 22 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 23 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 24 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 25 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 26 - Cache Info - EArmObjCmRef, ///< 27 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 28 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 29 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 30 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 31 - Generic Initiator Affinity - EArmObjSerialPortInfo, ///< 32 - Generic Serial Port Info - EArmObjCmn600Info, ///< 33 - CMN-600 Info - EArmObjLpiInfo, ///< 34 - Lpi Info - EArmObjPciAddressMapInfo, ///< 35 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 36 - Pci Interrupt Map Info - EArmObjRmr, ///< 37 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 38 - Memory Range Descriptor - EArmObjCpcInfo, ///< 39 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 40 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 41 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 42 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 43 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 44 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 45 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 46 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 47 - P-State Dependency (PSD) Info + EArmObjGenericTimerInfo, ///< 7 - Generic Timer Info + EArmObjPlatformGTBlockInfo, ///< 8 - Platform GT Block Info + EArmObjGTBlockTimerFrameInfo, ///< 9 - Generic Timer Block Frame Info + EArmObjPlatformGenericWatchdogInfo, ///< 10 - Platform Generic Watchdog + EArmObjPciConfigSpaceInfo, ///< 11 - PCI Configuration Space Info + EArmObjHypervisorVendorIdentity, ///< 12 - Hypervisor Vendor Id + EArmObjFixedFeatureFlags, ///< 13 - Fixed feature flags for FADT + EArmObjItsGroup, ///< 14 - ITS Group + EArmObjNamedComponent, ///< 15 - Named Component + EArmObjRootComplex, ///< 16 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 17 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 18 - SMMUv3 + EArmObjPmcg, ///< 19 - PMCG + EArmObjGicItsIdentifierArray, ///< 20 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 21 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 22 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 23 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 24 - Cache Info + EArmObjCmRef, ///< 25 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 26 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 27 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 28 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 29 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 30 - CMN-600 Info + EArmObjLpiInfo, ///< 31 - Lpi Info + EArmObjPciAddressMapInfo, ///< 32 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 33 - Pci Interrupt Map Info + EArmObjRmr, ///< 34 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 35 - Memory Range Descriptor + EArmObjCpcInfo, ///< 36 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 37 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 38 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 39 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 40 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 41 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 42 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 43 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 44 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -297,39 +294,6 @@ typedef struct CmArmGicItsInfo { UINT32 ProximityDomain; } CM_ARM_GIC_ITS_INFO; -/** A structure that describes the - Serial Port information for the Platform. - - ID: EArmObjSerialConsolePortInfo or - EArmObjSerialDebugPortInfo or - EArmObjSerialPortInfo -*/ -typedef struct CmArmSerialPortInfo { - /// The physical base address for the serial port - UINT64 BaseAddress; - - /** The serial port interrupt. - 0 indicates that the serial port does not - have an interrupt wired. - */ - UINT32 Interrupt; - - /// The serial port baud rate - UINT64 BaudRate; - - /// The serial port clock - UINT32 Clock; - - /// Serial Port subtype - UINT16 PortSubtype; - - /// The Base address length - UINT64 BaseAddressLength; - - /// The access size - UINT8 AccessSize; -} CM_ARM_SERIAL_PORT_INFO; - /** A structure that describes the Generic Timer information for the Platform. diff --git a/DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h b/DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h index 4835f314c4f1..ac7b39f552de 100644 --- a/DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h +++ b/DynamicTablesPkg/Include/Library/SsdtSerialPortFixupLib.h @@ -29,11 +29,11 @@ EFI_STATUS EFIAPI BuildSsdtSerialPortTable ( - IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo, - IN CONST CHAR8 *Name, - IN CONST UINT64 Uid, - OUT EFI_ACPI_DESCRIPTION_HEADER **Table + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN CONST CHAR8 *Name, + IN CONST UINT64 Uid, + OUT EFI_ACPI_DESCRIPTION_HEADER **Table ); /** Free an SSDT table previously created by @@ -52,7 +52,7 @@ FreeSsdtSerialPortTable ( /** Validate the Serial Port Information. - @param [in] SerialPortInfoTable Table of CM_ARM_SERIAL_PORT_INFO. + @param [in] SerialPortInfoTable Table of CM_ARCH_COMMON_SERIAL_PORT_INFO. @param [in] SerialPortCount Count of SerialPort in the table. @retval EFI_SUCCESS Success. @@ -61,8 +61,8 @@ FreeSsdtSerialPortTable ( EFI_STATUS EFIAPI ValidateSerialPortInfo ( - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfoTable, - IN UINT32 SerialPortCount + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfoTable, + IN UINT32 SerialPortCount ); #endif // SSDT_SERIAL_PORT_LIB_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c index f6dfb3d94c10..fbf2ba37331d 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c @@ -33,7 +33,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjSerialDebugPortInfo + - EArchCommonObjSerialDebugPortInfo */ #pragma pack(1) @@ -181,9 +181,9 @@ DBG2_TABLE AcpiDbg2 = { debug port information from the Configuration Manager */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjSerialDebugPortInfo, - CM_ARM_SERIAL_PORT_INFO + EObjNameSpaceArchCommon, + EArchCommonObjSerialDebugPortInfo, + CM_ARCH_COMMON_SERIAL_PORT_INFO ); /** Initialize the PL011/SBSA UART with the parameters obtained from @@ -198,7 +198,7 @@ GET_OBJECT_LIST ( STATIC EFI_STATUS SetupDebugUart ( - IN CONST CM_ARM_SERIAL_PORT_INFO *CONST SerialPortInfo + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *CONST SerialPortInfo ) { EFI_STATUS Status; @@ -329,10 +329,10 @@ BuildDbg2TableEx ( OUT UINTN *CONST TableCount ) { - EFI_STATUS Status; - CM_ARM_SERIAL_PORT_INFO *SerialPortInfo; - UINT32 SerialPortCount; - EFI_ACPI_DESCRIPTION_HEADER **TableList; + EFI_STATUS Status; + CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo; + UINT32 SerialPortCount; + EFI_ACPI_DESCRIPTION_HEADER **TableList; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -358,7 +358,7 @@ BuildDbg2TableEx ( *Table = NULL; - Status = GetEArmObjSerialDebugPortInfo ( + Status = GetEArchCommonObjSerialDebugPortInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &SerialPortInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c index 59cbacbfbbde..6f027f3bf941 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c @@ -33,7 +33,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjSerialConsolePortInfo + - EArchCommonObjConsolePortInfo NOTE: This implementation ignores the possibility that the Serial settings may be modified from the UEFI Shell. A more complex handler would be needed @@ -98,9 +98,9 @@ EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE AcpiSpcr = { Port Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjSerialConsolePortInfo, - CM_ARM_SERIAL_PORT_INFO + EObjNameSpaceArchCommon, + EArchCommonObjConsolePortInfo, + CM_ARCH_COMMON_SERIAL_PORT_INFO ) /** Free any resources allocated for constructing the tables. @@ -200,10 +200,10 @@ BuildSpcrTableEx ( OUT UINTN *CONST TableCount ) { - EFI_STATUS Status; - CM_ARM_SERIAL_PORT_INFO *SerialPortInfo; - UINT32 SerialPortCount; - EFI_ACPI_DESCRIPTION_HEADER **TableList; + EFI_STATUS Status; + CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo; + UINT32 SerialPortCount; + EFI_ACPI_DESCRIPTION_HEADER **TableList; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -229,7 +229,7 @@ BuildSpcrTableEx ( *Table = NULL; - Status = GetEArmObjSerialConsolePortInfo ( + Status = GetEArchCommonObjConsolePortInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &SerialPortInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c index b850320eede7..671ba057400a 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c @@ -29,16 +29,16 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjSerialPortInfo + - EArchCommonObjSerialPortInfo */ /** This macro expands to a function that retrieves the Serial-port information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjSerialPortInfo, - CM_ARM_SERIAL_PORT_INFO + EObjNameSpaceArchCommon, + EArchCommonObjSerialPortInfo, + CM_ARCH_COMMON_SERIAL_PORT_INFO ); /** Starting value for the UID to represent the serial ports. @@ -167,13 +167,13 @@ BuildSsdtSerialPortTableEx ( OUT UINTN *CONST TableCount ) { - EFI_STATUS Status; - CM_ARM_SERIAL_PORT_INFO *SerialPortInfo; - UINT32 SerialPortCount; - UINTN Index; - CHAR8 NewName[AML_NAME_SEG_SIZE + 1]; - UINT64 Uid; - EFI_ACPI_DESCRIPTION_HEADER **TableList; + EFI_STATUS Status; + CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo; + UINT32 SerialPortCount; + UINTN Index; + CHAR8 NewName[AML_NAME_SEG_SIZE + 1]; + UINT64 Uid; + EFI_ACPI_DESCRIPTION_HEADER **TableList; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -185,7 +185,7 @@ BuildSsdtSerialPortTableEx ( *Table = NULL; - Status = GetEArmObjSerialPortInfo ( + Status = GetEArchCommonObjSerialPortInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &SerialPortInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index ef2a8dcfdddf..412bf41647ae 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -150,47 +150,44 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 4 - GIC MSI Frame Info NULL, ///< 5 - GIC Redistributor Info NULL, ///< 6 - GIC ITS Info - NULL, ///< 7 - Serial Console Port Info - NULL, ///< 8 - Serial Debug Port Info - NULL, ///< 9 - Generic Timer Info - NULL, ///< 10 - Platform GT Block Info - NULL, ///< 11 - Generic Timer Block Frame Info - NULL, ///< 12 - Platform Generic Watchdog - NULL, ///< 13 - PCI Configuration Space Info - NULL, ///< 14 - Hypervisor Vendor Id - NULL, ///< 15 - Fixed feature flags for FADT - TokenFixerItsGroup, ///< 16 - ITS Group - TokenFixerNamedComponentNode, ///< 17 - Named Component - TokenFixerRootComplexNode, ///< 18 - Root Complex - TokenFixerNotImplemented, ///< 19 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 20 - SMMUv3 - TokenFixerNotImplemented, ///< 21 - PMCG - NULL, ///< 22 - GIC ITS Identifier Array - NULL, ///< 23 - ID Mapping Array - NULL, ///< 24 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 25 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 26 - Cache Info - NULL, ///< 27 - CM Object Reference - NULL, ///< 28 - Memory Affinity Info - NULL, ///< 29 - Device Handle Acpi - NULL, ///< 30 - Device Handle Pci - NULL, ///< 31 - Generic Initiator Affinity - NULL, ///< 32 - Generic Serial Port Info - NULL, ///< 33 - CMN-600 Info - NULL, ///< 34 - Lpi Info - NULL, ///< 35 - Pci Address Map Info - NULL, ///< 36 - Pci Interrupt Map Info - NULL, ///< 37 - Reserved Memory Range Node - NULL, ///< 38 - Memory Range Descriptor - NULL, ///< 39 - Continuous Performance Control Info - NULL, ///< 40 - Pcc Subspace Type 0 Info - NULL, ///< 41 - Pcc Subspace Type 2 Info - NULL, ///< 42 - Pcc Subspace Type 2 Info - NULL, ///< 43 - Pcc Subspace Type 3 Info - NULL, ///< 44 - Pcc Subspace Type 4 Info - NULL, ///< 45 - Pcc Subspace Type 5 Info - NULL, ///< 46 - Embedded Trace Extension/Module Info - NULL ///< 47 - P-State Dependency (PSD) Info + NULL, ///< 7 - Generic Timer Info + NULL, ///< 8 - Platform GT Block Info + NULL, ///< 9 - Generic Timer Block Frame Info + NULL, ///< 10 - Platform Generic Watchdog + NULL, ///< 11 - PCI Configuration Space Info + NULL, ///< 12 - Hypervisor Vendor Id + NULL, ///< 13 - Fixed feature flags for FADT + TokenFixerItsGroup, ///< 14 - ITS Group + TokenFixerNamedComponentNode, ///< 15 - Named Component + TokenFixerRootComplexNode, ///< 16 - Root Complex + TokenFixerNotImplemented, ///< 17 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 18 - SMMUv3 + TokenFixerNotImplemented, ///< 19 - PMCG + NULL, ///< 20 - GIC ITS Identifier Array + NULL, ///< 21 - ID Mapping Array + NULL, ///< 22 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 23 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 24 - Cache Info + NULL, ///< 25 - Memory Affinity Info + NULL, ///< 26 - Memory Affinity Info + NULL, ///< 27 - Device Handle Acpi + NULL, ///< 28 - Device Handle Pci + NULL, ///< 29 - Generic Initiator Affinity + NULL, ///< 30 - CMN-600 Info + NULL, ///< 31 - Lpi Info + NULL, ///< 32 - Pci Address Map Info + NULL, ///< 33 - Pci Interrupt Map Info + NULL, ///< 34 - Reserved Memory Range Node + NULL, ///< 35 - Memory Range Descriptor + NULL, ///< 36 - Continuous Performance Control Info + NULL, ///< 37 - Pcc Subspace Type 0 Info + NULL, ///< 38 - Pcc Subspace Type 2 Info + NULL, ///< 39 - Pcc Subspace Type 2 Info + NULL, ///< 40 - Pcc Subspace Type 3 Info + NULL, ///< 41 - Pcc Subspace Type 4 Info + NULL, ///< 42 - Pcc Subspace Type 5 Info + NULL, ///< 43 - Embedded Trace Extension/Module Info + NULL ///< 44 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c b/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c index f2594de2e92c..e8eef4048d4b 100644 --- a/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c +++ b/DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.c @@ -46,7 +46,7 @@ extern CHAR8 ssdtserialporttemplate_aml_code[]; /** Validate the Serial Port Information. - @param [in] SerialPortInfoTable Table of CM_ARM_SERIAL_PORT_INFO. + @param [in] SerialPortInfoTable Table of CM_ARCH_COMMON_SERIAL_PORT_INFO. @param [in] SerialPortCount Count of SerialPort in the table. @retval EFI_SUCCESS Success. @@ -55,12 +55,12 @@ extern CHAR8 ssdtserialporttemplate_aml_code[]; EFI_STATUS EFIAPI ValidateSerialPortInfo ( - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfoTable, - IN UINT32 SerialPortCount + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfoTable, + IN UINT32 SerialPortCount ) { - UINT32 Index; - CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo; + UINT32 Index; + CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo; if ((SerialPortInfoTable == NULL) || (SerialPortCount == 0)) @@ -163,9 +163,9 @@ STATIC EFI_STATUS EFIAPI FixupIds ( - IN AML_ROOT_NODE_HANDLE RootNodeHandle, - IN CONST UINT64 Uid, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo + IN AML_ROOT_NODE_HANDLE RootNodeHandle, + IN CONST UINT64 Uid, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo ) { EFI_STATUS Status; @@ -290,8 +290,8 @@ STATIC EFI_STATUS EFIAPI FixupCrs ( - IN AML_ROOT_NODE_HANDLE RootNodeHandle, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo + IN AML_ROOT_NODE_HANDLE RootNodeHandle, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo ) { EFI_STATUS Status; @@ -366,9 +366,9 @@ STATIC EFI_STATUS EFIAPI FixupName ( - IN AML_ROOT_NODE_HANDLE RootNodeHandle, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo, - IN CONST CHAR8 *Name + IN AML_ROOT_NODE_HANDLE RootNodeHandle, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN CONST CHAR8 *Name ) { EFI_STATUS Status; @@ -410,11 +410,11 @@ STATIC EFI_STATUS EFIAPI FixupSerialPortInfo ( - IN AML_ROOT_NODE_HANDLE RootNodeHandle, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo, - IN CONST CHAR8 *Name, - IN CONST UINT64 Uid, - OUT EFI_ACPI_DESCRIPTION_HEADER **Table + IN AML_ROOT_NODE_HANDLE RootNodeHandle, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN CONST CHAR8 *Name, + IN CONST UINT64 Uid, + OUT EFI_ACPI_DESCRIPTION_HEADER **Table ) { EFI_STATUS Status; @@ -480,11 +480,11 @@ FreeSsdtSerialPortTable ( EFI_STATUS EFIAPI BuildSsdtSerialPortTable ( - IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo, - IN CONST CM_ARM_SERIAL_PORT_INFO *SerialPortInfo, - IN CONST CHAR8 *Name, - IN CONST UINT64 Uid, - OUT EFI_ACPI_DESCRIPTION_HEADER **Table + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *AcpiTableInfo, + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN CONST CHAR8 *Name, + IN CONST UINT64 Uid, + OUT EFI_ACPI_DESCRIPTION_HEADER **Table ) { EFI_STATUS Status; diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 0d3e53312bb2..334d2a026596 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -122,10 +122,10 @@ STATIC CONST CM_OBJ_PARSER CmArmGicItsInfoParser[] = { { "ProximityDomain", 4, "0x%x", NULL } }; -/** A parser for EArmObjSerialConsolePortInfo, - EArmObjSerialDebugPortInfo and EArmObjSerialPortInfo. +/** A parser for EArchCommonObjConsolePortInfo, + EArchCommonObjSerialDebugPortInfo and EArchCommonObjSerialPortInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmSerialPortInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonSerialPortInfoParser[] = { { "BaseAddress", 8, "0x%llx", NULL }, { "Interrupt", 4, "0x%x", NULL }, { "BaudRate", 8, "0x%llx", NULL }, @@ -672,6 +672,9 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjReserved), CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo,CmArchCommonPowerManagementProfileInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -685,8 +688,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicRedistributorInfo, CmArmGicRedistInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGicItsInfo, CmArmGicItsInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjSerialConsolePortInfo, CmArmSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjSerialDebugPortInfo, CmArmSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGenericTimerInfo, CmArmGenericTimerInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), @@ -710,7 +711,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjSerialPortInfo, CmArmSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPciAddressMapInfo, CmArmPciAddressMapInfoParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c index 732b482eebe3..f17ad2e842e2 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c @@ -71,7 +71,7 @@ CONST COMPATIBILITY_INFO SerialSbsaCompatibleInfo = { @param [in] Fdt Pointer to a Flattened Device Tree (Fdt). @param [in] SerialPortNode Offset of a serial-port node. - @param [in] SerialPortInfo The CM_ARM_SERIAL_PORT_INFO to populate. + @param [in] SerialPortInfo The CM_ARCH_COMMON_SERIAL_PORT_INFO to populate. @retval EFI_SUCCESS The function completed successfully. @retval EFI_ABORTED An error occurred. @@ -82,9 +82,9 @@ STATIC EFI_STATUS EFIAPI SerialPortNodeParser ( - IN CONST VOID *Fdt, - IN INT32 SerialPortNode, - IN CM_ARM_SERIAL_PORT_INFO *SerialPortInfo + IN CONST VOID *Fdt, + IN INT32 SerialPortNode, + IN CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo ) { EFI_STATUS Status; @@ -313,7 +313,7 @@ GetSerialConsoleNode ( return EFI_SUCCESS; } -/** CM_ARM_SERIAL_PORT_INFO dispatcher function (for a generic serial-port). +/** CM_ARCH_COMMON_SERIAL_PORT_INFO dispatcher function (for a generic serial-port). @param [in] FdtParserHandle A handle to the parser instance. @param [in] GenericSerialInfo Pointer to a serial port info list. @@ -331,9 +331,9 @@ EFI_STATUS EFIAPI ArmSerialPortInfoDispatch ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, - IN CM_ARM_SERIAL_PORT_INFO *GenericSerialInfo, + IN CM_ARCH_COMMON_SERIAL_PORT_INFO *GenericSerialInfo, IN INT32 NodeCount, - IN EARM_OBJECT_ID SerialObjectId + IN EARCH_COMMON_OBJECT_ID SerialObjectId ) { EFI_STATUS Status; @@ -344,9 +344,9 @@ ArmSerialPortInfoDispatch ( return EFI_INVALID_PARAMETER; } - if ((SerialObjectId != EArmObjSerialPortInfo) && - (SerialObjectId != EArmObjSerialDebugPortInfo) && - (SerialObjectId != EArmObjSerialConsolePortInfo)) + if ((SerialObjectId != EArchCommonObjSerialPortInfo) && + (SerialObjectId != EArchCommonObjSerialDebugPortInfo) && + (SerialObjectId != EArchCommonObjConsolePortInfo)) { ASSERT (0); return EFI_INVALID_PARAMETER; @@ -354,10 +354,10 @@ ArmSerialPortInfoDispatch ( // Dispatch the Generic Serial ports Status = CreateCmObjDesc ( - CREATE_CM_ARM_OBJECT_ID (SerialObjectId), + CREATE_CM_ARCH_COMMON_OBJECT_ID (SerialObjectId), NodeCount, GenericSerialInfo, - sizeof (CM_ARM_SERIAL_PORT_INFO) * NodeCount, + sizeof (CM_ARCH_COMMON_SERIAL_PORT_INFO) * NodeCount, &NewCmObjDesc ); if (EFI_ERROR (Status)) { @@ -372,19 +372,19 @@ ArmSerialPortInfoDispatch ( return Status; } -/** CM_ARM_SERIAL_PORT_INFO parser function (for debug/console serial-port). +/** CM_ARCH_COMMON_SERIAL_PORT_INFO parser function (for debug/console serial-port). This parser expects FdtBranch to be the debug serial-port node. At most one CmObj is created. The following structure is populated: - typedef struct CmArmSerialPortInfo { + typedef struct EArchCommonSerialPortInfo { UINT64 BaseAddress; // {Populated} UINT32 Interrupt; // {Populated} UINT64 BaudRate; // {default} UINT32 Clock; // {Populated} UINT16 PortSubtype; // {Populated} UINT64 BaseAddressLength // {Populated} - } CM_ARM_SERIAL_PORT_INFO; + } CM_ARCH_COMMON_SERIAL_PORT_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. @@ -396,7 +396,8 @@ ArmSerialPortInfoDispatch ( @param [in] FdtParserHandle A handle to the parser instance. @param [in] FdtBranch When searching for DT node name, restrict the search to this Device Tree branch. - @param [in] SerialObjectId ArmNamespace Object ID for the serial port. + @param [in] SerialObjectId ArchCommon Namespace Object ID for the serial + port. @retval EFI_SUCCESS The function completed successfully. @retval EFI_ABORTED An error occurred. @@ -410,14 +411,14 @@ EFIAPI ArmSerialPortInfoParser ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, IN INT32 FdtBranch, - IN EARM_OBJECT_ID SerialObjectId + IN EARCH_COMMON_OBJECT_ID SerialObjectId ) { - EFI_STATUS Status; - CM_ARM_SERIAL_PORT_INFO SerialInfo; + EFI_STATUS Status; + CM_ARCH_COMMON_SERIAL_PORT_INFO SerialInfo; - if ((SerialObjectId != EArmObjSerialDebugPortInfo) && - (SerialObjectId != EArmObjSerialConsolePortInfo)) + if ((SerialObjectId != EArchCommonObjSerialDebugPortInfo) && + (SerialObjectId != EArchCommonObjConsolePortInfo)) { ASSERT (0); return EFI_INVALID_PARAMETER; @@ -447,11 +448,11 @@ ArmSerialPortInfoParser ( /** SerialPort dispatcher. - This disptacher populates the CM_ARM_SERIAL_PORT_INFO structure for + This disptacher populates the CM_ARCH_COMMON_SERIAL_PORT_INFO structure for the following CM_OBJ_ID: - - EArmObjSerialConsolePortInfo - - EArmObjSerialDebugPortInfo - - EArmObjSerialPortInfo + - EArchCommonObjConsolePortInfo + - EArchCommonObjSerialDebugPortInfo + - EArchCommonObjSerialPortInfo A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. @@ -477,16 +478,16 @@ SerialPortDispatcher ( IN INT32 FdtBranch ) { - EFI_STATUS Status; - INT32 SerialConsoleNode; - INT32 SerialDebugNode; - INT32 SerialNode; - UINT32 Index; - UINT32 SerialNodeCount; - UINT32 SerialNodesRemaining; - CM_ARM_SERIAL_PORT_INFO *GenericSerialInfo; - UINT32 GenericSerialIndex; - VOID *Fdt; + EFI_STATUS Status; + INT32 SerialConsoleNode; + INT32 SerialDebugNode; + INT32 SerialNode; + UINT32 Index; + UINT32 SerialNodeCount; + UINT32 SerialNodesRemaining; + CM_ARCH_COMMON_SERIAL_PORT_INFO *GenericSerialInfo; + UINT32 GenericSerialIndex; + VOID *Fdt; if (FdtParserHandle == NULL) { ASSERT (0); @@ -531,7 +532,7 @@ SerialPortDispatcher ( Status = ArmSerialPortInfoParser ( FdtParserHandle, SerialConsoleNode, - EArmObjSerialConsolePortInfo + EArchCommonObjConsolePortInfo ); if (EFI_ERROR (Status)) { ASSERT (0); @@ -550,7 +551,7 @@ SerialPortDispatcher ( SerialNodesRemaining--; GenericSerialInfo = AllocateZeroPool ( SerialNodesRemaining * - sizeof (CM_ARM_SERIAL_PORT_INFO) + sizeof (CM_ARCH_COMMON_SERIAL_PORT_INFO) ); if (GenericSerialInfo == NULL) { ASSERT (0); @@ -589,7 +590,7 @@ SerialPortDispatcher ( Status = ArmSerialPortInfoParser ( FdtParserHandle, SerialDebugNode, - EArmObjSerialDebugPortInfo + EArchCommonObjSerialDebugPortInfo ); if (EFI_ERROR (Status)) { ASSERT (0); @@ -620,7 +621,7 @@ SerialPortDispatcher ( FdtParserHandle, GenericSerialInfo, GenericSerialIndex, - EArmObjSerialPortInfo + EArchCommonObjSerialPortInfo ); } diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h index de08e57e6c57..037c409d450a 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h @@ -14,11 +14,11 @@ /** SerialPort dispatcher. - This disptacher populates the CM_ARM_SERIAL_PORT_INFO structure for + This disptacher populates the CM_ARCH_COMMON_SERIAL_PORT_INFO structure for the following CM_OBJ_ID: - - EArmObjSerialConsolePortInfo - - EArmObjSerialDebugPortInfo - - EArmObjSerialPortInfo + - EArchCommonObjConsolePortInfo + - EArchCommonObjSerialDebugPortInfo + - EArchCommonObjSerialPortInfo A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 3295bb29931a..90f03f00e7d3 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -447,47 +447,44 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 4 | GIC MSI Frame Info | | | 5 | GIC Redistributor Info | | | 6 | GIC ITS Info | | -| 7 | Serial Console Port Info | Move to Arch Common NS | -| 8 | Serial Debug Port Info | Move to Arch Common NS | -| 9 | Generic Timer Info | | -| 10 | Platform GT Block Info | | -| 11 | Generic Timer Block Frame Info | | -| 12 | Platform Generic Watchdog | | -| 13 | PCI Configuration Space Info | Move to Arch Common NS | -| 14 | Hypervisor Vendor Id | Move to Arch Common NS | -| 15 | Fixed feature flags for FADT | Move to Arch Common NS | -| 16 | ITS Group | | -| 17 | Named Component | | -| 18 | Root Complex | | -| 19 | SMMUv1 or SMMUv2 | | -| 20 | SMMUv3 | | -| 21 | PMCG | | -| 22 | GIC ITS Identifier Array | | -| 23 | ID Mapping Array | | -| 24 | SMMU Interrupt Array | | -| 25 | Processor Hierarchy Info | Move to Arch Common NS | -| 26 | Cache Info | Move to Arch Common NS | -| 27 | CM Object Reference | Move to Arch Common NS | -| 28 | Memory Affinity Info | Move to Arch Common NS | -| 29 | Device Handle Acpi | Move to Arch Common NS | -| 30 | Device Handle PCI | Move to Arch Common NS | -| 31 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 32 | Serial Port Info | Move to Arch Common NS | -| 33 | CMN 600 Info | | -| 34 | Low Power Idle State Info | Move to Arch Common NS | -| 35 | PCI Address Map Info | Move to Arch Common NS | -| 36 | PCI Interrupt Map Info | Move to Arch Common NS | -| 37 | Reserved Memory Range Node | | -| 38 | Memory Range Descriptor | | -| 39 | Continuous Performance Control Info | Move to Arch Common NS | -| 40 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 41 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 42 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 43 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 44 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 45 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 46 | Embedded Trace Extension/Module Info | | -| 47 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 7 | Generic Timer Info | | +| 8 | Platform GT Block Info | | +| 9 | Generic Timer Block Frame Info | | +| 10 | Platform Generic Watchdog | | +| 11 | PCI Configuration Space Info | Move to Arch Common NS | +| 12 | Hypervisor Vendor Id | Move to Arch Common NS | +| 13 | Fixed feature flags for FADT | Move to Arch Common NS | +| 14 | ITS Group | | +| 15 | Named Component | | +| 16 | Root Complex | | +| 17 | SMMUv1 or SMMUv2 | | +| 18 | SMMUv3 | | +| 19 | PMCG | | +| 20 | GIC ITS Identifier Array | | +| 21 | ID Mapping Array | | +| 22 | SMMU Interrupt Array | | +| 23 | Processor Hierarchy Info | Move to Arch Common NS | +| 24 | Cache Info | Move to Arch Common NS | +| 25 | CM Object Reference | Move to Arch Common NS | +| 26 | Memory Affinity Info | Move to Arch Common NS | +| 27 | Device Handle Acpi | Move to Arch Common NS | +| 28 | Device Handle PCI | Move to Arch Common NS | +| 29 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 30 | CMN 600 Info | | +| 31 | Low Power Idle State Info | Move to Arch Common NS | +| 32 | PCI Address Map Info | Move to Arch Common NS | +| 33 | PCI Interrupt Map Info | Move to Arch Common NS | +| 34 | Reserved Memory Range Node | | +| 35 | Memory Range Descriptor | | +| 36 | Continuous Performance Control Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 38 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 39 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 40 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 41 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 42 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 43 | Embedded Trace Extension/Module Info | | +| 44 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +493,7 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | ---: | :-------------------------- | :--- | | 0 | Reserved | | | 1 | Power Management Profile Info | | +| 2 | Serial Port Info | | +| 3 | Serial Console Port Info | | +| 4 | Serial Debug Port Info | | | `*` | All other values are reserved. | | From de6e8da30e207e7914982c08d4f0234f10b328fd Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 10:49:04 +0000 Subject: [PATCH 16/56] DynamicTablesPkg: Move Hypervisor Vendor Id to Arch Common Move Hypervisor Vendor Id info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - FADT Generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 11 +++ .../Include/ArmNameSpaceObjects.h | 75 ++++++++----------- .../Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c | 16 ++-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 61 ++++++++------- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 66 ++++++++-------- 6 files changed, 117 insertions(+), 118 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 4eabb4d38b40..401a24b6a5cd 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -25,6 +25,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjSerialPortInfo, ///< 2 - Generic Serial Port Info EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info + EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -75,6 +76,16 @@ typedef struct EArchCommonSerialPortInfo { UINT8 AccessSize; } CM_ARCH_COMMON_SERIAL_PORT_INFO; +/** A structure that describes the + Hypervisor Vendor ID information for the Platform. + + ID: EArchCommonObjHypervisorVendorIdentity +*/ +typedef struct CmArchCommonHypervisorVendorIdentity { + /// The hypervisor Vendor ID + UINT64 HypervisorVendorId; +} CM_ARCH_COMMON_HYPERVISOR_VENDOR_ID; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 4878eb60e3cb..48e65a3cc0a5 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -40,39 +40,38 @@ typedef enum ArmObjectID { EArmObjGTBlockTimerFrameInfo, ///< 9 - Generic Timer Block Frame Info EArmObjPlatformGenericWatchdogInfo, ///< 10 - Platform Generic Watchdog EArmObjPciConfigSpaceInfo, ///< 11 - PCI Configuration Space Info - EArmObjHypervisorVendorIdentity, ///< 12 - Hypervisor Vendor Id - EArmObjFixedFeatureFlags, ///< 13 - Fixed feature flags for FADT - EArmObjItsGroup, ///< 14 - ITS Group - EArmObjNamedComponent, ///< 15 - Named Component - EArmObjRootComplex, ///< 16 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 17 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 18 - SMMUv3 - EArmObjPmcg, ///< 19 - PMCG - EArmObjGicItsIdentifierArray, ///< 20 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 21 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 22 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 23 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 24 - Cache Info - EArmObjCmRef, ///< 25 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 26 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 27 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 28 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 29 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 30 - CMN-600 Info - EArmObjLpiInfo, ///< 31 - Lpi Info - EArmObjPciAddressMapInfo, ///< 32 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 33 - Pci Interrupt Map Info - EArmObjRmr, ///< 34 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 35 - Memory Range Descriptor - EArmObjCpcInfo, ///< 36 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 37 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 38 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 39 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 40 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 41 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 42 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 43 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 44 - P-State Dependency (PSD) Info + EArmObjFixedFeatureFlags, ///< 12 - Fixed feature flags for FADT + EArmObjItsGroup, ///< 13 - ITS Group + EArmObjNamedComponent, ///< 14 - Named Component + EArmObjRootComplex, ///< 15 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 16 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 17 - SMMUv3 + EArmObjPmcg, ///< 18 - PMCG + EArmObjGicItsIdentifierArray, ///< 19 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 20 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 21 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 22 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 23 - Cache Info + EArmObjCmRef, ///< 24 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 25 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 26 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 27 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 28 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 29 - CMN-600 Info + EArmObjLpiInfo, ///< 30 - Lpi Info + EArmObjPciAddressMapInfo, ///< 31 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 32 - Pci Interrupt Map Info + EArmObjRmr, ///< 33 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 34 - Memory Range Descriptor + EArmObjCpcInfo, ///< 35 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 36 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 37 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 38 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 39 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 40 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 41 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 42 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 43 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -438,16 +437,6 @@ typedef struct CmArmPciConfigSpaceInfo { CM_OBJECT_TOKEN InterruptMapToken; } CM_ARM_PCI_CONFIG_SPACE_INFO; -/** A structure that describes the - Hypervisor Vendor ID information for the Platform. - - ID: EArmObjHypervisorVendorIdentity -*/ -typedef struct CmArmHypervisorVendorId { - /// The hypervisor Vendor ID - UINT64 HypervisorVendorId; -} CM_ARM_HYPERVISOR_VENDOR_ID; - /** A structure that describes the Fixed feature flags for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c index ea8c821d1155..868a974fed28 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c @@ -27,7 +27,7 @@ this Generator: - EArchCommonObjPowerManagementProfileInfo - EArmObjBootArchInfo - - EArmObjHypervisorVendorIdentity (OPTIONAL) + - EArchCommonObjHypervisorVendorIdentity (OPTIONAL) */ /** This macro defines the FADT flag options for ARM Platforms. @@ -220,9 +220,9 @@ GET_OBJECT_LIST ( Vendor ID from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjHypervisorVendorIdentity, - CM_ARM_HYPERVISOR_VENDOR_ID + EObjNameSpaceArchCommon, + EArchCommonObjHypervisorVendorIdentity, + CM_ARCH_COMMON_HYPERVISOR_VENDOR_ID ); /** This macro expands to a function that retrieves the Fixed @@ -358,13 +358,13 @@ FadtAddHypervisorVendorId ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol ) { - EFI_STATUS Status; - CM_ARM_HYPERVISOR_VENDOR_ID *HypervisorVendorInfo; + EFI_STATUS Status; + CM_ARCH_COMMON_HYPERVISOR_VENDOR_ID *HypervisorVendorInfo; ASSERT (CfgMgrProtocol != NULL); // Get the Hypervisor Vendor ID from the Platform Configuration Manager - Status = GetEArmObjHypervisorVendorIdentity ( + Status = GetEArchCommonObjHypervisorVendorIdentity ( CfgMgrProtocol, CM_NULL_TOKEN, &HypervisorVendorInfo, @@ -391,7 +391,7 @@ FadtAddHypervisorVendorId ( DEBUG (( DEBUG_INFO, - "FADT: EArmObjHypervisorVendorIdentity = 0x%lx\n", + "FADT: EArchCommonObjHypervisorVendorIdentity = 0x%lx\n", HypervisorVendorInfo->HypervisorVendorId )); diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 412bf41647ae..34ba9f26733f 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -155,39 +155,38 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 9 - Generic Timer Block Frame Info NULL, ///< 10 - Platform Generic Watchdog NULL, ///< 11 - PCI Configuration Space Info - NULL, ///< 12 - Hypervisor Vendor Id - NULL, ///< 13 - Fixed feature flags for FADT - TokenFixerItsGroup, ///< 14 - ITS Group - TokenFixerNamedComponentNode, ///< 15 - Named Component - TokenFixerRootComplexNode, ///< 16 - Root Complex - TokenFixerNotImplemented, ///< 17 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 18 - SMMUv3 - TokenFixerNotImplemented, ///< 19 - PMCG - NULL, ///< 20 - GIC ITS Identifier Array - NULL, ///< 21 - ID Mapping Array - NULL, ///< 22 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 23 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 24 - Cache Info + NULL, ///< 12 - Fixed feature flags for FADT + TokenFixerItsGroup, ///< 13 - ITS Group + TokenFixerNamedComponentNode, ///< 14 - Named Component + TokenFixerRootComplexNode, ///< 15 - Root Complex + TokenFixerNotImplemented, ///< 16 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 17 - SMMUv3 + TokenFixerNotImplemented, ///< 18 - PMCG + NULL, ///< 19 - GIC ITS Identifier Array + NULL, ///< 20 - ID Mapping Array + NULL, ///< 21 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 22 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 23 - Cache Info + NULL, ///< 24 - Memory Affinity Info NULL, ///< 25 - Memory Affinity Info - NULL, ///< 26 - Memory Affinity Info - NULL, ///< 27 - Device Handle Acpi - NULL, ///< 28 - Device Handle Pci - NULL, ///< 29 - Generic Initiator Affinity - NULL, ///< 30 - CMN-600 Info - NULL, ///< 31 - Lpi Info - NULL, ///< 32 - Pci Address Map Info - NULL, ///< 33 - Pci Interrupt Map Info - NULL, ///< 34 - Reserved Memory Range Node - NULL, ///< 35 - Memory Range Descriptor - NULL, ///< 36 - Continuous Performance Control Info - NULL, ///< 37 - Pcc Subspace Type 0 Info + NULL, ///< 26 - Device Handle Acpi + NULL, ///< 27 - Device Handle Pci + NULL, ///< 28 - Generic Initiator Affinity + NULL, ///< 29 - CMN-600 Info + NULL, ///< 30 - Lpi Info + NULL, ///< 31 - Pci Address Map Info + NULL, ///< 32 - Pci Interrupt Map Info + NULL, ///< 33 - Reserved Memory Range Node + NULL, ///< 34 - Memory Range Descriptor + NULL, ///< 35 - Continuous Performance Control Info + NULL, ///< 36 - Pcc Subspace Type 0 Info + NULL, ///< 37 - Pcc Subspace Type 2 Info NULL, ///< 38 - Pcc Subspace Type 2 Info - NULL, ///< 39 - Pcc Subspace Type 2 Info - NULL, ///< 40 - Pcc Subspace Type 3 Info - NULL, ///< 41 - Pcc Subspace Type 4 Info - NULL, ///< 42 - Pcc Subspace Type 5 Info - NULL, ///< 43 - Embedded Trace Extension/Module Info - NULL ///< 44 - P-State Dependency (PSD) Info + NULL, ///< 39 - Pcc Subspace Type 3 Info + NULL, ///< 40 - Pcc Subspace Type 4 Info + NULL, ///< 41 - Pcc Subspace Type 5 Info + NULL, ///< 42 - Embedded Trace Extension/Module Info + NULL ///< 43 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 334d2a026596..1b3532f94088 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -193,9 +193,9 @@ STATIC CONST CM_OBJ_PARSER CmArmPciConfigSpaceInfoParser[] = { { "InterruptMapToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, }; -/** A parser for EArmObjHypervisorVendorIdentity. +/** A parser for EArchCommonObjHypervisorVendorIdentity. */ -STATIC CONST CM_OBJ_PARSER CmArmHypervisorVendorIdParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonHypervisorVendorIdentityParser[] = { { "HypervisorVendorId", 8, "0x%llx", NULL } }; @@ -675,6 +675,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -693,7 +694,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPciConfigSpaceInfo, CmArmPciConfigSpaceInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjHypervisorVendorIdentity, CmArmHypervisorVendorIdParser), CM_PARSER_ADD_OBJECT (EArmObjFixedFeatureFlags, CmArmFixedFeatureFlagsParser), CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 90f03f00e7d3..79ccd86e8558 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -452,39 +452,38 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 9 | Generic Timer Block Frame Info | | | 10 | Platform Generic Watchdog | | | 11 | PCI Configuration Space Info | Move to Arch Common NS | -| 12 | Hypervisor Vendor Id | Move to Arch Common NS | -| 13 | Fixed feature flags for FADT | Move to Arch Common NS | -| 14 | ITS Group | | -| 15 | Named Component | | -| 16 | Root Complex | | -| 17 | SMMUv1 or SMMUv2 | | -| 18 | SMMUv3 | | -| 19 | PMCG | | -| 20 | GIC ITS Identifier Array | | -| 21 | ID Mapping Array | | -| 22 | SMMU Interrupt Array | | -| 23 | Processor Hierarchy Info | Move to Arch Common NS | -| 24 | Cache Info | Move to Arch Common NS | -| 25 | CM Object Reference | Move to Arch Common NS | -| 26 | Memory Affinity Info | Move to Arch Common NS | -| 27 | Device Handle Acpi | Move to Arch Common NS | -| 28 | Device Handle PCI | Move to Arch Common NS | -| 29 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 30 | CMN 600 Info | | -| 31 | Low Power Idle State Info | Move to Arch Common NS | -| 32 | PCI Address Map Info | Move to Arch Common NS | -| 33 | PCI Interrupt Map Info | Move to Arch Common NS | -| 34 | Reserved Memory Range Node | | -| 35 | Memory Range Descriptor | | -| 36 | Continuous Performance Control Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 38 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 39 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 40 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 41 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 42 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 43 | Embedded Trace Extension/Module Info | | -| 44 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 12 | Fixed feature flags for FADT | Move to Arch Common NS | +| 13 | ITS Group | | +| 14 | Named Component | | +| 15 | Root Complex | | +| 16 | SMMUv1 or SMMUv2 | | +| 17 | SMMUv3 | | +| 18 | PMCG | | +| 19 | GIC ITS Identifier Array | | +| 20 | ID Mapping Array | | +| 21 | SMMU Interrupt Array | | +| 22 | Processor Hierarchy Info | Move to Arch Common NS | +| 23 | Cache Info | Move to Arch Common NS | +| 24 | CM Object Reference | Move to Arch Common NS | +| 25 | Memory Affinity Info | Move to Arch Common NS | +| 26 | Device Handle Acpi | Move to Arch Common NS | +| 27 | Device Handle PCI | Move to Arch Common NS | +| 28 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 29 | CMN 600 Info | | +| 30 | Low Power Idle State Info | Move to Arch Common NS | +| 31 | PCI Address Map Info | Move to Arch Common NS | +| 32 | PCI Interrupt Map Info | Move to Arch Common NS | +| 33 | Reserved Memory Range Node | | +| 34 | Memory Range Descriptor | | +| 35 | Continuous Performance Control Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 38 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 39 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 40 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 41 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 42 | Embedded Trace Extension/Module Info | | +| 43 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 2 | Serial Port Info | | | 3 | Serial Console Port Info | | | 4 | Serial Debug Port Info | | +| 5 | Hypervisor Vendor Id | | | `*` | All other values are reserved. | | From d27aef0a68c1d04cf5f6a169db743bd2ea7e28cc Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 11:00:12 +0000 Subject: [PATCH 17/56] DynamicTablesPkg: Move FADT Fixed Features Flags to Arch Common Move FADT Fixed Features Flags object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - FADT Generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 11 +++ .../Include/ArmNameSpaceObjects.h | 73 ++++++++----------- .../Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c | 14 ++-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 59 ++++++++------- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 64 ++++++++-------- 6 files changed, 113 insertions(+), 114 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 401a24b6a5cd..1030488f4561 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -26,6 +26,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id + EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -86,6 +87,16 @@ typedef struct CmArchCommonHypervisorVendorIdentity { UINT64 HypervisorVendorId; } CM_ARCH_COMMON_HYPERVISOR_VENDOR_ID; +/** A structure that describes the + Fixed feature flags for the Platform. + + ID: EArchCommonObjFixedFeatureFlags +*/ +typedef struct CmArchCommonFixedFeatureFlags { + /// The Fixed feature flags + UINT32 Flags; +} CM_ARCH_COMMON_FIXED_FEATURE_FLAGS; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 48e65a3cc0a5..66709c41fd69 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -40,38 +40,37 @@ typedef enum ArmObjectID { EArmObjGTBlockTimerFrameInfo, ///< 9 - Generic Timer Block Frame Info EArmObjPlatformGenericWatchdogInfo, ///< 10 - Platform Generic Watchdog EArmObjPciConfigSpaceInfo, ///< 11 - PCI Configuration Space Info - EArmObjFixedFeatureFlags, ///< 12 - Fixed feature flags for FADT - EArmObjItsGroup, ///< 13 - ITS Group - EArmObjNamedComponent, ///< 14 - Named Component - EArmObjRootComplex, ///< 15 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 16 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 17 - SMMUv3 - EArmObjPmcg, ///< 18 - PMCG - EArmObjGicItsIdentifierArray, ///< 19 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 20 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 21 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 22 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 23 - Cache Info - EArmObjCmRef, ///< 24 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 25 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 26 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 27 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 28 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 29 - CMN-600 Info - EArmObjLpiInfo, ///< 30 - Lpi Info - EArmObjPciAddressMapInfo, ///< 31 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 32 - Pci Interrupt Map Info - EArmObjRmr, ///< 33 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 34 - Memory Range Descriptor - EArmObjCpcInfo, ///< 35 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 36 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 37 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 38 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 39 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 40 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 41 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 42 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 43 - P-State Dependency (PSD) Info + EArmObjItsGroup, ///< 12 - ITS Group + EArmObjNamedComponent, ///< 13 - Named Component + EArmObjRootComplex, ///< 14 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 15 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 16 - SMMUv3 + EArmObjPmcg, ///< 17 - PMCG + EArmObjGicItsIdentifierArray, ///< 18 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 19 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 20 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 21 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 22 - Cache Info + EArmObjCmRef, ///< 23 - CM Object Reference + EArmObjMemoryAffinityInfo, ///< 24 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 25 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 26 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 27 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 28 - CMN-600 Info + EArmObjLpiInfo, ///< 29 - Lpi Info + EArmObjPciAddressMapInfo, ///< 30 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 31 - Pci Interrupt Map Info + EArmObjRmr, ///< 32 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 33 - Memory Range Descriptor + EArmObjCpcInfo, ///< 34 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 35 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 36 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 37 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 38 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 39 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 40 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 41 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 42 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -437,16 +436,6 @@ typedef struct CmArmPciConfigSpaceInfo { CM_OBJECT_TOKEN InterruptMapToken; } CM_ARM_PCI_CONFIG_SPACE_INFO; -/** A structure that describes the - Fixed feature flags for the Platform. - - ID: EArmObjFixedFeatureFlags -*/ -typedef struct CmArmFixedFeatureFlags { - /// The Fixed feature flags - UINT32 Flags; -} CM_ARM_FIXED_FEATURE_FLAGS; - /** A structure that describes the ITS Group node for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c index 868a974fed28..470f1acfd11f 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c @@ -229,9 +229,9 @@ GET_OBJECT_LIST ( feature flags for the platform from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjFixedFeatureFlags, - CM_ARM_FIXED_FEATURE_FLAGS + EObjNameSpaceArchCommon, + EArchCommonObjFixedFeatureFlags, + CM_ARCH_COMMON_FIXED_FEATURE_FLAGS ); /** Update the Power Management Profile information in the FADT Table. @@ -420,13 +420,13 @@ FadtAddFixedFeatureFlags ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol ) { - EFI_STATUS Status; - CM_ARM_FIXED_FEATURE_FLAGS *FixedFeatureFlags; + EFI_STATUS Status; + CM_ARCH_COMMON_FIXED_FEATURE_FLAGS *FixedFeatureFlags; ASSERT (CfgMgrProtocol != NULL); // Get the Fixed feature flags from the Platform Configuration Manager - Status = GetEArmObjFixedFeatureFlags ( + Status = GetEArchCommonObjFixedFeatureFlags ( CfgMgrProtocol, CM_NULL_TOKEN, &FixedFeatureFlags, @@ -453,7 +453,7 @@ FadtAddFixedFeatureFlags ( DEBUG (( DEBUG_INFO, - "FADT: EArmObjFixedFeatureFlags = 0x%x\n", + "FADT: EArchCommonObjFixedFeatureFlags = 0x%x\n", FixedFeatureFlags->Flags )); diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 34ba9f26733f..aef818e77f0c 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -155,38 +155,37 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 9 - Generic Timer Block Frame Info NULL, ///< 10 - Platform Generic Watchdog NULL, ///< 11 - PCI Configuration Space Info - NULL, ///< 12 - Fixed feature flags for FADT - TokenFixerItsGroup, ///< 13 - ITS Group - TokenFixerNamedComponentNode, ///< 14 - Named Component - TokenFixerRootComplexNode, ///< 15 - Root Complex - TokenFixerNotImplemented, ///< 16 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 17 - SMMUv3 - TokenFixerNotImplemented, ///< 18 - PMCG - NULL, ///< 19 - GIC ITS Identifier Array - NULL, ///< 20 - ID Mapping Array - NULL, ///< 21 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 22 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 23 - Cache Info + TokenFixerItsGroup, ///< 12 - ITS Group + TokenFixerNamedComponentNode, ///< 13 - Named Component + TokenFixerRootComplexNode, ///< 14 - Root Complex + TokenFixerNotImplemented, ///< 15 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 16 - SMMUv3 + TokenFixerNotImplemented, ///< 17 - PMCG + NULL, ///< 18 - GIC ITS Identifier Array + NULL, ///< 19 - ID Mapping Array + NULL, ///< 20 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 21 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 22 - Cache Info + NULL, ///< 23 - CM Object Reference NULL, ///< 24 - Memory Affinity Info - NULL, ///< 25 - Memory Affinity Info - NULL, ///< 26 - Device Handle Acpi - NULL, ///< 27 - Device Handle Pci - NULL, ///< 28 - Generic Initiator Affinity - NULL, ///< 29 - CMN-600 Info - NULL, ///< 30 - Lpi Info - NULL, ///< 31 - Pci Address Map Info - NULL, ///< 32 - Pci Interrupt Map Info - NULL, ///< 33 - Reserved Memory Range Node - NULL, ///< 34 - Memory Range Descriptor - NULL, ///< 35 - Continuous Performance Control Info - NULL, ///< 36 - Pcc Subspace Type 0 Info + NULL, ///< 25 - Device Handle Acpi + NULL, ///< 26 - Device Handle Pci + NULL, ///< 27 - Generic Initiator Affinity + NULL, ///< 28 - CMN-600 Info + NULL, ///< 29 - Lpi Info + NULL, ///< 30 - Pci Address Map Info + NULL, ///< 31 - Pci Interrupt Map Info + NULL, ///< 32 - Reserved Memory Range Node + NULL, ///< 33 - Memory Range Descriptor + NULL, ///< 34 - Continuous Performance Control Info + NULL, ///< 35 - Pcc Subspace Type 0 Info + NULL, ///< 36 - Pcc Subspace Type 2 Info NULL, ///< 37 - Pcc Subspace Type 2 Info - NULL, ///< 38 - Pcc Subspace Type 2 Info - NULL, ///< 39 - Pcc Subspace Type 3 Info - NULL, ///< 40 - Pcc Subspace Type 4 Info - NULL, ///< 41 - Pcc Subspace Type 5 Info - NULL, ///< 42 - Embedded Trace Extension/Module Info - NULL ///< 43 - P-State Dependency (PSD) Info + NULL, ///< 38 - Pcc Subspace Type 3 Info + NULL, ///< 39 - Pcc Subspace Type 4 Info + NULL, ///< 40 - Pcc Subspace Type 5 Info + NULL, ///< 41 - Embedded Trace Extension/Module Info + NULL ///< 42 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 1b3532f94088..3205cf87c8bf 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -199,9 +199,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonHypervisorVendorIdentityParser[] = { { "HypervisorVendorId", 8, "0x%llx", NULL } }; -/** A parser for EArmObjFixedFeatureFlags. +/** A parser for EArchCommonObjFixedFeatureFlags. */ -STATIC CONST CM_OBJ_PARSER CmArmFixedFeatureFlagsParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonFixedFeatureFlagsParser[] = { { "Flags", 4, "0x%x", NULL } }; @@ -676,6 +676,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -694,7 +695,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPciConfigSpaceInfo, CmArmPciConfigSpaceInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjFixedFeatureFlags, CmArmFixedFeatureFlagsParser), CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 79ccd86e8558..5b9dda3e63d9 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -452,38 +452,37 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 9 | Generic Timer Block Frame Info | | | 10 | Platform Generic Watchdog | | | 11 | PCI Configuration Space Info | Move to Arch Common NS | -| 12 | Fixed feature flags for FADT | Move to Arch Common NS | -| 13 | ITS Group | | -| 14 | Named Component | | -| 15 | Root Complex | | -| 16 | SMMUv1 or SMMUv2 | | -| 17 | SMMUv3 | | -| 18 | PMCG | | -| 19 | GIC ITS Identifier Array | | -| 20 | ID Mapping Array | | -| 21 | SMMU Interrupt Array | | -| 22 | Processor Hierarchy Info | Move to Arch Common NS | -| 23 | Cache Info | Move to Arch Common NS | -| 24 | CM Object Reference | Move to Arch Common NS | -| 25 | Memory Affinity Info | Move to Arch Common NS | -| 26 | Device Handle Acpi | Move to Arch Common NS | -| 27 | Device Handle PCI | Move to Arch Common NS | -| 28 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 29 | CMN 600 Info | | -| 30 | Low Power Idle State Info | Move to Arch Common NS | -| 31 | PCI Address Map Info | Move to Arch Common NS | -| 32 | PCI Interrupt Map Info | Move to Arch Common NS | -| 33 | Reserved Memory Range Node | | -| 34 | Memory Range Descriptor | | -| 35 | Continuous Performance Control Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 38 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 39 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 40 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 41 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 42 | Embedded Trace Extension/Module Info | | -| 43 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 12 | ITS Group | | +| 13 | Named Component | | +| 14 | Root Complex | | +| 15 | SMMUv1 or SMMUv2 | | +| 16 | SMMUv3 | | +| 17 | PMCG | | +| 18 | GIC ITS Identifier Array | | +| 19 | ID Mapping Array | | +| 20 | SMMU Interrupt Array | | +| 21 | Processor Hierarchy Info | Move to Arch Common NS | +| 22 | Cache Info | Move to Arch Common NS | +| 23 | CM Object Reference | Move to Arch Common NS | +| 24 | Memory Affinity Info | Move to Arch Common NS | +| 25 | Device Handle Acpi | Move to Arch Common NS | +| 26 | Device Handle PCI | Move to Arch Common NS | +| 27 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 28 | CMN 600 Info | | +| 29 | Low Power Idle State Info | Move to Arch Common NS | +| 30 | PCI Address Map Info | Move to Arch Common NS | +| 31 | PCI Interrupt Map Info | Move to Arch Common NS | +| 32 | Reserved Memory Range Node | | +| 33 | Memory Range Descriptor | | +| 34 | Continuous Performance Control Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 38 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 39 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 40 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 41 | Embedded Trace Extension/Module Info | | +| 42 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 3 | Serial Console Port Info | | | 4 | Serial Debug Port Info | | | 5 | Hypervisor Vendor Id | | +| 6 | Fixed feature flags for FADT | | | `*` | All other values are reserved. | | From 18d1b41fa1eb3a34892c1848c5242ffea492b100 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Wed, 6 Mar 2024 16:28:01 +0000 Subject: [PATCH 18/56] DynamicTablesPkg: Move Cm Reference object to Arch Common Move Cm Reference object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PPTT generator - SSDT CPU topology generator - SSDT PCIe generator - ConfigurationManagerObjectParser - Dynamic Plat Repo, the Token Mapper and the TokenFixer map. - FdtHwInfoParser library Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 17 ++++++ .../Include/ArmNameSpaceObjects.h | 61 +++++++------------ .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c | 20 +++--- .../SsdtCpuTopologyGenerator.c | 14 ++--- .../SsdtCpuTopologyGenerator.h | 10 +-- .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 20 +++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 37 ++++++----- .../DynamicPlatRepoLib/DynamicPlatRepo.c | 28 ++++----- .../Common/DynamicPlatRepoLib/TokenMapper.c | 9 +-- .../ConfigurationManagerObjectParser.c | 6 +- .../FdtHwInfoParserLib/CmObjectDescUtility.c | 10 +-- .../FdtHwInfoParserLib/CmObjectDescUtility.h | 6 +- DynamicTablesPkg/Readme.md | 40 ++++++------ 13 files changed, 139 insertions(+), 139 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 1030488f4561..632816da09de 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -27,6 +27,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT + EArchCommonObjCmRef, ///< 7 - CM Object Reference EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -97,6 +98,22 @@ typedef struct CmArchCommonFixedFeatureFlags { UINT32 Flags; } CM_ARCH_COMMON_FIXED_FEATURE_FLAGS; +/** A structure that describes a reference to another Configuration Manager + object. + + This is useful for creating an array of reference tokens. The framework + can then query the configuration manager for these arrays using the + object ID EArchCommonObjCmRef. + + This can be used is to represent one-to-many relationships between objects. + + ID: EArchCommonObjCmRef +*/ +typedef struct CmArchCommonObjRef { + /// Token of the CM object being referenced + CM_OBJECT_TOKEN ReferenceToken; +} CM_ARCH_COMMON_OBJ_REF; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 66709c41fd69..cfcb2c7d2758 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,26 +51,25 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 20 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 21 - Processor Hierarchy Info EArmObjCacheInfo, ///< 22 - Cache Info - EArmObjCmRef, ///< 23 - CM Object Reference - EArmObjMemoryAffinityInfo, ///< 24 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 25 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 26 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 27 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 28 - CMN-600 Info - EArmObjLpiInfo, ///< 29 - Lpi Info - EArmObjPciAddressMapInfo, ///< 30 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 31 - Pci Interrupt Map Info - EArmObjRmr, ///< 32 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 33 - Memory Range Descriptor - EArmObjCpcInfo, ///< 34 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 35 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 36 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 37 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 38 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 39 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 40 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 41 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 42 - P-State Dependency (PSD) Info + EArmObjMemoryAffinityInfo, ///< 23 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 24 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 25 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 26 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 27 - CMN-600 Info + EArmObjLpiInfo, ///< 28 - Lpi Info + EArmObjPciAddressMapInfo, ///< 29 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 30 - Pci Interrupt Map Info + EArmObjRmr, ///< 31 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 32 - Memory Range Descriptor + EArmObjCpcInfo, ///< 33 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 34 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 35 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 36 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 37 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 38 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 39 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 40 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 41 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -428,11 +427,11 @@ typedef struct CmArmPciConfigSpaceInfo { UINT8 EndBusNumber; /// Optional field: Reference Token for address mapping. - /// Token identifying a CM_ARM_OBJ_REF structure. + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. CM_OBJECT_TOKEN AddressMapToken; /// Optional field: Reference Token for interrupt mapping. - /// Token identifying a CM_ARM_OBJ_REF structure. + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. CM_OBJECT_TOKEN InterruptMapToken; } CM_ARM_PCI_CONFIG_SPACE_INFO; @@ -721,7 +720,7 @@ typedef struct CmArmProcHierarchyInfo { /// this field to CM_NULL_TOKEN. CM_OBJECT_TOKEN PrivateResourcesArrayToken; /// Optional field: Reference Token for the Lpi state of this processor. - /// Token identifying a CM_ARM_OBJ_REF structure, itself referencing + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure, itself referencing /// CM_ARM_LPI_INFO objects. CM_OBJECT_TOKEN LpiToken; /// Set to TRUE if UID should override index for name and _UID @@ -767,22 +766,6 @@ typedef struct CmArmCacheInfo { UINT32 CacheId; } CM_ARM_CACHE_INFO; -/** A structure that describes a reference to another Configuration Manager - object. - - This is useful for creating an array of reference tokens. The framework - can then query the configuration manager for these arrays using the - object ID EArmObjCmRef. - - This can be used is to represent one-to-many relationships between objects. - - ID: EArmObjCmRef -*/ -typedef struct CmArmObjRef { - /// Token of the CM object being referenced - CM_OBJECT_TOKEN ReferenceToken; -} CM_ARM_OBJ_REF; - /** A structure that describes the Memory Affinity Structure (Type 1) in SRAT ID: EArmObjMemoryAffinityInfo diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index 78fa63ff47e5..c237f7ff9386 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -34,7 +34,7 @@ The following Configuration Manager Object(s) are used by this Generator: - EArmObjProcHierarchyInfo (REQUIRED) - EArmObjCacheInfo - - EArmObjCmRef + - EArchCommonObjCmRef - EArmObjGicCInfo (REQUIRED) */ @@ -63,9 +63,9 @@ GET_OBJECT_LIST ( reference information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjCmRef, - CM_ARM_OBJ_REF + EObjNameSpaceArchCommon, + EArchCommonObjCmRef, + CM_ARCH_COMMON_OBJ_REF ); /** @@ -264,7 +264,7 @@ DetectCyclesInTopology ( Protocol Interface. @param [in] PrivResArray Pointer to the array of private resources. @param [in] PrivResCount Number of private resources. - @param [in] PrivResArrayToken Reference Token for the CM_ARM_OBJ_REF + @param [in] PrivResArrayToken Reference Token for the CM_ARCH_COMMON_OBJ_REF array describing node's private resources. @retval EFI_SUCCESS Array updated successfully. @@ -281,10 +281,10 @@ AddPrivateResources ( IN CONST CM_OBJECT_TOKEN PrivResArrayToken ) { - EFI_STATUS Status; - CM_ARM_OBJ_REF *CmObjRefs; - UINT32 CmObjRefCount; - PPTT_NODE_INDEXER *PpttNodeFound; + EFI_STATUS Status; + CM_ARCH_COMMON_OBJ_REF *CmObjRefs; + UINT32 CmObjRefCount; + PPTT_NODE_INDEXER *PpttNodeFound; ASSERT ( (Generator != NULL) && @@ -308,7 +308,7 @@ AddPrivateResources ( CmObjRefCount = 0; // Get the CM Object References - Status = GetEArmObjCmRef ( + Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PrivResArrayToken, &CmObjRefs, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index e3cbe18a4950..5240ff52d862 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -39,7 +39,7 @@ this Generator: - EArmObjGicCInfo - EArmObjProcHierarchyInfo (OPTIONAL) along with - - EArmObjCmRef (OPTIONAL) + - EArchCommonObjCmRef (OPTIONAL) - EArmObjLpiInfo (OPTIONAL) - GetEArmObjEtInfo (OPTIONAL) - EArmObjPsdInfo (OPTIONAL) @@ -69,9 +69,9 @@ GET_OBJECT_LIST ( reference information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjCmRef, - CM_ARM_OBJ_REF + EObjNameSpaceArchCommon, + EArchCommonObjCmRef, + CM_ARCH_COMMON_OBJ_REF ); /** @@ -120,7 +120,7 @@ GET_OBJECT_LIST ( structure of the platform. The TokenTable allows to have a mapping: Index <-> CM_OBJECT_TOKEN (to CM_ARM_LPI_INFO structures). - There will always be less sets of Lpi states (CM_ARM_OBJ_REF) + There will always be less sets of Lpi states (CM_ARCH_COMMON_OBJ_REF) than the number of cpus/clusters (CM_ARM_PROC_HIERARCHY_INFO). @param [in] Generator The SSDT Cpu Topology generator. @@ -697,7 +697,7 @@ GenerateLpiStates ( UINT32 LastIndex; AML_OBJECT_NODE_HANDLE LpiNode; - CM_ARM_OBJ_REF *LpiRefInfo; + CM_ARCH_COMMON_OBJ_REF *LpiRefInfo; UINT32 LpiRefInfoCount; UINT32 LpiRefIndex; CM_ARM_LPI_INFO *LpiInfo; @@ -727,7 +727,7 @@ GenerateLpiStates ( } // Fetch the LPI objects referenced by the token. - Status = GetEArmObjCmRef ( + Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, Generator->TokenTable.Table[Index], &LpiRefInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h index 0c7a0b0601ab..d6561e33da11 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h @@ -69,8 +69,8 @@ /** A structure used to handle the Lpi structures referencing. - A CM_ARM_PROC_HIERARCHY_INFO structure references a CM_ARM_OBJ_REF. - This CM_ARM_OBJ_REF references CM_ARM_LPI_INFO structures. + A CM_ARM_PROC_HIERARCHY_INFO structure references a CM_ARCH_COMMON_OBJ_REF. + This CM_ARCH_COMMON_OBJ_REF references CM_ARM_LPI_INFO structures. Example: (Cpu0) (Cpu1) @@ -80,7 +80,7 @@ | v (List of references to Lpi states) - CM_ARM_OBJ_REF + CM_ARCH_COMMON_OBJ_REF | +---------------------------------------- | | @@ -89,9 +89,9 @@ CM_ARM_LPI_INFO[0] CM_ARM_LPI_INFO[1] Here, Cpu0 and Cpu1 have the same Lpi states. Both CM_ARM_PROC_HIERARCHY_INFO - structures reference the same CM_ARM_OBJ_REF. An entry is created in the + structures reference the same CM_ARCH_COMMON_OBJ_REF. An entry is created in the TokenTable such as: - 0 <-> CM_ARM_OBJ_REF + 0 <-> CM_ARCH_COMMON_OBJ_REF This will lead to the creation of this pseudo-ASL code where Cpu0 and Cpu1 return the same object at \_SB.L000: diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index 72873709aab5..dc1371c3bc5f 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c @@ -42,7 +42,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjCmRef + - EArchCommonObjCmRef - EArmObjPciConfigSpaceInfo - EArmObjPciAddressMapInfo - EArmObjPciInterruptMapInfo @@ -52,9 +52,9 @@ reference information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjCmRef, - CM_ARM_OBJ_REF + EObjNameSpaceArchCommon, + EArchCommonObjCmRef, + CM_ARCH_COMMON_OBJ_REF ); /** This macro expands to a function that retrieves the Pci @@ -313,7 +313,7 @@ GeneratePrt ( EFI_STATUS Status; INT32 Index; AML_OBJECT_NODE_HANDLE PrtNode; - CM_ARM_OBJ_REF *RefInfo; + CM_ARCH_COMMON_OBJ_REF *RefInfo; UINT32 RefCount; CM_ARM_PCI_INTERRUPT_MAP_INFO *IrqMapInfo; @@ -324,9 +324,9 @@ GeneratePrt ( PrtNode = NULL; - // Get the array of CM_ARM_OBJ_REF referencing the + // Get the array of CM_ARCH_COMMON_OBJ_REF referencing the // CM_ARM_PCI_INTERRUPT_MAP_INFO objects. - Status = GetEArmObjCmRef ( + Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PciInfo->InterruptMapToken, &RefInfo, @@ -458,7 +458,7 @@ GeneratePciCrs ( EFI_STATUS Status; BOOLEAN Translation; UINT32 Index; - CM_ARM_OBJ_REF *RefInfo; + CM_ARCH_COMMON_OBJ_REF *RefInfo; UINT32 RefCount; CM_ARM_PCI_ADDRESS_MAP_INFO *AddrMapInfo; AML_OBJECT_NODE_HANDLE CrsNode; @@ -505,9 +505,9 @@ GeneratePciCrs ( return Status; } - // Get the array of CM_ARM_OBJ_REF referencing the + // Get the array of CM_ARCH_COMMON_OBJ_REF referencing the // CM_ARM_PCI_ADDRESS_MAP_INFO objects. - Status = GetEArmObjCmRef ( + Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PciInfo->AddressMapToken, &RefInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index aef818e77f0c..d7ecd4dc1ba7 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,26 +166,25 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 21 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 22 - Cache Info - NULL, ///< 23 - CM Object Reference - NULL, ///< 24 - Memory Affinity Info - NULL, ///< 25 - Device Handle Acpi - NULL, ///< 26 - Device Handle Pci - NULL, ///< 27 - Generic Initiator Affinity - NULL, ///< 28 - CMN-600 Info - NULL, ///< 29 - Lpi Info - NULL, ///< 30 - Pci Address Map Info - NULL, ///< 31 - Pci Interrupt Map Info - NULL, ///< 32 - Reserved Memory Range Node - NULL, ///< 33 - Memory Range Descriptor - NULL, ///< 34 - Continuous Performance Control Info - NULL, ///< 35 - Pcc Subspace Type 0 Info + NULL, ///< 23 - Memory Affinity Info + NULL, ///< 24 - Device Handle Acpi + NULL, ///< 25 - Device Handle Pci + NULL, ///< 26 - Generic Initiator Affinity + NULL, ///< 27 - CMN-600 Info + NULL, ///< 28 - Lpi Info + NULL, ///< 29 - Pci Address Map Info + NULL, ///< 30 - Pci Interrupt Map Info + NULL, ///< 31 - Reserved Memory Range Node + NULL, ///< 32 - Memory Range Descriptor + NULL, ///< 33 - Continuous Performance Control Info + NULL, ///< 34 - Pcc Subspace Type 0 Info + NULL, ///< 35 - Pcc Subspace Type 2 Info NULL, ///< 36 - Pcc Subspace Type 2 Info - NULL, ///< 37 - Pcc Subspace Type 2 Info - NULL, ///< 38 - Pcc Subspace Type 3 Info - NULL, ///< 39 - Pcc Subspace Type 4 Info - NULL, ///< 40 - Pcc Subspace Type 5 Info - NULL, ///< 41 - Embedded Trace Extension/Module Info - NULL ///< 42 - P-State Dependency (PSD) Info + NULL, ///< 37 - Pcc Subspace Type 3 Info + NULL, ///< 38 - Pcc Subspace Type 4 Info + NULL, ///< 39 - Pcc Subspace Type 5 Info + NULL, ///< 40 - Embedded Trace Extension/Module Info + NULL ///< 41 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c index e4fa1233708e..08d11ac96a22 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/DynamicPlatRepo.c @@ -145,7 +145,7 @@ DynPlatRepoAddObject ( // Check the CmObjDesc: // - only Arm objects and Arch Common objects are supported for now. - // - only EArmObjCmRef objects can be added as arrays. + // - only EArchCommonObjCmRef objects can be added as arrays. if ((CmObjDesc->Size == 0) || (CmObjDesc->Count == 0)) { ASSERT (0); return EFI_INVALID_PARAMETER; @@ -155,16 +155,16 @@ DynPlatRepoAddObject ( NamespaceId = GET_CM_NAMESPACE_ID (CmObjDesc->ObjectId); if (EObjNameSpaceArm == NamespaceId) { - if ((ObjId >= EArmObjMax) || - ((CmObjDesc->Count > 1) && (ObjId != EArmObjCmRef))) - { + if (ObjId >= EArmObjMax) { ASSERT (0); return EFI_INVALID_PARAMETER; } ObjList = &This->ArmCmObjList[ObjId]; } else if (EObjNameSpaceArchCommon == NamespaceId) { - if (ObjId >= EArchCommonObjMax) { + if ((ObjId >= EArchCommonObjMax) || + ((CmObjDesc->Count > 1) && (ObjId != EArchCommonObjCmRef))) + { ASSERT (0); return EFI_INVALID_PARAMETER; } @@ -281,11 +281,11 @@ GroupCmObjNodes ( } if ((CmObjDesc->Count != 1) && - ((NamespaceId != EObjNameSpaceArm) || - (ObjIndex != EArmObjCmRef))) + ((NamespaceId != EObjNameSpaceArchCommon) || + (ObjIndex != EArchCommonObjCmRef))) { // We expect each descriptor to contain an individual object. - // EArmObjCmRef objects are counted as groups, so +1 as well. + // EArchCommonObjCmRef objects are counted as groups, so +1 as well. ASSERT (0); return EFI_INVALID_PARAMETER; } @@ -452,18 +452,18 @@ DynamicPlatRepoGetObject ( ObjId = GET_CM_OBJECT_ID (CmObjectId); if (NamespaceId == EObjNameSpaceArm) { - if ((ObjId >= EArmObjMax) || - ((ObjId == EArmObjCmRef) && - (Token == CM_NULL_TOKEN))) - { - // EArmObjCmRef object must be requested using a valid token. + if (ObjId >= EArmObjMax) { ASSERT (0); return EFI_INVALID_PARAMETER; } Desc = &This->ArmCmObjArray[ObjId]; } else if (NamespaceId == EObjNameSpaceArchCommon) { - if (ObjId >= EArchCommonObjMax) { + if ((ObjId >= EArchCommonObjMax) || + ((ObjId == EArchCommonObjCmRef) && + (Token == CM_NULL_TOKEN))) + { + // EArchCommonObjCmRef object must be requested using a valid token. ASSERT (0); return EFI_INVALID_PARAMETER; } diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/TokenMapper.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/TokenMapper.c index 9391e935eee0..2300375f0386 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/TokenMapper.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/TokenMapper.c @@ -66,11 +66,12 @@ TokenMapperAddObject ( // Point inside the finalized array. CmObjDesc->Data = Data; - // Only EArmObjCmRef CmObj can be added as arrays (more than 1 elements). - if ((GET_CM_NAMESPACE_ID (ObjectId) == EObjNameSpaceArm) && - (GET_CM_OBJECT_ID (ObjectId) == EArmObjCmRef)) + // Only EArchCommonObjCmRef CmObj can be added as + // arrays (more than 1 elements). + if ((GET_CM_NAMESPACE_ID (ObjectId) == EObjNameSpaceArchCommon) && + (GET_CM_OBJECT_ID (ObjectId) == EArchCommonObjCmRef)) { - CmObjDesc->Count = Size / sizeof (CM_ARM_OBJ_REF); + CmObjDesc->Count = Size / sizeof (CM_ARCH_COMMON_OBJ_REF); } else { CmObjDesc->Count = 1; } diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 3205cf87c8bf..264e01cff29f 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -350,9 +350,9 @@ STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser[] = { { "CacheId", 4, "0x%x", NULL }, }; -/** A parser for EArmObjCmRef. +/** A parser for EArchCommonObjCmRef. */ -STATIC CONST CM_OBJ_PARSER CmArmObjRefParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonObjRefParser[] = { { "ReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL } }; @@ -677,6 +677,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -706,7 +707,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArmGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjCmRef, CmArmObjRefParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.c index 8be1b5b8cd88..120a98c2a9eb 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.c @@ -219,11 +219,11 @@ AddMultipleCmObj ( /** Add multiple CmObj to the Configuration Manager. - Get one token referencing a EArmObjCmRef CmObj itself referencing + Get one token referencing a EArchCommonObjCmRef CmObj itself referencing the input CmObj. In the table below, RefToken is returned. Token referencing an Array of tokens Array of CmObj - array of EArmObjCmRef referencing each from the input: + array of EArchCommonObjCmRef referencing each from the input: CmObj: CmObj from the input: RefToken ---> CmObjToken[0] ---> CmObj[0] @@ -234,7 +234,7 @@ AddMultipleCmObj ( @param [in] CmObjDesc CmObjDesc containing multiple CmObj to add. @param [out] Token If success, token referencing an array - of EArmObjCmRef CmObj, themselves + of EArchCommonObjCmRef CmObj, themselves referencing the input CmObjs. @retval EFI_SUCCESS The function completed successfully. @@ -286,12 +286,12 @@ AddMultipleCmObjWithCmObjRef ( goto exit_handler; } - CmObjRef.ObjectId = CREATE_CM_ARM_OBJECT_ID (EArmObjCmRef); + CmObjRef.ObjectId = CREATE_CM_ARCH_COMMON_OBJECT_ID (EArchCommonObjCmRef); CmObjRef.Data = TokenTable; CmObjRef.Count = CmObjDesc->Count; CmObjRef.Size = TokenTableSize; - // Add the array of EArmObjCmRef CmObjs. + // Add the array of EArchCommonObjCmRef CmObjs. Status = FdtParserHandle->HwInfoAdd ( FdtParserHandle, FdtParserHandle->Context, diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.h index 270e0c3528f9..14e135335f9e 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/CmObjectDescUtility.h @@ -98,11 +98,11 @@ AddMultipleCmObj ( /** Add multiple CmObj to the Configuration Manager. - Get one token referencing a EArmObjCmRef CmObj itself referencing + Get one token referencing a EArchCommonObjCmRef CmObj itself referencing the input CmObj. In the table below, RefToken is returned. Token referencing an Array of tokens Array of CmObj - array of EArmObjCmRef referencing each from the input: + array of EArchCommonObjCmRef referencing each from the input: CmObj: CmObj from the input: RefToken ---> CmObjToken[0] ---> CmObj[0] @@ -113,7 +113,7 @@ AddMultipleCmObj ( @param [in] CmObjDesc CmObjDesc containing multiple CmObj to add. @param [out] Token If success, token referencing an array - of EArmObjCmRef CmObj, themselves + of EArchCommonObjCmRef CmObj, themselves referencing the input CmObjs. @retval EFI_SUCCESS The function completed successfully. diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 5b9dda3e63d9..9110c754690d 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,26 +463,25 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | SMMU Interrupt Array | | | 21 | Processor Hierarchy Info | Move to Arch Common NS | | 22 | Cache Info | Move to Arch Common NS | -| 23 | CM Object Reference | Move to Arch Common NS | -| 24 | Memory Affinity Info | Move to Arch Common NS | -| 25 | Device Handle Acpi | Move to Arch Common NS | -| 26 | Device Handle PCI | Move to Arch Common NS | -| 27 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 28 | CMN 600 Info | | -| 29 | Low Power Idle State Info | Move to Arch Common NS | -| 30 | PCI Address Map Info | Move to Arch Common NS | -| 31 | PCI Interrupt Map Info | Move to Arch Common NS | -| 32 | Reserved Memory Range Node | | -| 33 | Memory Range Descriptor | | -| 34 | Continuous Performance Control Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 38 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 39 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 40 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 41 | Embedded Trace Extension/Module Info | | -| 42 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Memory Affinity Info | Move to Arch Common NS | +| 24 | Device Handle Acpi | Move to Arch Common NS | +| 25 | Device Handle PCI | Move to Arch Common NS | +| 26 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 27 | CMN 600 Info | | +| 28 | Low Power Idle State Info | Move to Arch Common NS | +| 29 | PCI Address Map Info | Move to Arch Common NS | +| 30 | PCI Interrupt Map Info | Move to Arch Common NS | +| 31 | Reserved Memory Range Node | | +| 32 | Memory Range Descriptor | | +| 33 | Continuous Performance Control Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 38 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 39 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 40 | Embedded Trace Extension/Module Info | | +| 41 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 4 | Serial Debug Port Info | | | 5 | Hypervisor Vendor Id | | | 6 | Fixed feature flags for FADT | | +| 7 | CM Object Reference | | | `*` | All other values are reserved. | | From f6112a7a65c87bf09d9c27c3c9580092e45cee89 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Fri, 8 Mar 2024 11:24:00 +0000 Subject: [PATCH 19/56] DynamicTablesPkg: Move Pci Config Space Info to Arm namespace Move Pci Config Space Info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - MCFG generator - SSDT PCIe generator - SSDT PCIe support library - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map - FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 28 ++++++ .../Include/ArmNameSpaceObjects.h | 88 +++++++------------ .../Include/Library/SsdtPcieSupportLib.h | 12 +-- .../Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c | 28 +++--- .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 40 ++++----- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 59 ++++++------- .../SsdtPcieSupportLib/SsdtPcieSupportLib.c | 12 +-- .../ConfigurationManagerObjectParser.c | 6 +- .../Pci/ArmPciConfigSpaceParser.c | 20 +++-- .../Pci/ArmPciConfigSpaceParser.h | 10 +-- DynamicTablesPkg/Readme.md | 62 ++++++------- 11 files changed, 183 insertions(+), 182 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 632816da09de..7c70ba023829 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -28,6 +28,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT EArchCommonObjCmRef, ///< 7 - CM Object Reference + EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -114,6 +115,33 @@ typedef struct CmArchCommonObjRef { CM_OBJECT_TOKEN ReferenceToken; } CM_ARCH_COMMON_OBJ_REF; +/** A structure that describes the + PCI Configuration Space information for the Platform. + + ID: EArchCommonObjPciConfigSpaceInfo +*/ +typedef struct CmArchCommonPciConfigSpaceInfo { + /// The physical base address for the PCI segment + UINT64 BaseAddress; + + /// The PCI segment group number + UINT16 PciSegmentGroupNumber; + + /// The start bus number + UINT8 StartBusNumber; + + /// The end bus number + UINT8 EndBusNumber; + + /// Optional field: Reference Token for address mapping. + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. + CM_OBJECT_TOKEN AddressMapToken; + + /// Optional field: Reference Token for interrupt mapping. + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. + CM_OBJECT_TOKEN InterruptMapToken; +} CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index cfcb2c7d2758..a701de4bcd60 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -39,37 +39,36 @@ typedef enum ArmObjectID { EArmObjPlatformGTBlockInfo, ///< 8 - Platform GT Block Info EArmObjGTBlockTimerFrameInfo, ///< 9 - Generic Timer Block Frame Info EArmObjPlatformGenericWatchdogInfo, ///< 10 - Platform Generic Watchdog - EArmObjPciConfigSpaceInfo, ///< 11 - PCI Configuration Space Info - EArmObjItsGroup, ///< 12 - ITS Group - EArmObjNamedComponent, ///< 13 - Named Component - EArmObjRootComplex, ///< 14 - Root Complex - EArmObjSmmuV1SmmuV2, ///< 15 - SMMUv1 or SMMUv2 - EArmObjSmmuV3, ///< 16 - SMMUv3 - EArmObjPmcg, ///< 17 - PMCG - EArmObjGicItsIdentifierArray, ///< 18 - GIC ITS Identifier Array - EArmObjIdMappingArray, ///< 19 - ID Mapping Array - EArmObjSmmuInterruptArray, ///< 20 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 21 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 22 - Cache Info - EArmObjMemoryAffinityInfo, ///< 23 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 24 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 25 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 26 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 27 - CMN-600 Info - EArmObjLpiInfo, ///< 28 - Lpi Info - EArmObjPciAddressMapInfo, ///< 29 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 30 - Pci Interrupt Map Info - EArmObjRmr, ///< 31 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 32 - Memory Range Descriptor - EArmObjCpcInfo, ///< 33 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 34 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 35 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 36 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 37 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 38 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 39 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 40 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 41 - P-State Dependency (PSD) Info + EArmObjItsGroup, ///< 11 - ITS Group + EArmObjNamedComponent, ///< 12 - Named Component + EArmObjRootComplex, ///< 13 - Root Complex + EArmObjSmmuV1SmmuV2, ///< 14 - SMMUv1 or SMMUv2 + EArmObjSmmuV3, ///< 15 - SMMUv3 + EArmObjPmcg, ///< 16 - PMCG + EArmObjGicItsIdentifierArray, ///< 17 - GIC ITS Identifier Array + EArmObjIdMappingArray, ///< 18 - ID Mapping Array + EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array + EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info + EArmObjCacheInfo, ///< 21 - Cache Info + EArmObjMemoryAffinityInfo, ///< 22 - Memory Affinity Info + EArmObjDeviceHandleAcpi, ///< 23 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 24 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 25 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 26 - CMN-600 Info + EArmObjLpiInfo, ///< 27 - Lpi Info + EArmObjPciAddressMapInfo, ///< 28 - Pci Address Map Info + EArmObjPciInterruptMapInfo, ///< 29 - Pci Interrupt Map Info + EArmObjRmr, ///< 30 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 31 - Memory Range Descriptor + EArmObjCpcInfo, ///< 32 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 33 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 34 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 35 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 36 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 37 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 38 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 39 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 40 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -408,33 +407,6 @@ typedef struct CmArmGenericWatchdogInfo { UINT32 Flags; } CM_ARM_GENERIC_WATCHDOG_INFO; -/** A structure that describes the - PCI Configuration Space information for the Platform. - - ID: EArmObjPciConfigSpaceInfo -*/ -typedef struct CmArmPciConfigSpaceInfo { - /// The physical base address for the PCI segment - UINT64 BaseAddress; - - /// The PCI segment group number - UINT16 PciSegmentGroupNumber; - - /// The start bus number - UINT8 StartBusNumber; - - /// The end bus number - UINT8 EndBusNumber; - - /// Optional field: Reference Token for address mapping. - /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. - CM_OBJECT_TOKEN AddressMapToken; - - /// Optional field: Reference Token for interrupt mapping. - /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure. - CM_OBJECT_TOKEN InterruptMapToken; -} CM_ARM_PCI_CONFIG_SPACE_INFO; - /** A structure that describes the ITS Group node for the Platform. diff --git a/DynamicTablesPkg/Include/Library/SsdtPcieSupportLib.h b/DynamicTablesPkg/Include/Library/SsdtPcieSupportLib.h index 4171dabc33d8..50a335e4a464 100644 --- a/DynamicTablesPkg/Include/Library/SsdtPcieSupportLib.h +++ b/DynamicTablesPkg/Include/Library/SsdtPcieSupportLib.h @@ -43,8 +43,8 @@ typedef struct MappingTable { EFI_STATUS EFIAPI AddOscMethod ( - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, - IN OUT AML_OBJECT_NODE_HANDLE PciNode + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, + IN OUT AML_OBJECT_NODE_HANDLE PciNode ); /** Generate Pci slots devices. @@ -66,10 +66,10 @@ AddOscMethod ( EFI_STATUS EFIAPI GeneratePciSlots ( - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, - IN CONST MAPPING_TABLE *MappingTable, - IN UINT32 Uid, - IN OUT AML_OBJECT_NODE_HANDLE PciNode + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST MAPPING_TABLE *MappingTable, + IN UINT32 Uid, + IN OUT AML_OBJECT_NODE_HANDLE PciNode ); #endif // SSDT_PCIE_SUPPORT_LIB_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c index 004b794a3c0c..722f9c17d541 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c @@ -27,7 +27,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjPciConfigSpaceInfo + - EArchCommonObjPciConfigSpaceInfo */ #pragma pack(1) @@ -51,9 +51,9 @@ typedef /** Retrieve the PCI Configuration Space Information. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPciConfigSpaceInfo, - CM_ARM_PCI_CONFIG_SPACE_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPciConfigSpaceInfo, + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO ); /** Add the PCI Enhanced Configuration Space Information to the MCFG Table. @@ -68,10 +68,10 @@ GET_OBJECT_LIST ( STATIC VOID AddPciConfigurationSpaceList ( - IN MCFG_TABLE *CONST Mcfg, - IN CONST UINT32 PciCfgSpaceOffset, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciCfgSpaceInfoList, - IN UINT32 PciCfgSpaceCount + IN MCFG_TABLE *CONST Mcfg, + IN CONST UINT32 PciCfgSpaceOffset, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciCfgSpaceInfoList, + IN UINT32 PciCfgSpaceCount ) { MCFG_CFG_SPACE_ADDR *PciCfgSpace; @@ -126,11 +126,11 @@ BuildMcfgTable ( OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table ) { - EFI_STATUS Status; - UINT32 TableSize; - UINT32 ConfigurationSpaceCount; - CM_ARM_PCI_CONFIG_SPACE_INFO *PciConfigSpaceInfoList; - MCFG_TABLE *Mcfg; + EFI_STATUS Status; + UINT32 TableSize; + UINT32 ConfigurationSpaceCount; + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciConfigSpaceInfoList; + MCFG_TABLE *Mcfg; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -154,7 +154,7 @@ BuildMcfgTable ( } *Table = NULL; - Status = GetEArmObjPciConfigSpaceInfo ( + Status = GetEArchCommonObjPciConfigSpaceInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &PciConfigSpaceInfoList, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index dc1371c3bc5f..2a169e0f6c1c 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c @@ -43,7 +43,7 @@ The following Configuration Manager Object(s) are required by this Generator: - EArchCommonObjCmRef - - EArmObjPciConfigSpaceInfo + - EArchCommonObjPciConfigSpaceInfo - EArmObjPciAddressMapInfo - EArmObjPciInterruptMapInfo */ @@ -61,9 +61,9 @@ GET_OBJECT_LIST ( Configuration Space Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPciConfigSpaceInfo, - CM_ARM_PCI_CONFIG_SPACE_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPciConfigSpaceInfo, + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO ); /** This macro expands to a function that retrieves the Pci @@ -208,9 +208,9 @@ STATIC EFI_STATUS EFIAPI GeneratePciDeviceInfo ( - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, - IN UINT32 Uid, - IN OUT AML_OBJECT_NODE_HANDLE PciNode + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, + IN UINT32 Uid, + IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { EFI_STATUS Status; @@ -305,7 +305,7 @@ EFIAPI GeneratePrt ( IN ACPI_PCI_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, IN UINT32 Uid, IN OUT AML_OBJECT_NODE_HANDLE PciNode ) @@ -451,7 +451,7 @@ EFIAPI GeneratePciCrs ( IN ACPI_PCI_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { @@ -693,7 +693,7 @@ EFIAPI ReserveEcamSpace ( IN ACPI_PCI_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { @@ -760,7 +760,7 @@ EFIAPI GeneratePciDevice ( IN ACPI_PCI_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, IN UINT32 Uid, IN OUT AML_ROOT_NODE_HANDLE *RootNode ) @@ -863,7 +863,7 @@ BuildSsdtPciTable ( IN ACPI_PCI_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, IN UINT32 Uid, OUT EFI_ACPI_DESCRIPTION_HEADER **Table ) @@ -971,13 +971,13 @@ BuildSsdtPciTableEx ( OUT UINTN *CONST TableCount ) { - EFI_STATUS Status; - CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo; - UINT32 PciCount; - UINTN Index; - EFI_ACPI_DESCRIPTION_HEADER **TableList; - ACPI_PCI_GENERATOR *Generator; - UINT32 Uid; + EFI_STATUS Status; + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo; + UINT32 PciCount; + UINTN Index; + EFI_ACPI_DESCRIPTION_HEADER **TableList; + ACPI_PCI_GENERATOR *Generator; + UINT32 Uid; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -990,7 +990,7 @@ BuildSsdtPciTableEx ( *TableCount = 0; Generator = (ACPI_PCI_GENERATOR *)This; - Status = GetEArmObjPciConfigSpaceInfo ( + Status = GetEArchCommonObjPciConfigSpaceInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &PciInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index d7ecd4dc1ba7..41f66ee7b689 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -154,37 +154,36 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 8 - Platform GT Block Info NULL, ///< 9 - Generic Timer Block Frame Info NULL, ///< 10 - Platform Generic Watchdog - NULL, ///< 11 - PCI Configuration Space Info - TokenFixerItsGroup, ///< 12 - ITS Group - TokenFixerNamedComponentNode, ///< 13 - Named Component - TokenFixerRootComplexNode, ///< 14 - Root Complex - TokenFixerNotImplemented, ///< 15 - SMMUv1 or SMMUv2 - TokenFixerSmmuV3Node, ///< 16 - SMMUv3 - TokenFixerNotImplemented, ///< 17 - PMCG - NULL, ///< 18 - GIC ITS Identifier Array - NULL, ///< 19 - ID Mapping Array - NULL, ///< 20 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 21 - Processor Hierarchy Info - TokenFixerNotImplemented, ///< 22 - Cache Info - NULL, ///< 23 - Memory Affinity Info - NULL, ///< 24 - Device Handle Acpi - NULL, ///< 25 - Device Handle Pci - NULL, ///< 26 - Generic Initiator Affinity - NULL, ///< 27 - CMN-600 Info - NULL, ///< 28 - Lpi Info - NULL, ///< 29 - Pci Address Map Info - NULL, ///< 30 - Pci Interrupt Map Info - NULL, ///< 31 - Reserved Memory Range Node - NULL, ///< 32 - Memory Range Descriptor - NULL, ///< 33 - Continuous Performance Control Info - NULL, ///< 34 - Pcc Subspace Type 0 Info + TokenFixerItsGroup, ///< 11 - ITS Group + TokenFixerNamedComponentNode, ///< 12 - Named Component + TokenFixerRootComplexNode, ///< 13 - Root Complex + TokenFixerNotImplemented, ///< 14 - SMMUv1 or SMMUv2 + TokenFixerSmmuV3Node, ///< 15 - SMMUv3 + TokenFixerNotImplemented, ///< 16 - PMCG + NULL, ///< 17 - GIC ITS Identifier Array + NULL, ///< 18 - ID Mapping Array + NULL, ///< 19 - SMMU Interrupt Array + TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info + TokenFixerNotImplemented, ///< 21 - Cache Info + NULL, ///< 22 - Memory Affinity Info + NULL, ///< 23 - Device Handle Acpi + NULL, ///< 24 - Device Handle Pci + NULL, ///< 25 - Generic Initiator Affinity + NULL, ///< 26 - CMN-600 Info + NULL, ///< 27 - Lpi Info + NULL, ///< 28 - Pci Address Map Info + NULL, ///< 29 - Pci Interrupt Map Info + NULL, ///< 30 - Reserved Memory Range Node + NULL, ///< 31 - Memory Range Descriptor + NULL, ///< 32 - Continuous Performance Control Info + NULL, ///< 33 - Pcc Subspace Type 0 Info + NULL, ///< 34 - Pcc Subspace Type 2 Info NULL, ///< 35 - Pcc Subspace Type 2 Info - NULL, ///< 36 - Pcc Subspace Type 2 Info - NULL, ///< 37 - Pcc Subspace Type 3 Info - NULL, ///< 38 - Pcc Subspace Type 4 Info - NULL, ///< 39 - Pcc Subspace Type 5 Info - NULL, ///< 40 - Embedded Trace Extension/Module Info - NULL ///< 41 - P-State Dependency (PSD) Info + NULL, ///< 36 - Pcc Subspace Type 3 Info + NULL, ///< 37 - Pcc Subspace Type 4 Info + NULL, ///< 38 - Pcc Subspace Type 5 Info + NULL, ///< 39 - Embedded Trace Extension/Module Info + NULL ///< 40 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.c b/DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.c index b35fb6a7dd45..3f8aae44bf9f 100644 --- a/DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.c +++ b/DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.c @@ -53,10 +53,10 @@ EFI_STATUS EFIAPI GeneratePciSlots ( - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, - IN CONST MAPPING_TABLE *MappingTable, - IN UINT32 Uid, - IN OUT AML_OBJECT_NODE_HANDLE PciNode + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, + IN CONST MAPPING_TABLE *MappingTable, + IN UINT32 Uid, + IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { EFI_STATUS Status; @@ -132,8 +132,8 @@ GeneratePciSlots ( EFI_STATUS EFIAPI AddOscMethod ( - IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo, - IN OUT AML_OBJECT_NODE_HANDLE PciNode + IN CONST CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo, + IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { EFI_STATUS Status; diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 264e01cff29f..73dbb9879dcc 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -182,9 +182,9 @@ STATIC CONST CM_OBJ_PARSER CmArmGenericWatchdogInfoParser[] = { { "Flags", 4, "0x%x", NULL } }; -/** A parser for EArmObjPciConfigSpaceInfo. +/** A parser for EArchCommonObjPciConfigSpaceInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmPciConfigSpaceInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPciConfigSpaceInfoParser[] = { { "BaseAddress", 8, "0x%llx", NULL }, { "PciSegmentGroupNumber", 2, "0x%x", NULL }, { "StartBusNumber", 1, "0x%x", NULL }, @@ -678,6 +678,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -695,7 +696,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser), CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPciConfigSpaceInfo, CmArmPciConfigSpaceInfoParser), CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index 2ffff1ccd27f..7d9fe7b1da22 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -468,7 +468,7 @@ ParseIrqMap ( @param [in] Fdt Pointer to a Flattened Device Tree (Fdt). @param [in] HostPciNode Offset of a host-pci node. - @param [in, out] PciInfo The CM_ARM_PCI_CONFIG_SPACE_INFO to populate. + @param [in, out] PciInfo The CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO to populate. @retval EFI_SUCCESS The function completed successfully. @retval EFI_ABORTED An error occurred. @@ -579,7 +579,7 @@ PciNodeParser ( /** Add the parsed Pci information to the Configuration Manager. CmObj of the following types are concerned: - - EArmObjPciConfigSpaceInfo + - EArchCommonObjPciConfigSpaceInfo - EArmObjPciAddressMapInfo - EArmObjPciInterruptMapInfo @@ -599,8 +599,8 @@ PciInfoAdd ( IN PCI_PARSER_TABLE *PciTableInfo ) { - EFI_STATUS Status; - CM_ARM_PCI_CONFIG_SPACE_INFO *PciConfigSpaceInfo; + EFI_STATUS Status; + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciConfigSpaceInfo; if ((FdtParserHandle == NULL) || (PciTableInfo == NULL)) @@ -640,9 +640,11 @@ PciInfoAdd ( // Add the configuration space CmObj to the Configuration Manager. Status = AddSingleCmObj ( FdtParserHandle, - CREATE_CM_ARM_OBJECT_ID (EArmObjPciConfigSpaceInfo), + CREATE_CM_ARCH_COMMON_OBJECT_ID ( + EArchCommonObjPciConfigSpaceInfo + ), &PciTableInfo->PciConfigSpaceInfo, - sizeof (CM_ARM_PCI_CONFIG_SPACE_INFO), + sizeof (CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO), NULL ); ASSERT_EFI_ERROR (Status); @@ -682,15 +684,15 @@ FreeParserTable ( return EFI_SUCCESS; } -/** CM_ARM_PCI_CONFIG_SPACE_INFO parser function. +/** CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO parser function. The following structure is populated: - typedef struct CmArmPciConfigSpaceInfo { + typedef struct CmArchCommonPciConfigSpaceInfo { UINT64 BaseAddress; // {Populated} UINT16 PciSegmentGroupNumber; // {Populated} UINT8 StartBusNumber; // {Populated} UINT8 EndBusNumber; // {Populated} - } CM_ARM_PCI_CONFIG_SPACE_INFO; + } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; typedef struct CmArmPciAddressMapInfo { UINT8 SpaceCode; // {Populated} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h index 6e0027abeab6..4e269508a6e4 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h @@ -83,24 +83,24 @@ typedef enum PciMappingTable { */ typedef struct PciParserTable { /// PCI Configuration Space Info - CM_ARM_PCI_CONFIG_SPACE_INFO PciConfigSpaceInfo; + CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO PciConfigSpaceInfo; /// Store the address mapping and interrupt mapping as CmObjDesc /// before adding them to the Configuration Manager. - CM_OBJ_DESCRIPTOR Mapping[PciMappingTableMax]; + CM_OBJ_DESCRIPTOR Mapping[PciMappingTableMax]; } PCI_PARSER_TABLE; #pragma pack() -/** CM_ARM_PCI_CONFIG_SPACE_INFO parser function. +/** CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO parser function. The following structure is populated: - typedef struct CmArmPciConfigSpaceInfo { + typedef struct CmArchCommonPciConfigSpaceInfo { UINT64 BaseAddress; // {Populated} UINT16 PciSegmentGroupNumber; // {Populated} UINT8 StartBusNumber; // {Populated} UINT8 EndBusNumber; // {Populated} - } CM_ARM_PCI_CONFIG_SPACE_INFO; + } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; typedef struct CmArmPciAddressMapInfo { UINT8 SpaceCode; // {Populated} diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 9110c754690d..e0544fe40b1c 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -451,37 +451,36 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 8 | Platform GT Block Info | | | 9 | Generic Timer Block Frame Info | | | 10 | Platform Generic Watchdog | | -| 11 | PCI Configuration Space Info | Move to Arch Common NS | -| 12 | ITS Group | | -| 13 | Named Component | | -| 14 | Root Complex | | -| 15 | SMMUv1 or SMMUv2 | | -| 16 | SMMUv3 | | -| 17 | PMCG | | -| 18 | GIC ITS Identifier Array | | -| 19 | ID Mapping Array | | -| 20 | SMMU Interrupt Array | | -| 21 | Processor Hierarchy Info | Move to Arch Common NS | -| 22 | Cache Info | Move to Arch Common NS | -| 23 | Memory Affinity Info | Move to Arch Common NS | -| 24 | Device Handle Acpi | Move to Arch Common NS | -| 25 | Device Handle PCI | Move to Arch Common NS | -| 26 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 27 | CMN 600 Info | | -| 28 | Low Power Idle State Info | Move to Arch Common NS | -| 29 | PCI Address Map Info | Move to Arch Common NS | -| 30 | PCI Interrupt Map Info | Move to Arch Common NS | -| 31 | Reserved Memory Range Node | | -| 32 | Memory Range Descriptor | | -| 33 | Continuous Performance Control Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 38 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 39 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 40 | Embedded Trace Extension/Module Info | | -| 41 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 11 | ITS Group | | +| 12 | Named Component | | +| 13 | Root Complex | | +| 14 | SMMUv1 or SMMUv2 | | +| 15 | SMMUv3 | | +| 16 | PMCG | | +| 17 | GIC ITS Identifier Array | | +| 18 | ID Mapping Array | | +| 19 | SMMU Interrupt Array | | +| 20 | Processor Hierarchy Info | Move to Arch Common NS | +| 21 | Cache Info | Move to Arch Common NS | +| 22 | Memory Affinity Info | Move to Arch Common NS | +| 23 | Device Handle Acpi | Move to Arch Common NS | +| 24 | Device Handle PCI | Move to Arch Common NS | +| 25 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 26 | CMN 600 Info | | +| 27 | Low Power Idle State Info | Move to Arch Common NS | +| 28 | PCI Address Map Info | Move to Arch Common NS | +| 29 | PCI Interrupt Map Info | Move to Arch Common NS | +| 30 | Reserved Memory Range Node | | +| 31 | Memory Range Descriptor | | +| 32 | Continuous Performance Control Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 38 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 39 | Embedded Trace Extension/Module Info | | +| 40 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 5 | Hypervisor Vendor Id | | | 6 | Fixed feature flags for FADT | | | 7 | CM Object Reference | | +| 8 | PCI Configuration Space Info | | | `*` | All other values are reserved. | | From 6be800d046baf6aa55fdb60f72feab70c2c6b900 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Tue, 16 Apr 2024 18:13:03 +0530 Subject: [PATCH 20/56] ArmVirtPkg: Kvmtool: Update Pci Config Space Info in Cfg Manager The Pci Config Space Info object was moved from the Arm Namespace to the Arch Common namespace. Therefore, update the Kvmtool guest firmware configuration manager to reflect this change. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Reviewed-by: Sunil V L --- ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c index 724054440644..96fbea33350d 100644 --- a/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c +++ b/ArmVirtPkg/KvmtoolCfgMgrDxe/ConfigurationManager.c @@ -662,7 +662,9 @@ GetStandardNameSpaceObject ( // Status = DynamicPlatRepoGetObject ( PlatformRepo->DynamicPlatformRepo, - CREATE_CM_ARM_OBJECT_ID (EArmObjPciConfigSpaceInfo), + CREATE_CM_ARCH_COMMON_OBJECT_ID ( + EArchCommonObjPciConfigSpaceInfo + ), CM_NULL_TOKEN, &CmObjDesc ); From b0d13719e92d0867de018f96bcc1a1bbd9919350 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Fri, 8 Mar 2024 11:48:29 +0000 Subject: [PATCH 21/56] DynamicTablesPkg: Move Pci Address Map Info to Arch Common Move Pci Address Map Info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT PCIe generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map - FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 28 ++++++++++ .../Include/ArmNameSpaceObjects.h | 52 +++++-------------- .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 30 +++++------ .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 23 ++++---- .../ConfigurationManagerObjectParser.c | 6 +-- .../Pci/ArmPciConfigSpaceParser.c | 18 +++---- .../Pci/ArmPciConfigSpaceParser.h | 4 +- DynamicTablesPkg/Readme.md | 26 +++++----- 8 files changed, 93 insertions(+), 94 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 7c70ba023829..bbc5d7dc55cd 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -29,6 +29,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT EArchCommonObjCmRef, ///< 7 - CM Object Reference EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info + EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -142,6 +143,33 @@ typedef struct CmArchCommonPciConfigSpaceInfo { CM_OBJECT_TOKEN InterruptMapToken; } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; +/** A structure that describes a PCI Address Map. + + The memory-ranges used by the PCI bus are described by this object. + + ID: EArchCommonObjPciAddressMapInfo +*/ +typedef struct CmArchCommonPciAddressMapInfo { + /** Pci address space code + + Available values are: + - 0: Configuration Space + - 1: I/O Space + - 2: 32-bit-address Memory Space + - 3: 64-bit-address Memory Space + */ + UINT8 SpaceCode; + + /// PCI address + UINT64 PciAddress; + + /// Cpu address + UINT64 CpuAddress; + + /// Address size + UINT64 AddressSize; +} CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index a701de4bcd60..5b318bbb10c3 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -56,19 +56,18 @@ typedef enum ArmObjectID { EArmObjGenericInitiatorAffinityInfo, ///< 25 - Generic Initiator Affinity EArmObjCmn600Info, ///< 26 - CMN-600 Info EArmObjLpiInfo, ///< 27 - Lpi Info - EArmObjPciAddressMapInfo, ///< 28 - Pci Address Map Info - EArmObjPciInterruptMapInfo, ///< 29 - Pci Interrupt Map Info - EArmObjRmr, ///< 30 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 31 - Memory Range Descriptor - EArmObjCpcInfo, ///< 32 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 33 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 34 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 35 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 36 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 37 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 38 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 39 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 40 - P-State Dependency (PSD) Info + EArmObjPciInterruptMapInfo, ///< 28 - Pci Interrupt Map Info + EArmObjRmr, ///< 29 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 30 - Memory Range Descriptor + EArmObjCpcInfo, ///< 31 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 32 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 33 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 34 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 35 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 36 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 37 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 38 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 39 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -901,33 +900,6 @@ typedef struct CmArmLpiInfo { CHAR8 StateName[16]; } CM_ARM_LPI_INFO; -/** A structure that describes a PCI Address Map. - - The memory-ranges used by the PCI bus are described by this object. - - ID: EArmObjPciAddressMapInfo -*/ -typedef struct CmArmPciAddressMapInfo { - /** Pci address space code - - Available values are: - - 0: Configuration Space - - 1: I/O Space - - 2: 32-bit-address Memory Space - - 3: 64-bit-address Memory Space - */ - UINT8 SpaceCode; - - /// PCI address - UINT64 PciAddress; - - /// Cpu address - UINT64 CpuAddress; - - /// Address size - UINT64 AddressSize; -} CM_ARM_PCI_ADDRESS_MAP_INFO; - /** A structure that describes a PCI Interrupt Map. The legacy PCI interrupts used by PCI devices are described by this object. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index 2a169e0f6c1c..e86f1cb529f0 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c @@ -44,7 +44,7 @@ this Generator: - EArchCommonObjCmRef - EArchCommonObjPciConfigSpaceInfo - - EArmObjPciAddressMapInfo + - EArchCommonObjPciAddressMapInfo - EArmObjPciInterruptMapInfo */ @@ -70,9 +70,9 @@ GET_OBJECT_LIST ( Address Mapping Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPciAddressMapInfo, - CM_ARM_PCI_ADDRESS_MAP_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPciAddressMapInfo, + CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO ); /** This macro expands to a function that retrieves the Pci @@ -455,14 +455,14 @@ GeneratePciCrs ( IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { - EFI_STATUS Status; - BOOLEAN Translation; - UINT32 Index; - CM_ARCH_COMMON_OBJ_REF *RefInfo; - UINT32 RefCount; - CM_ARM_PCI_ADDRESS_MAP_INFO *AddrMapInfo; - AML_OBJECT_NODE_HANDLE CrsNode; - BOOLEAN IsPosDecode; + EFI_STATUS Status; + BOOLEAN Translation; + UINT32 Index; + CM_ARCH_COMMON_OBJ_REF *RefInfo; + UINT32 RefCount; + CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO *AddrMapInfo; + AML_OBJECT_NODE_HANDLE CrsNode; + BOOLEAN IsPosDecode; ASSERT (Generator != NULL); ASSERT (CfgMgrProtocol != NULL); @@ -506,7 +506,7 @@ GeneratePciCrs ( } // Get the array of CM_ARCH_COMMON_OBJ_REF referencing the - // CM_ARM_PCI_ADDRESS_MAP_INFO objects. + // CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO objects. Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PciInfo->AddressMapToken, @@ -519,8 +519,8 @@ GeneratePciCrs ( } for (Index = 0; Index < RefCount; Index++) { - // Get CM_ARM_PCI_ADDRESS_MAP_INFO structures one by one. - Status = GetEArmObjPciAddressMapInfo ( + // Get CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO structures one by one. + Status = GetEArchCommonObjPciAddressMapInfo ( CfgMgrProtocol, RefInfo[Index].ReferenceToken, &AddrMapInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 41f66ee7b689..0e12b0f8b167 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -171,19 +171,18 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 25 - Generic Initiator Affinity NULL, ///< 26 - CMN-600 Info NULL, ///< 27 - Lpi Info - NULL, ///< 28 - Pci Address Map Info - NULL, ///< 29 - Pci Interrupt Map Info - NULL, ///< 30 - Reserved Memory Range Node - NULL, ///< 31 - Memory Range Descriptor - NULL, ///< 32 - Continuous Performance Control Info - NULL, ///< 33 - Pcc Subspace Type 0 Info + NULL, ///< 28 - Pci Interrupt Map Info + NULL, ///< 29 - Reserved Memory Range Node + NULL, ///< 30 - Memory Range Descriptor + NULL, ///< 31 - Continuous Performance Control Info + NULL, ///< 32 - Pcc Subspace Type 0 Info + NULL, ///< 33 - Pcc Subspace Type 2 Info NULL, ///< 34 - Pcc Subspace Type 2 Info - NULL, ///< 35 - Pcc Subspace Type 2 Info - NULL, ///< 36 - Pcc Subspace Type 3 Info - NULL, ///< 37 - Pcc Subspace Type 4 Info - NULL, ///< 38 - Pcc Subspace Type 5 Info - NULL, ///< 39 - Embedded Trace Extension/Module Info - NULL ///< 40 - P-State Dependency (PSD) Info + NULL, ///< 35 - Pcc Subspace Type 3 Info + NULL, ///< 36 - Pcc Subspace Type 4 Info + NULL, ///< 37 - Pcc Subspace Type 5 Info + NULL, ///< 38 - Embedded Trace Extension/Module Info + NULL ///< 39 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 73dbb9879dcc..2d0e62876606 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -440,9 +440,9 @@ STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser[] = { { "StateName", 16, NULL, PrintString }, }; -/** A parser for EArmObjPciAddressMapInfo. +/** A parser for EArchCommonObjPciAddressMapInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmPciAddressMapInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPciAddressMapInfoParser[] = { { "SpaceCode", 1, "%d", NULL }, { "PciAddress", 8, "0x%llx", NULL }, { "CpuAddress", 8, "0x%llx", NULL }, @@ -679,6 +679,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -713,7 +714,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPciAddressMapInfo, CmArmPciAddressMapInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPciInterruptMapInfo, CmPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index 7d9fe7b1da22..aef0f27a15ae 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -188,8 +188,8 @@ ParseAddressMap ( UINT32 Count; UINT32 PciAddressAttr; - CM_ARM_PCI_ADDRESS_MAP_INFO *PciAddressMapInfo; - UINT32 BufferSize; + CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO *PciAddressMapInfo; + UINT32 BufferSize; // The mapping is done on AddressMapSize bytes. AddressMapSize = (PCI_ADDRESS_CELLS + AddressCells + PCI_SIZE_CELLS) * @@ -208,7 +208,7 @@ ParseAddressMap ( Count = DataSize / AddressMapSize; // Allocate a buffer to store each address mapping. - BufferSize = Count * sizeof (CM_ARM_PCI_ADDRESS_MAP_INFO); + BufferSize = Count * sizeof (CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO); PciAddressMapInfo = AllocateZeroPool (BufferSize); if (PciAddressMapInfo == NULL) { ASSERT (0); @@ -246,9 +246,9 @@ ParseAddressMap ( } // for PciInfo->Mapping[PciMappingTableAddress].ObjectId = - CREATE_CM_ARM_OBJECT_ID (EArmObjPciAddressMapInfo); + CREATE_CM_ARCH_COMMON_OBJECT_ID (EArchCommonObjPciAddressMapInfo); PciInfo->Mapping[PciMappingTableAddress].Size = - sizeof (CM_ARM_PCI_ADDRESS_MAP_INFO) * Count; + sizeof (CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO) * Count; PciInfo->Mapping[PciMappingTableAddress].Data = PciAddressMapInfo; PciInfo->Mapping[PciMappingTableAddress].Count = Count; @@ -413,7 +413,7 @@ ParseIrqMap ( // Allocate a buffer to store each interrupt mapping. IrqMapCount = DataSize / IrqMapSize; - BufferSize = IrqMapCount * sizeof (CM_ARM_PCI_ADDRESS_MAP_INFO); + BufferSize = IrqMapCount * sizeof (CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO); PciInterruptMapInfo = AllocateZeroPool (BufferSize); if (PciInterruptMapInfo == NULL) { ASSERT (0); @@ -580,7 +580,7 @@ PciNodeParser ( CmObj of the following types are concerned: - EArchCommonObjPciConfigSpaceInfo - - EArmObjPciAddressMapInfo + - EArchCommonObjPciAddressMapInfo - EArmObjPciInterruptMapInfo @param [in] FdtParserHandle A handle to the parser instance. @@ -694,12 +694,12 @@ FreeParserTable ( UINT8 EndBusNumber; // {Populated} } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; - typedef struct CmArmPciAddressMapInfo { + typedef struct CmArchCommonPciAddressMapInfo { UINT8 SpaceCode; // {Populated} UINT64 PciAddress; // {Populated} UINT64 CpuAddress; // {Populated} UINT64 AddressSize; // {Populated} - } CM_ARM_PCI_ADDRESS_MAP_INFO; + } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; typedef struct CmArmPciInterruptMapInfo { UINT8 PciBus; // {Populated} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h index 4e269508a6e4..ba7090fd7e47 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h @@ -102,12 +102,12 @@ typedef struct PciParserTable { UINT8 EndBusNumber; // {Populated} } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO; - typedef struct CmArmPciAddressMapInfo { + typedef struct CmArchCommonPciAddressMapInfo { UINT8 SpaceCode; // {Populated} UINT64 PciAddress; // {Populated} UINT64 CpuAddress; // {Populated} UINT64 AddressSize; // {Populated} - } CM_ARM_PCI_ADDRESS_MAP_INFO; + } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; typedef struct CmArmPciInterruptMapInfo { UINT8 PciBus; // {Populated} diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index e0544fe40b1c..0caae7dc4527 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -468,19 +468,18 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 25 | Generic Initiator Affinity Info | Move to Arch Common NS | | 26 | CMN 600 Info | | | 27 | Low Power Idle State Info | Move to Arch Common NS | -| 28 | PCI Address Map Info | Move to Arch Common NS | -| 29 | PCI Interrupt Map Info | Move to Arch Common NS | -| 30 | Reserved Memory Range Node | | -| 31 | Memory Range Descriptor | | -| 32 | Continuous Performance Control Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 38 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 39 | Embedded Trace Extension/Module Info | | -| 40 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 28 | PCI Interrupt Map Info | Move to Arch Common NS | +| 29 | Reserved Memory Range Node | | +| 30 | Memory Range Descriptor | | +| 31 | Continuous Performance Control Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 37 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 38 | Embedded Trace Extension/Module Info | | +| 39 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 6 | Fixed feature flags for FADT | | | 7 | CM Object Reference | | | 8 | PCI Configuration Space Info | | +| 9 | PCI Address Map Info | | | `*` | All other values are reserved. | | From 332109241bcaade5e9fb815007136eb63298883d Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Fri, 8 Mar 2024 12:14:54 +0000 Subject: [PATCH 22/56] DynamicTablesPkg: Move CM_ARM_GENERIC_INTERRUPT struct to Arch Common The CM_ARM_GENERIC_INTERRUPT struct describes a standard interrupt and is generic. Therefore move it to the Arch Common namespace header file and rename it as CM_ARCH_COMMON_GENERIC_INTERRUPT. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT CMN600 generator - ConfigurationManagerObjectParser - FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 15 +++++ .../Include/ArmNameSpaceObjects.h | 55 +++++++------------ .../SsdtCmn600Generator.c | 16 +++--- .../ConfigurationManagerObjectParser.c | 36 ++++++------ .../Pci/ArmPciConfigSpaceParser.c | 8 +-- .../Pci/ArmPciConfigSpaceParser.h | 8 +-- 6 files changed, 69 insertions(+), 69 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index bbc5d7dc55cd..c5639e050881 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -170,6 +170,21 @@ typedef struct CmArchCommonPciAddressMapInfo { UINT64 AddressSize; } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; +/** A structure that describes the + Generic Interrupts. +*/ +typedef struct CmArchCommonGenericInterrupt { + /// Interrupt number + UINT32 Interrupt; + + /// Flags + /// BIT0: 0: Interrupt is Level triggered + /// 1: Interrupt is Edge triggered + /// BIT1: 0: Interrupt is Active high + /// 1: Interrupt is Active low + UINT32 Flags; +} CM_ARCH_COMMON_GENERIC_INTERRUPT; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 5b318bbb10c3..60ec34a7b31a 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -632,21 +632,6 @@ typedef struct CmArmIdMapping { UINT32 Flags; } CM_ARM_ID_MAPPING; -/** A structure that describes the Arm - Generic Interrupts. -*/ -typedef struct CmArmGenericInterrupt { - /// Interrupt number - UINT32 Interrupt; - - /// Flags - /// BIT0: 0: Interrupt is Level triggered - /// 1: Interrupt is Edge triggered - /// BIT1: 0: Interrupt is Active high - /// 1: Interrupt is Active low - UINT32 Flags; -} CM_ARM_GENERIC_INTERRUPT; - /** A structure that describes the SMMU interrupts for the Platform. Interrupt Interrupt number. @@ -654,7 +639,7 @@ typedef struct CmArmGenericInterrupt { ID: EArmObjSmmuInterruptArray */ -typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; +typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; /** A structure that describes the AML Extended Interrupts. @@ -664,7 +649,7 @@ typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; resource descriptor. See EFI_ACPI_EXTENDED_INTERRUPT_FLAG_xxx in Acpi10.h */ -typedef CM_ARM_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT; +typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT; /** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT @@ -927,14 +912,14 @@ typedef struct CmArmPciInterruptMapInfo { Device-tree bindings are shifted by 1: "INTA=1, INTB=2, INTC=3, INTD=4" */ - UINT8 PciInterrupt; + UINT8 PciInterrupt; /** Interrupt controller interrupt. Cf Devicetree Specification - Release v0.3 s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier" */ - CM_ARM_GENERIC_INTERRUPT IntcInterrupt; + CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; } CM_ARM_PCI_INTERRUPT_MAP_INFO; /** A structure that describes the @@ -1085,10 +1070,10 @@ typedef struct CmArmPccSubspaceType1Info { The Subspace of Type0 contains information that can be re-used in other Subspace types. */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; /// Platform Interrupt. - CM_ARM_GENERIC_INTERRUPT PlatIrq; + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; } CM_ARM_PCC_SUBSPACE_TYPE1_INFO; /** A structure that describes a @@ -1102,13 +1087,13 @@ typedef struct CmArmPccSubspaceType2Info { The Subspace of Type0 contains information that can be re-used in other Subspace types. */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; /// Platform Interrupt. - CM_ARM_GENERIC_INTERRUPT PlatIrq; + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; /// Platform Interrupt Register. - PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; } CM_ARM_PCC_SUBSPACE_TYPE2_INFO; /** A structure that describes a @@ -1122,24 +1107,24 @@ typedef struct CmArmPccSubspaceType3Info { The Subspace of Type0 contains information that can be re-used in other Subspace types. */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; /// Platform Interrupt. - CM_ARM_GENERIC_INTERRUPT PlatIrq; + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; /// Platform Interrupt Register. - PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; /// Command Complete Check Register. /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; /// Command Complete Update Register. - PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg; + PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg; /// Error Status Register. /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; } CM_ARM_PCC_SUBSPACE_TYPE3_INFO; /** A structure that describes a @@ -1163,21 +1148,21 @@ typedef struct CmArmPccSubspaceType5Info { MaximumPeriodicAccessRate doesn't need to be populated for this structure. */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; /// Version. - UINT16 Version; + UINT16 Version; /// Platform Interrupt. - CM_ARM_GENERIC_INTERRUPT PlatIrq; + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; /// Command Complete Check Register. /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; /// Error Status Register. /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; } CM_ARM_PCC_SUBSPACE_TYPE5_INFO; /** An enum describing the Arm Embedded Trace device type. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c index 6118df05497e..3585a53a9d96 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600Generator.c @@ -65,10 +65,10 @@ ValidateCmn600Info ( IN CONST UINT32 Cmn600Count ) { - UINT32 Index; - UINT32 DtcIndex; - CONST CM_ARM_CMN_600_INFO *Cmn600Info; - CONST CM_ARM_GENERIC_INTERRUPT *DtcInterrupt; + UINT32 Index; + UINT32 DtcIndex; + CONST CM_ARM_CMN_600_INFO *Cmn600Info; + CONST CM_ARCH_COMMON_GENERIC_INTERRUPT *DtcInterrupt; if ((Cmn600InfoList == NULL) || (Cmn600Count == 0)) @@ -231,10 +231,10 @@ FixupCmn600Info ( OUT EFI_ACPI_DESCRIPTION_HEADER **Table ) { - EFI_STATUS Status; - EFI_STATUS Status1; - UINT8 Index; - CONST CM_ARM_GENERIC_INTERRUPT *DtcInt; + EFI_STATUS Status; + EFI_STATUS Status1; + UINT8 Index; + CONST CM_ARCH_COMMON_GENERIC_INTERRUPT *DtcInt; EFI_ACPI_DESCRIPTION_HEADER *SsdtCmn600Template; AML_ROOT_NODE_HANDLE RootNodeHandle; diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 2d0e62876606..1fd1edb8eb7f 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -317,7 +317,7 @@ STATIC CONST CM_OBJ_PARSER CmArmIdMappingParser[] = { /** A parser for EArmObjSmmuInterruptArray. */ -STATIC CONST CM_OBJ_PARSER CmArmGenericInterruptParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonGenericInterruptParser[] = { { "Interrupt", 4, "0x%x", NULL }, { "Flags", 4, "0x%x", NULL } }; @@ -452,12 +452,12 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPciAddressMapInfoParser[] = { /** A parser for EArmObjPciInterruptMapInfo. */ STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser[] = { - { "PciBus", 1, "0x%x", NULL }, - { "PciDevice", 1, "0x%x", NULL }, - { "PciInterrupt", 1, "0x%x", NULL }, - { "IntcInterrupt", sizeof (CM_ARM_GENERIC_INTERRUPT), - NULL, NULL, CmArmGenericInterruptParser, - ARRAY_SIZE (CmArmGenericInterruptParser) }, + { "PciBus", 1, "0x%x", NULL }, + { "PciDevice", 1, "0x%x", NULL }, + { "PciInterrupt", 1, "0x%x", NULL }, + { "IntcInterrupt", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT), + NULL, NULL, CmArchCommonGenericInterruptParser, + ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, }; /** A parser for EArmObjRmr. @@ -595,9 +595,9 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArmPccSubspaceType0InfoParser, ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, - { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), - NULL, NULL, CmArmGenericInterruptParser, - ARRAY_SIZE (CmArmGenericInterruptParser) }, + { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT), + NULL, NULL, CmArchCommonGenericInterruptParser, + ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, }; /** A parser for EArmObjPccSubspaceType2Info. @@ -606,8 +606,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArmPccSubspaceType0InfoParser, ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, - { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL, - CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, + { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL,NULL, + CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO), NULL, NULL, CmArmMailboxRegisterInfoParser, ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, @@ -619,8 +619,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArmPccSubspaceType0InfoParser, ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, - { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL, - CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, + { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL,NULL, + CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO), NULL, NULL, CmArmMailboxRegisterInfoParser, ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, @@ -641,9 +641,9 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArmPccSubspaceType0InfoParser, ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, - { "Version", 2, "0x%x",NULL }, - { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL, NULL, - CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, + { "Version", 2, "0x%x",NULL }, + { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL, NULL, + CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, { "CmdCompleteCheckReg", sizeof (PCC_MAILBOX_REGISTER_INFO), NULL, NULL, CmArmMailboxRegisterInfoParser, ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, @@ -705,7 +705,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjPmcg, CmArmPmcgNodeParser), CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), - CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArmGenericInterruptParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index aef0f27a15ae..b20d265a839e 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -702,10 +702,10 @@ FreeParserTable ( } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; typedef struct CmArmPciInterruptMapInfo { - UINT8 PciBus; // {Populated} - UINT8 PciDevice; // {Populated} - UINT8 PciInterrupt; // {Populated} - CM_ARM_GENERIC_INTERRUPT IntcInterrupt; // {Populated} + UINT8 PciBus; // {Populated} + UINT8 PciDevice; // {Populated} + UINT8 PciInterrupt; // {Populated} + CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} } CM_ARM_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h index ba7090fd7e47..33457cd6e95c 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h @@ -110,10 +110,10 @@ typedef struct PciParserTable { } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; typedef struct CmArmPciInterruptMapInfo { - UINT8 PciBus; // {Populated} - UINT8 PciDevice; // {Populated} - UINT8 PciInterrupt; // {Populated} - CM_ARM_GENERIC_INTERRUPT IntcInterrupt; // {Populated} + UINT8 PciBus; // {Populated} + UINT8 PciDevice; // {Populated} + UINT8 PciInterrupt; // {Populated} + CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} } CM_ARM_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, From db55d04d5bada119228ab0be1cc2b9f7a7f95eda Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Fri, 8 Mar 2024 12:06:59 +0000 Subject: [PATCH 23/56] DynamicTablesPkg: Move Pci Interrupt Map Info to Arch Common Move Pci Interrupt Map Info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT PCIe library - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map - FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 38 ++++++++++++ .../Include/ArmNameSpaceObjects.h | 60 ++++--------------- .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 26 ++++---- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 21 ++++--- .../ConfigurationManagerObjectParser.c | 6 +- .../Pci/ArmPciConfigSpaceParser.c | 14 ++--- .../Pci/ArmPciConfigSpaceParser.h | 4 +- DynamicTablesPkg/Readme.md | 24 ++++---- 8 files changed, 96 insertions(+), 97 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index c5639e050881..429505b6509a 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -30,6 +30,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjCmRef, ///< 7 - CM Object Reference EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info + EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -185,6 +186,43 @@ typedef struct CmArchCommonGenericInterrupt { UINT32 Flags; } CM_ARCH_COMMON_GENERIC_INTERRUPT; +/** A structure that describes a PCI Interrupt Map. + + The legacy PCI interrupts used by PCI devices are described by this object. + + Cf Devicetree Specification - Release v0.3 + s2.4.3 "Interrupt Nexus Properties" + + ID: EArchCommonObjPciInterruptMapInfo +*/ +typedef struct CmArchCommonPciInterruptMapInfo { + /// Pci Bus. + /// Value on 8 bits (max 255). + UINT8 PciBus; + + /// Pci Device. + /// Value on 5 bits (max 31). + UINT8 PciDevice; + + /** PCI interrupt + + ACPI bindings are used: + Cf. ACPI 6.4, s6.2.13 _PRT (PCI Routing Table): + "0-INTA, 1-INTB, 2-INTC, 3-INTD" + + Device-tree bindings are shifted by 1: + "INTA=1, INTB=2, INTC=3, INTD=4" + */ + UINT8 PciInterrupt; + + /** Interrupt controller interrupt. + + Cf Devicetree Specification - Release v0.3 + s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier" + */ + CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; +} CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 60ec34a7b31a..5d7c84f51df6 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -56,18 +56,17 @@ typedef enum ArmObjectID { EArmObjGenericInitiatorAffinityInfo, ///< 25 - Generic Initiator Affinity EArmObjCmn600Info, ///< 26 - CMN-600 Info EArmObjLpiInfo, ///< 27 - Lpi Info - EArmObjPciInterruptMapInfo, ///< 28 - Pci Interrupt Map Info - EArmObjRmr, ///< 29 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 30 - Memory Range Descriptor - EArmObjCpcInfo, ///< 31 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 32 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 33 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 34 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 35 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 36 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 37 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 38 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 39 - P-State Dependency (PSD) Info + EArmObjRmr, ///< 28 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 29 - Memory Range Descriptor + EArmObjCpcInfo, ///< 30 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 31 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 32 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 33 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 34 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 35 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 36 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 37 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 38 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -885,43 +884,6 @@ typedef struct CmArmLpiInfo { CHAR8 StateName[16]; } CM_ARM_LPI_INFO; -/** A structure that describes a PCI Interrupt Map. - - The legacy PCI interrupts used by PCI devices are described by this object. - - Cf Devicetree Specification - Release v0.3 - s2.4.3 "Interrupt Nexus Properties" - - ID: EArmObjPciInterruptMapInfo -*/ -typedef struct CmArmPciInterruptMapInfo { - /// Pci Bus. - /// Value on 8 bits (max 255). - UINT8 PciBus; - - /// Pci Device. - /// Value on 5 bits (max 31). - UINT8 PciDevice; - - /** PCI interrupt - - ACPI bindings are used: - Cf. ACPI 6.4, s6.2.13 _PRT (PCI Routing Table): - "0-INTA, 1-INTB, 2-INTC, 3-INTD" - - Device-tree bindings are shifted by 1: - "INTA=1, INTB=2, INTC=3, INTD=4" - */ - UINT8 PciInterrupt; - - /** Interrupt controller interrupt. - - Cf Devicetree Specification - Release v0.3 - s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier" - */ - CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; -} CM_ARM_PCI_INTERRUPT_MAP_INFO; - /** A structure that describes the RMR node for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c index e86f1cb529f0..2b488016e545 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c @@ -45,7 +45,7 @@ - EArchCommonObjCmRef - EArchCommonObjPciConfigSpaceInfo - EArchCommonObjPciAddressMapInfo - - EArmObjPciInterruptMapInfo + - EArchCommonObjPciInterruptMapInfo */ /** This macro expands to a function that retrieves the cross-CM-object- @@ -79,9 +79,9 @@ GET_OBJECT_LIST ( Interrupt Mapping Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPciInterruptMapInfo, - CM_ARM_PCI_INTERRUPT_MAP_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPciInterruptMapInfo, + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO ); /** Initialize the MappingTable. @@ -310,12 +310,12 @@ GeneratePrt ( IN OUT AML_OBJECT_NODE_HANDLE PciNode ) { - EFI_STATUS Status; - INT32 Index; - AML_OBJECT_NODE_HANDLE PrtNode; - CM_ARCH_COMMON_OBJ_REF *RefInfo; - UINT32 RefCount; - CM_ARM_PCI_INTERRUPT_MAP_INFO *IrqMapInfo; + EFI_STATUS Status; + INT32 Index; + AML_OBJECT_NODE_HANDLE PrtNode; + CM_ARCH_COMMON_OBJ_REF *RefInfo; + UINT32 RefCount; + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO *IrqMapInfo; ASSERT (Generator != NULL); ASSERT (CfgMgrProtocol != NULL); @@ -325,7 +325,7 @@ GeneratePrt ( PrtNode = NULL; // Get the array of CM_ARCH_COMMON_OBJ_REF referencing the - // CM_ARM_PCI_INTERRUPT_MAP_INFO objects. + // CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO objects. Status = GetEArchCommonObjCmRef ( CfgMgrProtocol, PciInfo->InterruptMapToken, @@ -352,8 +352,8 @@ GeneratePrt ( } for (Index = 0; Index < RefCount; Index++) { - // Get CM_ARM_PCI_INTERRUPT_MAP_INFO structures one by one. - Status = GetEArmObjPciInterruptMapInfo ( + // Get CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO structures one by one. + Status = GetEArchCommonObjPciInterruptMapInfo ( CfgMgrProtocol, RefInfo[Index].ReferenceToken, &IrqMapInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 0e12b0f8b167..4d660265cfe3 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -171,18 +171,17 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 25 - Generic Initiator Affinity NULL, ///< 26 - CMN-600 Info NULL, ///< 27 - Lpi Info - NULL, ///< 28 - Pci Interrupt Map Info - NULL, ///< 29 - Reserved Memory Range Node - NULL, ///< 30 - Memory Range Descriptor - NULL, ///< 31 - Continuous Performance Control Info - NULL, ///< 32 - Pcc Subspace Type 0 Info + NULL, ///< 28 - Reserved Memory Range Node + NULL, ///< 29 - Memory Range Descriptor + NULL, ///< 30 - Continuous Performance Control Info + NULL, ///< 31 - Pcc Subspace Type 0 Info + NULL, ///< 32 - Pcc Subspace Type 2 Info NULL, ///< 33 - Pcc Subspace Type 2 Info - NULL, ///< 34 - Pcc Subspace Type 2 Info - NULL, ///< 35 - Pcc Subspace Type 3 Info - NULL, ///< 36 - Pcc Subspace Type 4 Info - NULL, ///< 37 - Pcc Subspace Type 5 Info - NULL, ///< 38 - Embedded Trace Extension/Module Info - NULL ///< 39 - P-State Dependency (PSD) Info + NULL, ///< 34 - Pcc Subspace Type 3 Info + NULL, ///< 35 - Pcc Subspace Type 4 Info + NULL, ///< 36 - Pcc Subspace Type 5 Info + NULL, ///< 37 - Embedded Trace Extension/Module Info + NULL ///< 38 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 1fd1edb8eb7f..4ca35d65fca3 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -449,9 +449,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPciAddressMapInfoParser[] = { { "AddressSize", 8, "0x%llx", NULL }, }; -/** A parser for EArmObjPciInterruptMapInfo. +/** A parser for EArchCommonObjPciInterruptMapInfo. */ -STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPciInterruptMapInfoParser[] = { { "PciBus", 1, "0x%x", NULL }, { "PciDevice", 1, "0x%x", NULL }, { "PciInterrupt", 1, "0x%x", NULL }, @@ -680,6 +680,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -714,7 +715,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPciInterruptMapInfo, CmPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index b20d265a839e..b064e62c17bc 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -311,8 +311,8 @@ ParseIrqMap ( UINT32 PciAddressAttr; - CM_ARM_PCI_INTERRUPT_MAP_INFO *PciInterruptMapInfo; - UINT32 BufferSize; + CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO *PciInterruptMapInfo; + UINT32 BufferSize; Data = fdt_getprop (Fdt, HostPciNode, "interrupt-map", &DataSize); if ((Data == NULL) || (DataSize <= 0)) { @@ -455,9 +455,9 @@ ParseIrqMap ( } // for PciInfo->Mapping[PciMappingTableInterrupt].ObjectId = - CREATE_CM_ARM_OBJECT_ID (EArmObjPciInterruptMapInfo); + CREATE_CM_ARCH_COMMON_OBJECT_ID (EArchCommonObjPciInterruptMapInfo); PciInfo->Mapping[PciMappingTableInterrupt].Size = - sizeof (CM_ARM_PCI_INTERRUPT_MAP_INFO) * IrqMapCount; + sizeof (CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO) * IrqMapCount; PciInfo->Mapping[PciMappingTableInterrupt].Data = PciInterruptMapInfo; PciInfo->Mapping[PciMappingTableInterrupt].Count = IrqMapCount; @@ -581,7 +581,7 @@ PciNodeParser ( CmObj of the following types are concerned: - EArchCommonObjPciConfigSpaceInfo - EArchCommonObjPciAddressMapInfo - - EArmObjPciInterruptMapInfo + - EArchCommonObjPciInterruptMapInfo @param [in] FdtParserHandle A handle to the parser instance. @param [in] PciTableInfo PCI_PARSER_TABLE structure containing the @@ -701,12 +701,12 @@ FreeParserTable ( UINT64 AddressSize; // {Populated} } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; - typedef struct CmArmPciInterruptMapInfo { + typedef struct CmArchCommonPciInterruptMapInfo { UINT8 PciBus; // {Populated} UINT8 PciDevice; // {Populated} UINT8 PciInterrupt; // {Populated} CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} - } CM_ARM_PCI_INTERRUPT_MAP_INFO; + } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h index 33457cd6e95c..e68013838515 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h @@ -109,12 +109,12 @@ typedef struct PciParserTable { UINT64 AddressSize; // {Populated} } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO; - typedef struct CmArmPciInterruptMapInfo { + typedef struct CmArchCommonPciInterruptMapInfo { UINT8 PciBus; // {Populated} UINT8 PciDevice; // {Populated} UINT8 PciInterrupt; // {Populated} CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; // {Populated} - } CM_ARM_PCI_INTERRUPT_MAP_INFO; + } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; A parser parses a Device Tree to populate a specific CmObj type. None, one or many CmObj can be created by the parser. diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 0caae7dc4527..558cf69afad6 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -468,18 +468,17 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 25 | Generic Initiator Affinity Info | Move to Arch Common NS | | 26 | CMN 600 Info | | | 27 | Low Power Idle State Info | Move to Arch Common NS | -| 28 | PCI Interrupt Map Info | Move to Arch Common NS | -| 29 | Reserved Memory Range Node | | -| 30 | Memory Range Descriptor | | -| 31 | Continuous Performance Control Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 37 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 38 | Embedded Trace Extension/Module Info | | -| 39 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 28 | Reserved Memory Range Node | | +| 29 | Memory Range Descriptor | | +| 30 | Continuous Performance Control Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 36 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 37 | Embedded Trace Extension/Module Info | | +| 38 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 7 | CM Object Reference | | | 8 | PCI Configuration Space Info | | | 9 | PCI Address Map Info | | +| 10 | PCI Interrupt Map Info | | | `*` | All other values are reserved. | | From f8bbf1776842551fbb92123fcf1851fa6985b328 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 11:00:57 +0000 Subject: [PATCH 24/56] DynamicTablesPkg: Move Mem Affinity Info to Arch Common Move the Memory Affinity Info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SRAT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 19 +++++++ .../Include/ArmNameSpaceObjects.h | 51 ++++++------------- .../Acpi/Arm/AcpiSratLibArm/SratGenerator.c | 14 ++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 31 ++++++----- .../ConfigurationManagerObjectParser.c | 6 +-- DynamicTablesPkg/Readme.md | 34 ++++++------- 6 files changed, 77 insertions(+), 78 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 429505b6509a..86d751bdfaaa 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -31,6 +31,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info + EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -223,6 +224,24 @@ typedef struct CmArchCommonPciInterruptMapInfo { CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt; } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO; +/** A structure that describes the Memory Affinity Structure (Type 1) in SRAT + + ID: EArchCommonObjMemoryAffinityInfo +*/ +typedef struct CmArchCommonMemoryAffinityInfo { + /// The proximity domain to which the "range of memory" belongs. + UINT32 ProximityDomain; + + /// Base Address + UINT64 BaseAddress; + + /// Length + UINT64 Length; + + /// Flags + UINT32 Flags; +} CM_ARCH_COMMON_MEMORY_AFFINITY_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 5d7c84f51df6..7905152114a7 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -50,23 +50,22 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info EArmObjCacheInfo, ///< 21 - Cache Info - EArmObjMemoryAffinityInfo, ///< 22 - Memory Affinity Info - EArmObjDeviceHandleAcpi, ///< 23 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 24 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 25 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 26 - CMN-600 Info - EArmObjLpiInfo, ///< 27 - Lpi Info - EArmObjRmr, ///< 28 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 29 - Memory Range Descriptor - EArmObjCpcInfo, ///< 30 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 31 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 32 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 33 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 34 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 35 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 36 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 37 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 38 - P-State Dependency (PSD) Info + EArmObjDeviceHandleAcpi, ///< 22 - Device Handle Acpi + EArmObjDeviceHandlePci, ///< 23 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 24 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 25 - CMN-600 Info + EArmObjLpiInfo, ///< 26 - Lpi Info + EArmObjRmr, ///< 27 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 28 - Memory Range Descriptor + EArmObjCpcInfo, ///< 29 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 30 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 31 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 32 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 33 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 34 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 35 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 36 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 37 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -721,24 +720,6 @@ typedef struct CmArmCacheInfo { UINT32 CacheId; } CM_ARM_CACHE_INFO; -/** A structure that describes the Memory Affinity Structure (Type 1) in SRAT - - ID: EArmObjMemoryAffinityInfo -*/ -typedef struct CmArmMemoryAffinityInfo { - /// The proximity domain to which the "range of memory" belongs. - UINT32 ProximityDomain; - - /// Base Address - UINT64 BaseAddress; - - /// Length - UINT64 Length; - - /// Flags - UINT32 Flags; -} CM_ARM_MEMORY_AFFINITY_INFO; - /** A structure that describes the ACPI Device Handle (Type 0) in the Generic Initiator Affinity structure in SRAT diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c index 431995ed3884..3ba2448f2384 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c @@ -32,7 +32,7 @@ The following Configuration Manager Object(s) are used by this Generator: - EArmObjGicCInfo (REQUIRED) - EArmObjGicItsInfo (OPTIONAL) - - EArmObjMemoryAffinityInfo (OPTIONAL) + - EArchCommonObjMemoryAffinityInfo (OPTIONAL) - EArmObjGenericInitiatorAffinityInfo (OPTIONAL) - EArmObjDeviceHandleAcpi (OPTIONAL) - EArmObjDeviceHandlePci (OPTIONAL) @@ -62,9 +62,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryAffinityInfo, - CM_ARM_MEMORY_AFFINITY_INFO + EObjNameSpaceArchCommon, + EArchCommonObjMemoryAffinityInfo, + CM_ARCH_COMMON_MEMORY_AFFINITY_INFO ); /** @@ -235,7 +235,7 @@ AddMemoryAffinity ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat, IN CONST UINT32 MemAffOffset, - IN CONST CM_ARM_MEMORY_AFFINITY_INFO *MemAffInfo, + IN CONST CM_ARCH_COMMON_MEMORY_AFFINITY_INFO *MemAffInfo, IN UINT32 MemAffCount ) { @@ -467,7 +467,7 @@ BuildSratTable ( CM_ARM_GICC_INFO *GicCInfo; CM_ARM_GIC_ITS_INFO *GicItsInfo; - CM_ARM_MEMORY_AFFINITY_INFO *MemAffInfo; + CM_ARCH_COMMON_MEMORY_AFFINITY_INFO *MemAffInfo; CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO *GenInitiatorAffInfo; EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *Srat; @@ -537,7 +537,7 @@ BuildSratTable ( goto error_handler; } - Status = GetEArmObjMemoryAffinityInfo ( + Status = GetEArchCommonObjMemoryAffinityInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &MemAffInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 4d660265cfe3..654686a0125a 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -165,23 +165,22 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 19 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info - NULL, ///< 22 - Memory Affinity Info - NULL, ///< 23 - Device Handle Acpi - NULL, ///< 24 - Device Handle Pci - NULL, ///< 25 - Generic Initiator Affinity - NULL, ///< 26 - CMN-600 Info - NULL, ///< 27 - Lpi Info - NULL, ///< 28 - Reserved Memory Range Node - NULL, ///< 29 - Memory Range Descriptor - NULL, ///< 30 - Continuous Performance Control Info - NULL, ///< 31 - Pcc Subspace Type 0 Info + NULL, ///< 22 - Device Handle Acpi + NULL, ///< 23 - Device Handle Pci + NULL, ///< 24 - Generic Initiator Affinity + NULL, ///< 25 - CMN-600 Info + NULL, ///< 26 - Lpi Info + NULL, ///< 27 - Reserved Memory Range Node + NULL, ///< 28 - Memory Range Descriptor + NULL, ///< 29 - Continuous Performance Control Info + NULL, ///< 30 - Pcc Subspace Type 0 Info + NULL, ///< 31 - Pcc Subspace Type 2 Info NULL, ///< 32 - Pcc Subspace Type 2 Info - NULL, ///< 33 - Pcc Subspace Type 2 Info - NULL, ///< 34 - Pcc Subspace Type 3 Info - NULL, ///< 35 - Pcc Subspace Type 4 Info - NULL, ///< 36 - Pcc Subspace Type 5 Info - NULL, ///< 37 - Embedded Trace Extension/Module Info - NULL ///< 38 - P-State Dependency (PSD) Info + NULL, ///< 33 - Pcc Subspace Type 3 Info + NULL, ///< 34 - Pcc Subspace Type 4 Info + NULL, ///< 35 - Pcc Subspace Type 5 Info + NULL, ///< 36 - Embedded Trace Extension/Module Info + NULL ///< 37 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 4ca35d65fca3..b2fe74cd4f9b 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -356,9 +356,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonObjRefParser[] = { { "ReferenceToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL } }; -/** A parser for EArmObjMemoryAffinityInfo. +/** A parser for EArchCommonObjMemoryAffinityInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmMemoryAffinityInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonMemoryAffinityInfoParser[] = { { "ProximityDomain", 4, "0x%x", NULL }, { "BaseAddress", 8, "0x%llx", NULL }, { "Length", 8, "0x%llx", NULL }, @@ -681,6 +681,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -709,7 +710,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjMemoryAffinityInfo, CmArmMemoryAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 558cf69afad6..55311fd4cef5 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -462,23 +462,22 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 19 | SMMU Interrupt Array | | | 20 | Processor Hierarchy Info | Move to Arch Common NS | | 21 | Cache Info | Move to Arch Common NS | -| 22 | Memory Affinity Info | Move to Arch Common NS | -| 23 | Device Handle Acpi | Move to Arch Common NS | -| 24 | Device Handle PCI | Move to Arch Common NS | -| 25 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 26 | CMN 600 Info | | -| 27 | Low Power Idle State Info | Move to Arch Common NS | -| 28 | Reserved Memory Range Node | | -| 29 | Memory Range Descriptor | | -| 30 | Continuous Performance Control Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 36 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 37 | Embedded Trace Extension/Module Info | | -| 38 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 22 | Device Handle Acpi | Move to Arch Common NS | +| 23 | Device Handle PCI | Move to Arch Common NS | +| 24 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 25 | CMN 600 Info | | +| 26 | Low Power Idle State Info | Move to Arch Common NS | +| 27 | Reserved Memory Range Node | | +| 28 | Memory Range Descriptor | | +| 29 | Continuous Performance Control Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 35 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 36 | Embedded Trace Extension/Module Info | | +| 37 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 8 | PCI Configuration Space Info | | | 9 | PCI Address Map Info | | | 10 | PCI Interrupt Map Info | | +| 11 | Memory Affinity Info | | | `*` | All other values are reserved. | | From 38320ab0263b89acf3efb5d257605eba68ed5f5c Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 11:08:56 +0000 Subject: [PATCH 25/56] DynamicTablesPkg: Move ACPI device Handle object to Arch Common Move the ACPI device Handle object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SRAT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 14 ++++++ .../Include/ArmNameSpaceObjects.h | 44 +++++++------------ .../Acpi/Arm/AcpiSratLibArm/SratGenerator.c | 12 ++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 29 ++++++------ .../ConfigurationManagerObjectParser.c | 6 +-- DynamicTablesPkg/Readme.md | 32 +++++++------- 6 files changed, 68 insertions(+), 69 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 86d751bdfaaa..0b450e8f99c2 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -32,6 +32,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info + EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -242,6 +243,19 @@ typedef struct CmArchCommonMemoryAffinityInfo { UINT32 Flags; } CM_ARCH_COMMON_MEMORY_AFFINITY_INFO; +/** A structure that describes the ACPI Device Handle (Type 0) in the + Generic Initiator Affinity structure in SRAT + + ID: EArchCommonObjDeviceHandleAcpi +*/ +typedef struct CmArchCommonDeviceHandleAcpi { + /// Hardware ID + UINT64 Hid; + + /// Unique Id + UINT32 Uid; +} CM_ARCH_COMMON_DEVICE_HANDLE_ACPI; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 7905152114a7..64c5f2677246 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -50,22 +50,21 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info EArmObjCacheInfo, ///< 21 - Cache Info - EArmObjDeviceHandleAcpi, ///< 22 - Device Handle Acpi - EArmObjDeviceHandlePci, ///< 23 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 24 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 25 - CMN-600 Info - EArmObjLpiInfo, ///< 26 - Lpi Info - EArmObjRmr, ///< 27 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 28 - Memory Range Descriptor - EArmObjCpcInfo, ///< 29 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 30 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 31 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 32 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 33 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 34 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 35 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 36 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 37 - P-State Dependency (PSD) Info + EArmObjDeviceHandlePci, ///< 22 - Device Handle Pci + EArmObjGenericInitiatorAffinityInfo, ///< 23 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 24 - CMN-600 Info + EArmObjLpiInfo, ///< 25 - Lpi Info + EArmObjRmr, ///< 26 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 27 - Memory Range Descriptor + EArmObjCpcInfo, ///< 28 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 29 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 30 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 31 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 32 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 33 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 34 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 35 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 36 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -720,19 +719,6 @@ typedef struct CmArmCacheInfo { UINT32 CacheId; } CM_ARM_CACHE_INFO; -/** A structure that describes the ACPI Device Handle (Type 0) in the - Generic Initiator Affinity structure in SRAT - - ID: EArmObjDeviceHandleAcpi -*/ -typedef struct CmArmDeviceHandleAcpi { - /// Hardware ID - UINT64 Hid; - - /// Unique Id - UINT32 Uid; -} CM_ARM_DEVICE_HANDLE_ACPI; - /** A structure that describes the PCI Device Handle (Type 1) in the Generic Initiator Affinity structure in SRAT diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c index 3ba2448f2384..c65a28cd142a 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c @@ -34,7 +34,7 @@ - EArmObjGicItsInfo (OPTIONAL) - EArchCommonObjMemoryAffinityInfo (OPTIONAL) - EArmObjGenericInitiatorAffinityInfo (OPTIONAL) - - EArmObjDeviceHandleAcpi (OPTIONAL) + - EArchCommonObjDeviceHandleAcpi (OPTIONAL) - EArmObjDeviceHandlePci (OPTIONAL) */ @@ -82,9 +82,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjDeviceHandleAcpi, - CM_ARM_DEVICE_HANDLE_ACPI + EObjNameSpaceArchCommon, + EArchCommonObjDeviceHandleAcpi, + CM_ARCH_COMMON_DEVICE_HANDLE_ACPI ); /** @@ -301,7 +301,7 @@ AddGenericInitiatorAffinity ( { EFI_STATUS Status; EFI_ACPI_6_3_GENERIC_INITIATOR_AFFINITY_STRUCTURE *GenInitAff; - CM_ARM_DEVICE_HANDLE_ACPI *DeviceHandleAcpi; + CM_ARCH_COMMON_DEVICE_HANDLE_ACPI *DeviceHandleAcpi; CM_ARM_DEVICE_HANDLE_PCI *DeviceHandlePci; UINT32 DeviceHandleCount; @@ -331,7 +331,7 @@ AddGenericInitiatorAffinity ( } if (GenInitAffInfo->DeviceHandleType == EFI_ACPI_6_3_ACPI_DEVICE_HANDLE) { - Status = GetEArmObjDeviceHandleAcpi ( + Status = GetEArchCommonObjDeviceHandleAcpi ( CfgMgrProtocol, GenInitAffInfo->DeviceHandleToken, &DeviceHandleAcpi, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 654686a0125a..43aae423814f 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -165,22 +165,21 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 19 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info - NULL, ///< 22 - Device Handle Acpi - NULL, ///< 23 - Device Handle Pci - NULL, ///< 24 - Generic Initiator Affinity - NULL, ///< 25 - CMN-600 Info - NULL, ///< 26 - Lpi Info - NULL, ///< 27 - Reserved Memory Range Node - NULL, ///< 28 - Memory Range Descriptor - NULL, ///< 29 - Continuous Performance Control Info - NULL, ///< 30 - Pcc Subspace Type 0 Info + NULL, ///< 22 - Device Handle Pci + NULL, ///< 23 - Generic Initiator Affinity + NULL, ///< 24 - CMN-600 Info + NULL, ///< 25 - Lpi Info + NULL, ///< 26 - Reserved Memory Range Node + NULL, ///< 27 - Memory Range Descriptor + NULL, ///< 28 - Continuous Performance Control Info + NULL, ///< 29 - Pcc Subspace Type 0 Info + NULL, ///< 30 - Pcc Subspace Type 2 Info NULL, ///< 31 - Pcc Subspace Type 2 Info - NULL, ///< 32 - Pcc Subspace Type 2 Info - NULL, ///< 33 - Pcc Subspace Type 3 Info - NULL, ///< 34 - Pcc Subspace Type 4 Info - NULL, ///< 35 - Pcc Subspace Type 5 Info - NULL, ///< 36 - Embedded Trace Extension/Module Info - NULL ///< 37 - P-State Dependency (PSD) Info + NULL, ///< 32 - Pcc Subspace Type 3 Info + NULL, ///< 33 - Pcc Subspace Type 4 Info + NULL, ///< 34 - Pcc Subspace Type 5 Info + NULL, ///< 35 - Embedded Trace Extension/Module Info + NULL ///< 36 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index b2fe74cd4f9b..9326ea639351 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -365,9 +365,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonMemoryAffinityInfoParser[] = { { "Flags", 4, "0x%x", NULL } }; -/** A parser for EArmObjDeviceHandleAcpi. +/** A parser for EArchCommonObjDeviceHandleAcpi. */ -STATIC CONST CM_OBJ_PARSER CmArmDeviceHandleAcpiParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonDeviceHandleAcpiParser[] = { { "Hid", 8, "0x%llx", NULL }, { "Uid", 4, "0x%x", NULL } }; @@ -682,6 +682,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -710,7 +711,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjDeviceHandleAcpi, CmArmDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 55311fd4cef5..f82c37f4afeb 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -462,22 +462,21 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 19 | SMMU Interrupt Array | | | 20 | Processor Hierarchy Info | Move to Arch Common NS | | 21 | Cache Info | Move to Arch Common NS | -| 22 | Device Handle Acpi | Move to Arch Common NS | -| 23 | Device Handle PCI | Move to Arch Common NS | -| 24 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 25 | CMN 600 Info | | -| 26 | Low Power Idle State Info | Move to Arch Common NS | -| 27 | Reserved Memory Range Node | | -| 28 | Memory Range Descriptor | | -| 29 | Continuous Performance Control Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 35 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 36 | Embedded Trace Extension/Module Info | | -| 37 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 22 | Device Handle PCI | Move to Arch Common NS | +| 23 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 24 | CMN 600 Info | | +| 25 | Low Power Idle State Info | Move to Arch Common NS | +| 26 | Reserved Memory Range Node | | +| 27 | Memory Range Descriptor | | +| 28 | Continuous Performance Control Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 34 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 35 | Embedded Trace Extension/Module Info | | +| 36 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 9 | PCI Address Map Info | | | 10 | PCI Interrupt Map Info | | | 11 | Memory Affinity Info | | +| 12 | Device Handle Acpi | | | `*` | All other values are reserved. | | From 97686c1c620de8b06e0b0a32654f7aa6df206730 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 11:14:03 +0000 Subject: [PATCH 26/56] DynamicTablesPkg: Move PCI device Handle object to Arch Common Move the PCI device Handle object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SRAT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 20 ++++++++ .../Include/ArmNameSpaceObjects.h | 48 ++++++------------- .../Acpi/Arm/AcpiSratLibArm/SratGenerator.c | 14 +++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 27 +++++------ .../ConfigurationManagerObjectParser.c | 6 +-- DynamicTablesPkg/Readme.md | 30 ++++++------ 6 files changed, 72 insertions(+), 73 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 0b450e8f99c2..230d0bc334c0 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -33,6 +33,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi + EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -256,6 +257,25 @@ typedef struct CmArchCommonDeviceHandleAcpi { UINT32 Uid; } CM_ARCH_COMMON_DEVICE_HANDLE_ACPI; +/** A structure that describes the PCI Device Handle (Type 1) in the + Generic Initiator Affinity structure in SRAT + + ID: EArchCommonObjDeviceHandlePci +*/ +typedef struct CmArchCommonDeviceHandlePci { + /// PCI Segment Number + UINT16 SegmentNumber; + + /// PCI Bus Number - Max 256 busses (Bits 15:8 of BDF) + UINT8 BusNumber; + + /// PCI Device Number - Max 32 devices (Bits 7:3 of BDF) + UINT8 DeviceNumber; + + /// PCI Function Number - Max 8 functions (Bits 2:0 of BDF) + UINT8 FunctionNumber; +} CM_ARCH_COMMON_DEVICE_HANDLE_PCI; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 64c5f2677246..05691e6fcf69 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -50,21 +50,20 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info EArmObjCacheInfo, ///< 21 - Cache Info - EArmObjDeviceHandlePci, ///< 22 - Device Handle Pci - EArmObjGenericInitiatorAffinityInfo, ///< 23 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 24 - CMN-600 Info - EArmObjLpiInfo, ///< 25 - Lpi Info - EArmObjRmr, ///< 26 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 27 - Memory Range Descriptor - EArmObjCpcInfo, ///< 28 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 29 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 30 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 31 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 32 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 33 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 34 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 35 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 36 - P-State Dependency (PSD) Info + EArmObjGenericInitiatorAffinityInfo, ///< 22 - Generic Initiator Affinity + EArmObjCmn600Info, ///< 23 - CMN-600 Info + EArmObjLpiInfo, ///< 24 - Lpi Info + EArmObjRmr, ///< 25 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 26 - Memory Range Descriptor + EArmObjCpcInfo, ///< 27 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 28 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 29 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 30 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 31 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 32 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 33 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 34 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 35 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -719,25 +718,6 @@ typedef struct CmArmCacheInfo { UINT32 CacheId; } CM_ARM_CACHE_INFO; -/** A structure that describes the PCI Device Handle (Type 1) in the - Generic Initiator Affinity structure in SRAT - - ID: EArmObjDeviceHandlePci -*/ -typedef struct CmArmDeviceHandlePci { - /// PCI Segment Number - UINT16 SegmentNumber; - - /// PCI Bus Number - Max 256 busses (Bits 15:8 of BDF) - UINT8 BusNumber; - - /// PCI Device Number - Max 32 devices (Bits 7:3 of BDF) - UINT8 DeviceNumber; - - /// PCI Function Number - Max 8 functions (Bits 2:0 of BDF) - UINT8 FunctionNumber; -} CM_ARM_DEVICE_HANDLE_PCI; - /** A structure that describes the Generic Initiator Affinity structure in SRAT ID: EArmObjGenericInitiatorAffinityInfo diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c index c65a28cd142a..66fefc80f5f6 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c @@ -35,7 +35,7 @@ - EArchCommonObjMemoryAffinityInfo (OPTIONAL) - EArmObjGenericInitiatorAffinityInfo (OPTIONAL) - EArchCommonObjDeviceHandleAcpi (OPTIONAL) - - EArmObjDeviceHandlePci (OPTIONAL) + - EArchCommonObjDeviceHandlePci (OPTIONAL) */ /** This macro expands to a function that retrieves the GIC @@ -92,9 +92,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjDeviceHandlePci, - CM_ARM_DEVICE_HANDLE_PCI + EObjNameSpaceArchCommon, + EArchCommonObjDeviceHandlePci, + CM_ARCH_COMMON_DEVICE_HANDLE_PCI ); /** Return the PCI Device information in BDF format @@ -110,7 +110,7 @@ GET_OBJECT_LIST ( STATIC UINT16 GetBdf ( - IN CONST CM_ARM_DEVICE_HANDLE_PCI *DeviceHandlePci + IN CONST CM_ARCH_COMMON_DEVICE_HANDLE_PCI *DeviceHandlePci ) { UINT16 Bdf; @@ -302,7 +302,7 @@ AddGenericInitiatorAffinity ( EFI_STATUS Status; EFI_ACPI_6_3_GENERIC_INITIATOR_AFFINITY_STRUCTURE *GenInitAff; CM_ARCH_COMMON_DEVICE_HANDLE_ACPI *DeviceHandleAcpi; - CM_ARM_DEVICE_HANDLE_PCI *DeviceHandlePci; + CM_ARCH_COMMON_DEVICE_HANDLE_PCI *DeviceHandlePci; UINT32 DeviceHandleCount; ASSERT (Srat != NULL); @@ -362,7 +362,7 @@ AddGenericInitiatorAffinity ( } else if (GenInitAffInfo->DeviceHandleType == EFI_ACPI_6_3_PCI_DEVICE_HANDLE) { - Status = GetEArmObjDeviceHandlePci ( + Status = GetEArchCommonObjDeviceHandlePci ( CfgMgrProtocol, GenInitAffInfo->DeviceHandleToken, &DeviceHandlePci, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 43aae423814f..d5ee9317e693 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -165,21 +165,20 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 19 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info - NULL, ///< 22 - Device Handle Pci - NULL, ///< 23 - Generic Initiator Affinity - NULL, ///< 24 - CMN-600 Info - NULL, ///< 25 - Lpi Info - NULL, ///< 26 - Reserved Memory Range Node - NULL, ///< 27 - Memory Range Descriptor - NULL, ///< 28 - Continuous Performance Control Info - NULL, ///< 29 - Pcc Subspace Type 0 Info + NULL, ///< 22 - Generic Initiator Affinity + NULL, ///< 23 - CMN-600 Info + NULL, ///< 24 - Lpi Info + NULL, ///< 25 - Reserved Memory Range Node + NULL, ///< 26 - Memory Range Descriptor + NULL, ///< 27 - Continuous Performance Control Info + NULL, ///< 28 - Pcc Subspace Type 0 Info + NULL, ///< 29 - Pcc Subspace Type 2 Info NULL, ///< 30 - Pcc Subspace Type 2 Info - NULL, ///< 31 - Pcc Subspace Type 2 Info - NULL, ///< 32 - Pcc Subspace Type 3 Info - NULL, ///< 33 - Pcc Subspace Type 4 Info - NULL, ///< 34 - Pcc Subspace Type 5 Info - NULL, ///< 35 - Embedded Trace Extension/Module Info - NULL ///< 36 - P-State Dependency (PSD) Info + NULL, ///< 31 - Pcc Subspace Type 3 Info + NULL, ///< 32 - Pcc Subspace Type 4 Info + NULL, ///< 33 - Pcc Subspace Type 5 Info + NULL, ///< 34 - Embedded Trace Extension/Module Info + NULL ///< 35 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 9326ea639351..4b4965dfb00f 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -372,9 +372,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonDeviceHandleAcpiParser[] = { { "Uid", 4, "0x%x", NULL } }; -/** A parser for EArmObjDeviceHandlePci. +/** A parser for EArchCommonObjDeviceHandlePci. */ -STATIC CONST CM_OBJ_PARSER CmArmDeviceHandlePciParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonDeviceHandlePciParser[] = { { "SegmentNumber", 2, "0x%x", NULL }, { "BusNumber", 1, "0x%x", NULL }, { "DeviceNumber", 1, "0x%x", NULL }, @@ -683,6 +683,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -711,7 +712,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjDeviceHandlePci, CmArmDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index f82c37f4afeb..9c7738983df5 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -462,21 +462,20 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 19 | SMMU Interrupt Array | | | 20 | Processor Hierarchy Info | Move to Arch Common NS | | 21 | Cache Info | Move to Arch Common NS | -| 22 | Device Handle PCI | Move to Arch Common NS | -| 23 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 24 | CMN 600 Info | | -| 25 | Low Power Idle State Info | Move to Arch Common NS | -| 26 | Reserved Memory Range Node | | -| 27 | Memory Range Descriptor | | -| 28 | Continuous Performance Control Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 34 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 35 | Embedded Trace Extension/Module Info | | -| 36 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 22 | Generic Initiator Affinity Info | Move to Arch Common NS | +| 23 | CMN 600 Info | | +| 24 | Low Power Idle State Info | Move to Arch Common NS | +| 25 | Reserved Memory Range Node | | +| 26 | Memory Range Descriptor | | +| 27 | Continuous Performance Control Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 33 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 34 | Embedded Trace Extension/Module Info | | +| 35 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 10 | PCI Interrupt Map Info | | | 11 | Memory Affinity Info | | | 12 | Device Handle Acpi | | +| 13 | Device Handle PCI | | | `*` | All other values are reserved. | | From 825ca0a66b85596967422d1a08be4039b0b966b7 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 11:19:16 +0000 Subject: [PATCH 27/56] DynamicTablesPkg: Move Generic Initiator affinity info to Arch Common Move the Generic Initiator affinity info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SRAT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 19 ++++ .../Include/ArmNameSpaceObjects.h | 45 +++----- .../Acpi/Arm/AcpiSratLibArm/SratGenerator.c | 20 ++-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 25 +++-- .../ConfigurationManagerObjectParser.c | 100 +++++++++--------- DynamicTablesPkg/Readme.md | 28 ++--- 6 files changed, 118 insertions(+), 119 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 230d0bc334c0..b70c327d46e4 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -34,6 +34,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci + EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -276,6 +277,24 @@ typedef struct CmArchCommonDeviceHandlePci { UINT8 FunctionNumber; } CM_ARCH_COMMON_DEVICE_HANDLE_PCI; +/** A structure that describes the Generic Initiator Affinity structure in SRAT + + ID: EArchCommonObjGenericInitiatorAffinityInfo +*/ +typedef struct CmArchCommonGenericInitiatorAffinityInfo { + /// The proximity domain to which the generic initiator belongs. + UINT32 ProximityDomain; + + /// Flags + UINT32 Flags; + + /// Device Handle Type + UINT8 DeviceHandleType; + + /// Reference Token for the Device Handle + CM_OBJECT_TOKEN DeviceHandleToken; +} CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 05691e6fcf69..ddf886a53db4 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -50,20 +50,19 @@ typedef enum ArmObjectID { EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info EArmObjCacheInfo, ///< 21 - Cache Info - EArmObjGenericInitiatorAffinityInfo, ///< 22 - Generic Initiator Affinity - EArmObjCmn600Info, ///< 23 - CMN-600 Info - EArmObjLpiInfo, ///< 24 - Lpi Info - EArmObjRmr, ///< 25 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 26 - Memory Range Descriptor - EArmObjCpcInfo, ///< 27 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 28 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 29 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 30 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 31 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 32 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 33 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 34 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 35 - P-State Dependency (PSD) Info + EArmObjCmn600Info, ///< 22 - CMN-600 Info + EArmObjLpiInfo, ///< 23 - Lpi Info + EArmObjRmr, ///< 24 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 25 - Memory Range Descriptor + EArmObjCpcInfo, ///< 26 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 27 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 28 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 29 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 30 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 31 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 32 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 33 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 34 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -718,24 +717,6 @@ typedef struct CmArmCacheInfo { UINT32 CacheId; } CM_ARM_CACHE_INFO; -/** A structure that describes the Generic Initiator Affinity structure in SRAT - - ID: EArmObjGenericInitiatorAffinityInfo -*/ -typedef struct CmArmGenericInitiatorAffinityInfo { - /// The proximity domain to which the generic initiator belongs. - UINT32 ProximityDomain; - - /// Flags - UINT32 Flags; - - /// Device Handle Type - UINT8 DeviceHandleType; - - /// Reference Token for the Device Handle - CM_OBJECT_TOKEN DeviceHandleToken; -} CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO; - /** A structure that describes the CMN-600 hardware. ID: EArmObjCmn600Info diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c index 66fefc80f5f6..48c9970a7151 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c @@ -33,7 +33,7 @@ - EArmObjGicCInfo (REQUIRED) - EArmObjGicItsInfo (OPTIONAL) - EArchCommonObjMemoryAffinityInfo (OPTIONAL) - - EArmObjGenericInitiatorAffinityInfo (OPTIONAL) + - EArchCommonObjGenericInitiatorAffinityInfo (OPTIONAL) - EArchCommonObjDeviceHandleAcpi (OPTIONAL) - EArchCommonObjDeviceHandlePci (OPTIONAL) */ @@ -72,9 +72,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjGenericInitiatorAffinityInfo, - CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO + EObjNameSpaceArchCommon, + EArchCommonObjGenericInitiatorAffinityInfo, + CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO ); /** @@ -295,7 +295,7 @@ AddGenericInitiatorAffinity ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat, IN CONST UINT32 GenInitAffOff, - IN CONST CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO *GenInitAffInfo, + IN CONST CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO *GenInitAffInfo, IN UINT32 GenInitAffCount ) { @@ -465,10 +465,10 @@ BuildSratTable ( UINT32 MemAffOffset; UINT32 GenInitiatorAffOffset; - CM_ARM_GICC_INFO *GicCInfo; - CM_ARM_GIC_ITS_INFO *GicItsInfo; - CM_ARCH_COMMON_MEMORY_AFFINITY_INFO *MemAffInfo; - CM_ARM_GENERIC_INITIATOR_AFFINITY_INFO *GenInitiatorAffInfo; + CM_ARM_GICC_INFO *GicCInfo; + CM_ARM_GIC_ITS_INFO *GicItsInfo; + CM_ARCH_COMMON_MEMORY_AFFINITY_INFO *MemAffInfo; + CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO *GenInitiatorAffInfo; EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *Srat; @@ -552,7 +552,7 @@ BuildSratTable ( goto error_handler; } - Status = GetEArmObjGenericInitiatorAffinityInfo ( + Status = GetEArchCommonObjGenericInitiatorAffinityInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &GenInitiatorAffInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index d5ee9317e693..5f3e9f5fdcb5 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -165,20 +165,19 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 19 - SMMU Interrupt Array TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info - NULL, ///< 22 - Generic Initiator Affinity - NULL, ///< 23 - CMN-600 Info - NULL, ///< 24 - Lpi Info - NULL, ///< 25 - Reserved Memory Range Node - NULL, ///< 26 - Memory Range Descriptor - NULL, ///< 27 - Continuous Performance Control Info - NULL, ///< 28 - Pcc Subspace Type 0 Info + NULL, ///< 22 - CMN-600 Info + NULL, ///< 23 - Lpi Info + NULL, ///< 24 - Reserved Memory Range Node + NULL, ///< 25 - Memory Range Descriptor + NULL, ///< 26 - Continuous Performance Control Info + NULL, ///< 27 - Pcc Subspace Type 0 Info + NULL, ///< 28 - Pcc Subspace Type 2 Info NULL, ///< 29 - Pcc Subspace Type 2 Info - NULL, ///< 30 - Pcc Subspace Type 2 Info - NULL, ///< 31 - Pcc Subspace Type 3 Info - NULL, ///< 32 - Pcc Subspace Type 4 Info - NULL, ///< 33 - Pcc Subspace Type 5 Info - NULL, ///< 34 - Embedded Trace Extension/Module Info - NULL ///< 35 - P-State Dependency (PSD) Info + NULL, ///< 30 - Pcc Subspace Type 3 Info + NULL, ///< 31 - Pcc Subspace Type 4 Info + NULL, ///< 32 - Pcc Subspace Type 5 Info + NULL, ///< 33 - Embedded Trace Extension/Module Info + NULL ///< 34 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 4b4965dfb00f..732454da8f93 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -381,9 +381,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonDeviceHandlePciParser[] = { { "FunctionNumber", 1, "0x%x", NULL } }; -/** A parser for EArmObjGenericInitiatorAffinityInfo. +/** A parser for EArchCommonObjGenericInitiatorAffinityInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmGenericInitiatorAffinityInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonGenericInitiatorAffinityInfoParser[] = { { "ProximityDomain", 4, "0x%x", NULL }, { "Flags", 4, "0x%x", NULL }, { "DeviceHandleType", 1, "0x%x", NULL }, @@ -671,19 +671,20 @@ STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { */ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjReserved), - CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo,CmArchCommonPowerManagementProfileInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), - CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPowerManagementProfileInfo, CmArchCommonPowerManagementProfileInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjConsolePortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjSerialDebugPortInfo, CmArchCommonSerialPortInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjHypervisorVendorIdentity, CmArchCommonHypervisorVendorIdentityParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjFixedFeatureFlags, CmArchCommonFixedFeatureFlagsParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCmRef, CmArchCommonObjRefParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciConfigSpaceInfo, CmArchCommonPciConfigSpaceInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciAddressMapInfo, CmArchCommonPciAddressMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPciInterruptMapInfo, CmArchCommonPciInterruptMapInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjMemoryAffinityInfo, CmArchCommonMemoryAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo,CmArchCommonGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -691,41 +692,40 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { */ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT_RESERVED (EArmObjReserved), - CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGicRedistributorInfo, CmArmGicRedistInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGicItsInfo, CmArmGicItsInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGenericTimerInfo, CmArmGenericTimerInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo, CmArmGenericWatchdogInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), - CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), - CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser), - CM_PARSER_ADD_OBJECT (EArmObjSmmuV1SmmuV2, CmArmSmmuV1SmmuV2NodeParser), - CM_PARSER_ADD_OBJECT (EArmObjSmmuV3, CmArmSmmuV3NodeParser), - CM_PARSER_ADD_OBJECT (EArmObjPmcg, CmArmPmcgNodeParser), - CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), - CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), - CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), - CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjGenericInitiatorAffinityInfo,CmArmGenericInitiatorAffinityInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), - CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjBootArchInfo, CmArmBootArchInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicCInfo, CmArmGicCInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicDInfo, CmArmGicDInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicMsiFrameInfo, CmArmGicMsiFrameInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicRedistributorInfo, CmArmGicRedistInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGicItsInfo, CmArmGicItsInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGenericTimerInfo, CmArmGenericTimerInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPlatformGTBlockInfo, CmArmGTBlockInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjGTBlockTimerFrameInfo, CmArmGTBlockTimerFrameInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPlatformGenericWatchdogInfo,CmArmGenericWatchdogInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjItsGroup, CmArmItsGroupNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjNamedComponent, CmArmNamedComponentNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjRootComplex, CmArmRootComplexNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuV1SmmuV2, CmArmSmmuV1SmmuV2NodeParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuV3, CmArmSmmuV3NodeParser), + CM_PARSER_ADD_OBJECT (EArmObjPmcg, CmArmPmcgNodeParser), + CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), + CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), + CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), + CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), + CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), + CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax) }; diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 9c7738983df5..303f85986566 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -462,20 +462,19 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 19 | SMMU Interrupt Array | | | 20 | Processor Hierarchy Info | Move to Arch Common NS | | 21 | Cache Info | Move to Arch Common NS | -| 22 | Generic Initiator Affinity Info | Move to Arch Common NS | -| 23 | CMN 600 Info | | -| 24 | Low Power Idle State Info | Move to Arch Common NS | -| 25 | Reserved Memory Range Node | | -| 26 | Memory Range Descriptor | | -| 27 | Continuous Performance Control Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 33 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 34 | Embedded Trace Extension/Module Info | | -| 35 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 22 | CMN 600 Info | | +| 23 | Low Power Idle State Info | Move to Arch Common NS | +| 24 | Reserved Memory Range Node | | +| 25 | Memory Range Descriptor | | +| 26 | Continuous Performance Control Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 32 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 33 | Embedded Trace Extension/Module Info | | +| 34 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 11 | Memory Affinity Info | | | 12 | Device Handle Acpi | | | 13 | Device Handle PCI | | +| 14 | Generic Initiator Affinity Info | | | `*` | All other values are reserved. | | From 80d18cb70c2f7d0799458d1b0ead762545ef1139 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 12:59:07 +0000 Subject: [PATCH 28/56] DynamicTablesPkg: Move LPI info object to Arch Common Move the LPI info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT Cpu Topology generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 64 ++++++++++++++ .../Include/ArmNameSpaceObjects.h | 88 +++---------------- .../SsdtCpuTopologyGenerator.c | 27 +++--- .../SsdtCpuTopologyGenerator.h | 6 +- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 21 +++-- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 24 ++--- 7 files changed, 118 insertions(+), 118 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index b70c327d46e4..681e84501960 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -35,6 +35,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity + EArchCommonObjLpiInfo, ///< 15 - Lpi Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -295,6 +296,69 @@ typedef struct CmArchCommonGenericInitiatorAffinityInfo { CM_OBJECT_TOKEN DeviceHandleToken; } CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO; +/** A structure that describes the Lpi information. + + The Low Power Idle states are described in DSDT/SSDT and associated + to cpus/clusters in the cpu topology. + + ID: EArchCommonObjLpiInfo +*/ +typedef struct CmArchCommonLpiInfo { + /** Minimum Residency. Time in microseconds after which a + state becomes more energy efficient than any shallower state. + */ + UINT32 MinResidency; + + /** Worst case time in microseconds from a wake interrupt + being asserted to the return to a running state + */ + UINT32 WorstCaseWakeLatency; + + /** Flags. + */ + UINT32 Flags; + + /** Architecture specific context loss flags. + */ + UINT32 ArchFlags; + + /** Residency counter frequency in cycles-per-second (Hz). + */ + UINT32 ResCntFreq; + + /** Every shallower power state in the parent is also enabled. + */ + UINT32 EnableParentState; + + /** The EntryMethod _LPI field can be described as an integer + or in a Register resource data descriptor. + + If IsInteger is TRUE, the IntegerEntryMethod field is used. + If IsInteger is FALSE, the RegisterEntryMethod field is used. + */ + BOOLEAN IsInteger; + + /** EntryMethod described as an Integer. + */ + UINT64 IntegerEntryMethod; + + /** EntryMethod described as a EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR. + */ + EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE RegisterEntryMethod; + + /** Residency counter register. + */ + EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE ResidencyCounterRegister; + + /** Usage counter register. + */ + EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE UsageCounterRegister; + + /** String representing the Lpi state + */ + CHAR8 StateName[16]; +} CM_ARCH_COMMON_LPI_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index ddf886a53db4..e019323c1fcd 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,18 +51,17 @@ typedef enum ArmObjectID { EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info EArmObjCacheInfo, ///< 21 - Cache Info EArmObjCmn600Info, ///< 22 - CMN-600 Info - EArmObjLpiInfo, ///< 23 - Lpi Info - EArmObjRmr, ///< 24 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 25 - Memory Range Descriptor - EArmObjCpcInfo, ///< 26 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 27 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 28 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 29 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 30 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 31 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 32 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 33 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 34 - P-State Dependency (PSD) Info + EArmObjRmr, ///< 23 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 24 - Memory Range Descriptor + EArmObjCpcInfo, ///< 25 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 26 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 27 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 28 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 29 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 30 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 31 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 32 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 33 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -672,7 +671,7 @@ typedef struct CmArmProcHierarchyInfo { CM_OBJECT_TOKEN PrivateResourcesArrayToken; /// Optional field: Reference Token for the Lpi state of this processor. /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure, itself referencing - /// CM_ARM_LPI_INFO objects. + /// CM_ARCH_COMMON_LPI_INFO objects. CM_OBJECT_TOKEN LpiToken; /// Set to TRUE if UID should override index for name and _UID /// for processor container nodes and name of processors. @@ -749,69 +748,6 @@ typedef struct CmArmCmn600Info { CM_ARM_EXTENDED_INTERRUPT DtcInterrupt[4]; } CM_ARM_CMN_600_INFO; -/** A structure that describes the Lpi information. - - The Low Power Idle states are described in DSDT/SSDT and associated - to cpus/clusters in the cpu topology. - - ID: EArmObjLpiInfo -*/ -typedef struct CmArmLpiInfo { - /** Minimum Residency. Time in microseconds after which a - state becomes more energy efficient than any shallower state. - */ - UINT32 MinResidency; - - /** Worst case time in microseconds from a wake interrupt - being asserted to the return to a running state - */ - UINT32 WorstCaseWakeLatency; - - /** Flags. - */ - UINT32 Flags; - - /** Architecture specific context loss flags. - */ - UINT32 ArchFlags; - - /** Residency counter frequency in cycles-per-second (Hz). - */ - UINT32 ResCntFreq; - - /** Every shallower power state in the parent is also enabled. - */ - UINT32 EnableParentState; - - /** The EntryMethod _LPI field can be described as an integer - or in a Register resource data descriptor. - - If IsInteger is TRUE, the IntegerEntryMethod field is used. - If IsInteger is FALSE, the RegisterEntryMethod field is used. - */ - BOOLEAN IsInteger; - - /** EntryMethod described as an Integer. - */ - UINT64 IntegerEntryMethod; - - /** EntryMethod described as a EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR. - */ - EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE RegisterEntryMethod; - - /** Residency counter register. - */ - EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE ResidencyCounterRegister; - - /** Usage counter register. - */ - EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE UsageCounterRegister; - - /** String representing the Lpi state - */ - CHAR8 StateName[16]; -} CM_ARM_LPI_INFO; - /** A structure that describes the RMR node for the Platform. diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index 5240ff52d862..bfc3f2eb3078 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -40,7 +40,7 @@ - EArmObjGicCInfo - EArmObjProcHierarchyInfo (OPTIONAL) along with - EArchCommonObjCmRef (OPTIONAL) - - EArmObjLpiInfo (OPTIONAL) + - EArchCommonObjLpiInfo (OPTIONAL) - GetEArmObjEtInfo (OPTIONAL) - EArmObjPsdInfo (OPTIONAL) */ @@ -79,9 +79,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjLpiInfo, - CM_ARM_LPI_INFO + EObjNameSpaceArchCommon, + EArchCommonObjLpiInfo, + CM_ARCH_COMMON_LPI_INFO ); /** @@ -118,7 +118,7 @@ GET_OBJECT_LIST ( One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO structure of the platform. The TokenTable allows to have a mapping: - Index <-> CM_OBJECT_TOKEN (to CM_ARM_LPI_INFO structures). + Index <-> CM_OBJECT_TOKEN (to CM_ARCH_COMMON_LPI_INFO structures). There will always be less sets of Lpi states (CM_ARCH_COMMON_OBJ_REF) than the number of cpus/clusters (CM_ARM_PROC_HIERARCHY_INFO). @@ -696,12 +696,12 @@ GenerateLpiStates ( UINT32 Index; UINT32 LastIndex; - AML_OBJECT_NODE_HANDLE LpiNode; - CM_ARCH_COMMON_OBJ_REF *LpiRefInfo; - UINT32 LpiRefInfoCount; - UINT32 LpiRefIndex; - CM_ARM_LPI_INFO *LpiInfo; - CHAR8 AslName[AML_NAME_SEG_SIZE + 1]; + AML_OBJECT_NODE_HANDLE LpiNode; + CM_ARCH_COMMON_OBJ_REF *LpiRefInfo; + UINT32 LpiRefInfoCount; + UINT32 LpiRefIndex; + CM_ARCH_COMMON_LPI_INFO *LpiInfo; + CHAR8 AslName[AML_NAME_SEG_SIZE + 1]; ASSERT (Generator != NULL); ASSERT (Generator->TokenTable.Table != NULL); @@ -739,8 +739,9 @@ GenerateLpiStates ( } for (LpiRefIndex = 0; LpiRefIndex < LpiRefInfoCount; LpiRefIndex++) { - // For each CM_ARM_LPI_INFO referenced by the token, add an Lpi state. - Status = GetEArmObjLpiInfo ( + // For each CM_ARCH_COMMON_LPI_INFO referenced by the token, + // add an Lpi state. + Status = GetEArchCommonObjLpiInfo ( CfgMgrProtocol, LpiRefInfo[LpiRefIndex].ReferenceToken, &LpiInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h index d6561e33da11..889711789fa0 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h @@ -70,7 +70,7 @@ /** A structure used to handle the Lpi structures referencing. A CM_ARM_PROC_HIERARCHY_INFO structure references a CM_ARCH_COMMON_OBJ_REF. - This CM_ARCH_COMMON_OBJ_REF references CM_ARM_LPI_INFO structures. + This CM_ARCH_COMMON_OBJ_REF references CM_ARCH_COMMON_LPI_INFO structures. Example: (Cpu0) (Cpu1) @@ -86,7 +86,7 @@ | | v v (A first Lpi state) (A second Lpi state) - CM_ARM_LPI_INFO[0] CM_ARM_LPI_INFO[1] + CM_ARCH_COMMON_LPI_INFO[0] CM_ARCH_COMMON_LPI_INFO[1] Here, Cpu0 and Cpu1 have the same Lpi states. Both CM_ARM_PROC_HIERARCHY_INFO structures reference the same CM_ARCH_COMMON_OBJ_REF. An entry is created in the @@ -118,7 +118,7 @@ */ typedef struct TokenTable { /// TokenTable, a table allowing to map: - /// Index <-> CM_OBJECT_TOKEN (to CM_ARM_LPI_INFO structures). + /// Index <-> CM_OBJECT_TOKEN (to CM_ARCH_COMMON_LPI_INFO structures). CM_OBJECT_TOKEN *Table; /// Last used index of the TokenTable. diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 5f3e9f5fdcb5..de3338d10884 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,18 +166,17 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info NULL, ///< 22 - CMN-600 Info - NULL, ///< 23 - Lpi Info - NULL, ///< 24 - Reserved Memory Range Node - NULL, ///< 25 - Memory Range Descriptor - NULL, ///< 26 - Continuous Performance Control Info - NULL, ///< 27 - Pcc Subspace Type 0 Info + NULL, ///< 23 - Reserved Memory Range Node + NULL, ///< 24 - Memory Range Descriptor + NULL, ///< 25 - Continuous Performance Control Info + NULL, ///< 26 - Pcc Subspace Type 0 Info + NULL, ///< 27 - Pcc Subspace Type 2 Info NULL, ///< 28 - Pcc Subspace Type 2 Info - NULL, ///< 29 - Pcc Subspace Type 2 Info - NULL, ///< 30 - Pcc Subspace Type 3 Info - NULL, ///< 31 - Pcc Subspace Type 4 Info - NULL, ///< 32 - Pcc Subspace Type 5 Info - NULL, ///< 33 - Embedded Trace Extension/Module Info - NULL ///< 34 - P-State Dependency (PSD) Info + NULL, ///< 29 - Pcc Subspace Type 3 Info + NULL, ///< 30 - Pcc Subspace Type 4 Info + NULL, ///< 31 - Pcc Subspace Type 5 Info + NULL, ///< 32 - Embedded Trace Extension/Module Info + NULL ///< 33 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 732454da8f93..050cd04d09c2 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -417,9 +417,9 @@ STATIC CONST CM_OBJ_PARSER AcpiGenericAddressParser[] = { { "Address", 8, "0x%llx", NULL }, }; -/** A parser for EArmObjLpiInfo. +/** A parser for EArchCommonObjLpiInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmLpiInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonLpiInfoParser[] = { { "MinResidency", 4, "0x%x", NULL }, { "WorstCaseWakeLatency", 4, "0x%x", NULL }, { "Flags", 4, "0x%x", NULL }, @@ -685,6 +685,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandleAcpi, CmArchCommonDeviceHandleAcpiParser), CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo,CmArchCommonGenericInitiatorAffinityInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -714,7 +715,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjLpiInfo, CmArmLpiInfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 303f85986566..055836a7e31e 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,18 +463,17 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | Processor Hierarchy Info | Move to Arch Common NS | | 21 | Cache Info | Move to Arch Common NS | | 22 | CMN 600 Info | | -| 23 | Low Power Idle State Info | Move to Arch Common NS | -| 24 | Reserved Memory Range Node | | -| 25 | Memory Range Descriptor | | -| 26 | Continuous Performance Control Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 32 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 33 | Embedded Trace Extension/Module Info | | -| 34 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Reserved Memory Range Node | | +| 24 | Memory Range Descriptor | | +| 25 | Continuous Performance Control Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 31 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 32 | Embedded Trace Extension/Module Info | | +| 33 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,5 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 12 | Device Handle Acpi | | | 13 | Device Handle PCI | | | 14 | Generic Initiator Affinity Info | | +| 15 | Low Power Idle State Info | | | `*` | All other values are reserved. | | From ea07db1e4cc4f3a02ab5212277f07d666b269ac2 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 13:17:13 +0000 Subject: [PATCH 29/56] DynamicTablesPkg: Rename GicCToken field in Processor Hierarchy Info The GicCToken field in the CM_ARM_PROC_HIERARCHY_INFO structure is a reference to the associated object which has the corresponding ACPI Processor ID, e.g. for Arm systems this is a reference to the CM_ARM_GICC_INFO object. For other architecture this may be a reference to a similar object that has the ACPI Processor ID. Therefore, rename the GicCToken field to a more generic name like AcpiIdObjectToken. Correspondingly also update the following modules to reflect the changes introduced by this renaming: - PPTT generator - SSDT CPu topology generator - ConfigurationManagerObjectParser. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArmNameSpaceObjects.h | 10 ++-- .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c | 60 ++++++++++--------- .../SsdtCpuTopologyGenerator.c | 8 +-- .../ConfigurationManagerObjectParser.c | 2 +- 4 files changed, 41 insertions(+), 39 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index e019323c1fcd..da50f581fa25 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -657,11 +657,11 @@ typedef struct CmArmProcHierarchyInfo { /// Token for the parent CM_ARM_PROC_HIERARCHY_INFO object in the processor /// topology. A value of CM_NULL_TOKEN means this node has no parent. CM_OBJECT_TOKEN ParentToken; - /// Token of the associated CM_ARM_GICC_INFO object which has the - /// corresponding ACPI Processor ID. A value of CM_NULL_TOKEN means this - /// node represents a group of associated processors and it does not have an - /// associated GIC CPU interface. - CM_OBJECT_TOKEN GicCToken; + /// Token of the associated object which has the corresponding ACPI Processor + /// ID, e.g. for Arm systems this is a reference to CM_ARM_GICC_INFO object. + /// A value of CM_NULL_TOKEN means this node represents a group of associated + /// processors and it does not have an associated CPU interface. + CM_OBJECT_TOKEN AcpiIdObjectToken; /// Number of resources private to this Node UINT32 NoOfPrivateResources; /// Token of the array which contains references to the resources private to diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index c237f7ff9386..f2f2a834116e 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -397,12 +397,14 @@ AddPrivateResources ( @param [in] Index2 Index of Object2 to be displayed for debugging purposes. - @retval TRUE Object1 and Object2 have the same GicCToken. - @retval FALSE Object1 and Object2 have different GicCTokens. + @retval TRUE Object1 and Object2 have the same + AcpiIdObjectToken. + @retval FALSE Object1 and Object2 have different + AcpiIdObjectTokens. **/ BOOLEAN EFIAPI -IsGicCTokenEqual ( +IsAcpiIdObjectTokenEqual ( IN CONST VOID *Object1, IN CONST VOID *Object2, IN UINTN Index1, @@ -426,18 +428,18 @@ IsGicCTokenEqual ( if (IS_ACPI_PROC_ID_VALID (ProcNode1) && IS_ACPI_PROC_ID_VALID (ProcNode2) && - (ProcNode1->GicCToken != CM_NULL_TOKEN) && - (ProcNode2->GicCToken != CM_NULL_TOKEN) && - (ProcNode1->GicCToken == ProcNode2->GicCToken)) + (ProcNode1->AcpiIdObjectToken != CM_NULL_TOKEN) && + (ProcNode2->AcpiIdObjectToken != CM_NULL_TOKEN) && + (ProcNode1->AcpiIdObjectToken == ProcNode2->AcpiIdObjectToken)) { DEBUG (( DEBUG_ERROR, "ERROR: PPTT: Two Processor Hierarchy Info objects (%d and %d) map to " \ - "the same GICC Info object. ACPI Processor IDs are not unique. " \ - "GicCToken = %p.\n", + "the same ACPI ID reference object. ACPI Processor IDs are not unique. " \ + "AcpiIdObjectToken = %p.\n", Index1, Index2, - ProcNode1->GicCToken + ProcNode1->AcpiIdObjectToken )); return TRUE; } @@ -474,7 +476,7 @@ AddProcHierarchyNodes ( EFI_STATUS Status; EFI_ACPI_6_4_PPTT_STRUCTURE_PROCESSOR *ProcStruct; UINT32 *PrivateResources; - BOOLEAN IsGicCTokenDuplicated; + BOOLEAN IsAcpiIdObjectTokenDuplicated; CM_ARM_GICC_INFO *GicCInfoList; UINT32 GicCInfoCount; @@ -500,15 +502,15 @@ AddProcHierarchyNodes ( NodeCount = Generator->ProcHierarchyNodeCount; // Check if every GICC Object is referenced by onlu one Proc Node - IsGicCTokenDuplicated = FindDuplicateValue ( - ProcNodeIterator, - NodeCount, - sizeof (PPTT_NODE_INDEXER), - IsGicCTokenEqual - ); + IsAcpiIdObjectTokenDuplicated = FindDuplicateValue ( + ProcNodeIterator, + NodeCount, + sizeof (PPTT_NODE_INDEXER), + IsAcpiIdObjectTokenEqual + ); // Duplicate GIC CPU Interface Token was found so two PPTT Processor Hierarchy // Nodes map to the same MADT GICC structure - if (IsGicCTokenDuplicated) { + if (IsAcpiIdObjectTokenDuplicated) { return EFI_INVALID_PARAMETER; } @@ -602,14 +604,14 @@ AddProcHierarchyNodes ( if (!IS_ACPI_PROC_ID_VALID (ProcInfoNode)) { // Default invalid ACPI Processor ID to 0 ProcStruct->AcpiProcessorId = 0; - } else if (ProcInfoNode->GicCToken == CM_NULL_TOKEN) { + } else if (ProcInfoNode->AcpiIdObjectToken == CM_NULL_TOKEN) { Status = EFI_INVALID_PARAMETER; DEBUG (( DEBUG_ERROR, - "ERROR: PPTT: The 'ACPI Processor ID valid' flag is set but no GICC " \ - "structure token was provided. GicCToken = %p. RequestorToken = %p. " \ - "Status = %r\n", - ProcInfoNode->GicCToken, + "ERROR: PPTT: The 'ACPI Processor ID valid' flag is set but no " \ + "ACPI ID Reference object token was provided. " \ + "AcpiIdObjectToken = %p. RequestorToken = %p. Status = %r\n", + ProcInfoNode->AcpiIdObjectToken, ProcInfoNode->Token, Status )); @@ -617,17 +619,17 @@ AddProcHierarchyNodes ( } else { Status = GetEArmObjGicCInfo ( CfgMgrProtocol, - ProcInfoNode->GicCToken, + ProcInfoNode->AcpiIdObjectToken, &GicCInfoList, &GicCInfoCount ); if (EFI_ERROR (Status)) { DEBUG (( DEBUG_ERROR, - "ERROR: PPTT: Failed to get GICC structure. ACPI Processor ID " \ - "can't be populated. GicCToken = %p. RequestorToken = %p. " \ - "Status = %r\n", - ProcInfoNode->GicCToken, + "ERROR: PPTT: Failed to get ACPI ID Reference object token. " \ + "ACPI Processor ID can't be populated. " \ + "AcpiIdObjectToken = %p. RequestorToken = %p. Status = %r\n", + ProcInfoNode->AcpiIdObjectToken, ProcInfoNode->Token, Status )); @@ -640,10 +642,10 @@ AddProcHierarchyNodes ( DEBUG_ERROR, "ERROR: PPTT: Failed to find a unique GICC structure. " \ "ACPI Processor ID can't be populated. " \ - "GICC Structure Count = %d. GicCToken = %p. RequestorToken = %p " \ + "GICC Structure Count = %d. AcpiIdObjectToken = %p. RequestorToken = %p " \ "Status = %r\n", GicCInfoCount, - ProcInfoNode->GicCToken, + ProcInfoNode->AcpiIdObjectToken, ProcInfoNode->Token, Status )); diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index bfc3f2eb3078..16e443b3fdbf 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -894,11 +894,11 @@ CreateAmlCpuFromProcHierarchy ( ASSERT (CfgMgrProtocol != NULL); ASSERT (ParentNode != NULL); ASSERT (ProcHierarchyNodeInfo != NULL); - ASSERT (ProcHierarchyNodeInfo->GicCToken != CM_NULL_TOKEN); + ASSERT (ProcHierarchyNodeInfo->AcpiIdObjectToken != CM_NULL_TOKEN); Status = GetEArmObjGicCInfo ( CfgMgrProtocol, - ProcHierarchyNodeInfo->GicCToken, + ProcHierarchyNodeInfo->AcpiIdObjectToken, &GicCInfo, NULL ); @@ -1175,9 +1175,9 @@ CreateAmlCpuTopologyTree ( // Find the children of the CM_ARM_PROC_HIERARCHY_INFO // currently being handled (i.e. ParentToken == NodeToken). if (Generator->ProcNodeList[Index].ParentToken == NodeToken) { - // Only Cpus (leaf nodes in this tree) have a GicCToken. + // Only Cpus (leaf nodes in this tree) have a AcpiIdObjectToken. // Create a Cpu node. - if (Generator->ProcNodeList[Index].GicCToken != CM_NULL_TOKEN) { + if (Generator->ProcNodeList[Index].AcpiIdObjectToken != CM_NULL_TOKEN) { Status = CheckProcNode ( Generator->ProcNodeList[Index].Flags, TRUE, diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 050cd04d09c2..17388b183554 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -328,7 +328,7 @@ STATIC CONST CM_OBJ_PARSER CmArmProcHierarchyInfoParser[] = { { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "Flags", 4, "0x%x", NULL }, { "ParentToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, - { "GicCToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, + { "AcpiIdObjectToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "NoOfPrivateResources", 4, "0x%x", NULL }, { "PrivateResourcesArrayToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "LpiToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, From 9f8b2a5fef4b994e14b75ac3b0803fe43ce559f1 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 13:36:32 +0000 Subject: [PATCH 30/56] DynamicTablesPkg: Move Processor hierarchy info to Arch Common Move the Processor hierarchy info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PPTT generator - SSDT CPU topology generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 42 +++++++++++ .../Include/ArmNameSpaceObjects.h | 74 ++++--------------- .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c | 38 +++++----- .../SsdtCpuTopologyGenerator.c | 67 +++++++++-------- .../SsdtCpuTopologyGenerator.h | 18 ++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 1 - .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 29 ++++---- 8 files changed, 137 insertions(+), 138 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 681e84501960..872f2eebb7c3 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -36,6 +36,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity EArchCommonObjLpiInfo, ///< 15 - Lpi Info + EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -359,6 +360,47 @@ typedef struct CmArchCommonLpiInfo { CHAR8 StateName[16]; } CM_ARCH_COMMON_LPI_INFO; +/** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT + + ID: EArchCommonObjProcHierarchyInfo +*/ +typedef struct CmArchCommonProcHierarchyInfo { + /// A unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155) + UINT32 Flags; + /// Token for the parent CM_ARCH_COMMON_PROC_HIERARCHY_INFO object in the processor + /// topology. A value of CM_NULL_TOKEN means this node has no parent. + CM_OBJECT_TOKEN ParentToken; + /// Token of the associated object which has the corresponding ACPI Processor + /// ID, e.g. for Arm systems this is a reference to CM_ARM_GICC_INFO object. + /// A value of CM_NULL_TOKEN means this node represents a group of associated + /// processors and it does not have an associated CPU interface. + CM_OBJECT_TOKEN AcpiIdObjectToken; + /// Number of resources private to this Node + UINT32 NoOfPrivateResources; + /// Token of the array which contains references to the resources private to + /// this CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. This field is ignored if + /// the NoOfPrivateResources is 0, in which case it is recommended to set + /// this field to CM_NULL_TOKEN. + CM_OBJECT_TOKEN PrivateResourcesArrayToken; + /// Optional field: Reference Token for the Lpi state of this processor. + /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure, itself referencing + /// CM_ARCH_COMMON_LPI_INFO objects. + CM_OBJECT_TOKEN LpiToken; + /// Set to TRUE if UID should override index for name and _UID + /// for processor container nodes and name of processors. + /// This should be consistently set for containers or processors to avoid + /// duplicate values + BOOLEAN OverrideNameUidEnabled; + /// If OverrideNameUidEnabled is TRUE then this value will be used for name of + /// processors and processor containers. + UINT16 OverrideName; + /// If OverrideNameUidEnabled is TRUE then this value will be used for + /// the UID of processor containers. + UINT32 OverrideUid; +} CM_ARCH_COMMON_PROC_HIERARCHY_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index da50f581fa25..4e9f0096ba60 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -48,20 +48,19 @@ typedef enum ArmObjectID { EArmObjGicItsIdentifierArray, ///< 17 - GIC ITS Identifier Array EArmObjIdMappingArray, ///< 18 - ID Mapping Array EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array - EArmObjProcHierarchyInfo, ///< 20 - Processor Hierarchy Info - EArmObjCacheInfo, ///< 21 - Cache Info - EArmObjCmn600Info, ///< 22 - CMN-600 Info - EArmObjRmr, ///< 23 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 24 - Memory Range Descriptor - EArmObjCpcInfo, ///< 25 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 26 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 27 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 28 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 29 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 30 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 31 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 32 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 33 - P-State Dependency (PSD) Info + EArmObjCacheInfo, ///< 20 - Cache Info + EArmObjCmn600Info, ///< 21 - CMN-600 Info + EArmObjRmr, ///< 22 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 23 - Memory Range Descriptor + EArmObjCpcInfo, ///< 24 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 25 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 26 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 27 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 28 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 29 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 30 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 31 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 32 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -645,47 +644,6 @@ typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; */ typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT; -/** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT - - ID: EArmObjProcHierarchyInfo -*/ -typedef struct CmArmProcHierarchyInfo { - /// A unique token used to identify this object - CM_OBJECT_TOKEN Token; - /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155) - UINT32 Flags; - /// Token for the parent CM_ARM_PROC_HIERARCHY_INFO object in the processor - /// topology. A value of CM_NULL_TOKEN means this node has no parent. - CM_OBJECT_TOKEN ParentToken; - /// Token of the associated object which has the corresponding ACPI Processor - /// ID, e.g. for Arm systems this is a reference to CM_ARM_GICC_INFO object. - /// A value of CM_NULL_TOKEN means this node represents a group of associated - /// processors and it does not have an associated CPU interface. - CM_OBJECT_TOKEN AcpiIdObjectToken; - /// Number of resources private to this Node - UINT32 NoOfPrivateResources; - /// Token of the array which contains references to the resources private to - /// this CM_ARM_PROC_HIERARCHY_INFO instance. This field is ignored if - /// the NoOfPrivateResources is 0, in which case it is recommended to set - /// this field to CM_NULL_TOKEN. - CM_OBJECT_TOKEN PrivateResourcesArrayToken; - /// Optional field: Reference Token for the Lpi state of this processor. - /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure, itself referencing - /// CM_ARCH_COMMON_LPI_INFO objects. - CM_OBJECT_TOKEN LpiToken; - /// Set to TRUE if UID should override index for name and _UID - /// for processor container nodes and name of processors. - /// This should be consistently set for containers or processors to avoid - /// duplicate values - BOOLEAN OverrideNameUidEnabled; - /// If OverrideNameUidEnabled is TRUE then this value will be used for name of - /// processors and processor containers. - UINT16 OverrideName; - /// If OverrideNameUidEnabled is TRUE then this value will be used for - /// the UID of processor containers. - UINT32 OverrideUid; -} CM_ARM_PROC_HIERARCHY_INFO; - /** A structure that describes the Cache Type Structure (Type 1) in PPTT ID: EArmObjCacheInfo @@ -694,9 +652,9 @@ typedef struct CmArmCacheInfo { /// A unique token used to identify this object CM_OBJECT_TOKEN Token; /// Reference token for the next level of cache that is private to the same - /// CM_ARM_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN means this - /// entry represents the last cache level appropriate to the processor - /// hierarchy node structures using this entry. + /// CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN + /// means this entry represents the last cache level appropriate to the + /// processor hierarchy node structures using this entry. CM_OBJECT_TOKEN NextLevelOfCacheToken; /// Size of the cache in bytes UINT32 Size; diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index f2f2a834116e..9485de707046 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -32,7 +32,7 @@ Requirements: The following Configuration Manager Object(s) are used by this Generator: - - EArmObjProcHierarchyInfo (REQUIRED) + - EArchCommonObjProcHierarchyInfo (REQUIRED) - EArmObjCacheInfo - EArchCommonObjCmRef - EArmObjGicCInfo (REQUIRED) @@ -43,9 +43,9 @@ information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjProcHierarchyInfo, - CM_ARM_PROC_HIERARCHY_INFO + EObjNameSpaceArchCommon, + EArchCommonObjProcHierarchyInfo, + CM_ARCH_COMMON_PROC_HIERARCHY_INFO ); /** @@ -90,7 +90,7 @@ GET_OBJECT_LIST ( STATIC UINT32 GetProcHierarchyNodeSize ( - IN CONST CM_ARM_PROC_HIERARCHY_INFO *Node + IN CONST CM_ARCH_COMMON_PROC_HIERARCHY_INFO *Node ) { ASSERT (Node != NULL); @@ -107,7 +107,7 @@ GetProcHierarchyNodeSize ( GET_SIZE_OF_PPTT_STRUCTS ( ProcHierarchyNodes, GetProcHierarchyNodeSize (NodesToIndex), - CM_ARM_PROC_HIERARCHY_INFO + CM_ARCH_COMMON_PROC_HIERARCHY_INFO ); /** @@ -411,10 +411,10 @@ IsAcpiIdObjectTokenEqual ( IN UINTN Index2 ) { - PPTT_NODE_INDEXER *IndexedObject1; - PPTT_NODE_INDEXER *IndexedObject2; - CM_ARM_PROC_HIERARCHY_INFO *ProcNode1; - CM_ARM_PROC_HIERARCHY_INFO *ProcNode2; + PPTT_NODE_INDEXER *IndexedObject1; + PPTT_NODE_INDEXER *IndexedObject2; + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcNode1; + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcNode2; ASSERT ( (Object1 != NULL) && @@ -423,8 +423,8 @@ IsAcpiIdObjectTokenEqual ( IndexedObject1 = (PPTT_NODE_INDEXER *)Object1; IndexedObject2 = (PPTT_NODE_INDEXER *)Object2; - ProcNode1 = (CM_ARM_PROC_HIERARCHY_INFO *)IndexedObject1->Object; - ProcNode2 = (CM_ARM_PROC_HIERARCHY_INFO *)IndexedObject2->Object; + ProcNode1 = (CM_ARCH_COMMON_PROC_HIERARCHY_INFO *)IndexedObject1->Object; + ProcNode2 = (CM_ARCH_COMMON_PROC_HIERARCHY_INFO *)IndexedObject2->Object; if (IS_ACPI_PROC_ID_VALID (ProcNode1) && IS_ACPI_PROC_ID_VALID (ProcNode2) && @@ -482,8 +482,8 @@ AddProcHierarchyNodes ( UINT32 GicCInfoCount; UINT32 UniqueGicCRefCount; - PPTT_NODE_INDEXER *PpttNodeFound; - CM_ARM_PROC_HIERARCHY_INFO *ProcInfoNode; + PPTT_NODE_INDEXER *PpttNodeFound; + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcInfoNode; PPTT_NODE_INDEXER *ProcNodeIterator; UINT32 NodeCount; @@ -517,7 +517,7 @@ AddProcHierarchyNodes ( UniqueGicCRefCount = 0; while (NodeCount-- != 0) { - ProcInfoNode = (CM_ARM_PROC_HIERARCHY_INFO *)ProcNodeIterator->Object; + ProcInfoNode = (CM_ARCH_COMMON_PROC_HIERARCHY_INFO *)ProcNodeIterator->Object; // Check if the private resource count is within the size limit // imposed on the Processor Hierarchy node by the specification. @@ -577,7 +577,7 @@ AddProcHierarchyNodes ( // Test if the reference is to a 'leaf' node if (IS_PROC_NODE_LEAF ( - ((CM_ARM_PROC_HIERARCHY_INFO *)PpttNodeFound->Object) + ((CM_ARCH_COMMON_PROC_HIERARCHY_INFO *)PpttNodeFound->Object) )) { Status = EFI_INVALID_PARAMETER; @@ -1074,8 +1074,8 @@ BuildPpttTable ( UINT32 ProcHierarchyNodeOffset; UINT32 CacheStructOffset; - CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; - CM_ARM_CACHE_INFO *CacheStructList; + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; + CM_ARM_CACHE_INFO *CacheStructList; ACPI_PPTT_GENERATOR *Generator; @@ -1112,7 +1112,7 @@ BuildPpttTable ( // Get the processor hierarchy info and update the processor topology // structure count with Processor Hierarchy Nodes (Type 0) - Status = GetEArmObjProcHierarchyInfo ( + Status = GetEArchCommonObjProcHierarchyInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &ProcHierarchyNodeList, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index 16e443b3fdbf..d7caca5a3a1e 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -38,7 +38,7 @@ The following Configuration Manager Object(s) are required by this Generator: - EArmObjGicCInfo - - EArmObjProcHierarchyInfo (OPTIONAL) along with + - EArchCommonObjProcHierarchyInfo (OPTIONAL) along with - EArchCommonObjCmRef (OPTIONAL) - EArchCommonObjLpiInfo (OPTIONAL) - GetEArmObjEtInfo (OPTIONAL) @@ -59,9 +59,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjProcHierarchyInfo, - CM_ARM_PROC_HIERARCHY_INFO + EObjNameSpaceArchCommon, + EArchCommonObjProcHierarchyInfo, + CM_ARCH_COMMON_PROC_HIERARCHY_INFO ); /** @@ -116,12 +116,12 @@ GET_OBJECT_LIST ( /** Initialize the TokenTable. - One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO + One entry should be allocated for each CM_ARCH_COMMON_PROC_HIERARCHY_INFO structure of the platform. The TokenTable allows to have a mapping: Index <-> CM_OBJECT_TOKEN (to CM_ARCH_COMMON_LPI_INFO structures). There will always be less sets of Lpi states (CM_ARCH_COMMON_OBJ_REF) - than the number of cpus/clusters (CM_ARM_PROC_HIERARCHY_INFO). + than the number of cpus/clusters (CM_ARCH_COMMON_PROC_HIERARCHY_INFO). @param [in] Generator The SSDT Cpu Topology generator. @param [in] Count Number of entries to allocate in the TokenTable. @@ -585,8 +585,8 @@ CreateAmlEtNode ( } @param [in] Generator The SSDT Cpu Topology generator. - @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO describing - the Cpu. + @param [in] ProcHierarchyNodeInfo CM_ARCH_COMMON_PROC_HIERARCHY_INFO + describing the Cpu. @param [in] Node Node to which the _LPI method is attached. Can represent a Cpu or a Cluster. @@ -599,9 +599,9 @@ STATIC EFI_STATUS EFIAPI CreateAmlLpiMethod ( - IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, - IN CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo, - IN AML_OBJECT_NODE_HANDLE *Node + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo, + IN AML_OBJECT_NODE_HANDLE *Node ) { EFI_STATUS Status; @@ -860,7 +860,7 @@ CreateAmlCpu ( return Status; } -/** Create a Cpu in the AML namespace from a CM_ARM_PROC_HIERARCHY_INFO +/** Create a Cpu in the AML namespace from a CM_ARCH_COMMON_PROC_HIERARCHY_INFO CM object. @param [in] Generator The SSDT Cpu Topology generator. @@ -868,8 +868,8 @@ CreateAmlCpu ( Protocol Interface. @param [in] ParentNode Parent node to attach the Cpu node to. @param [in] CpuName Value used to generate the node name. - @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO describing - the Cpu. + @param [in] ProcHierarchyNodeInfo CM_ARCH_COMMON_PROC_HIERARCHY_INFO + describing the Cpu. @retval EFI_SUCCESS Success. @retval EFI_INVALID_PARAMETER Invalid parameter. @@ -883,7 +883,7 @@ CreateAmlCpuFromProcHierarchy ( IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN AML_NODE_HANDLE ParentNode, IN UINT32 CpuName, - IN CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo + IN CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo ) { EFI_STATUS Status; @@ -914,7 +914,7 @@ CreateAmlCpuFromProcHierarchy ( } // If a set of Lpi states is associated with the - // CM_ARM_PROC_HIERARCHY_INFO, create an _LPI method returning them. + // CM_ARCH_COMMON_PROC_HIERARCHY_INFO, create an _LPI method returning them. if (ProcHierarchyNodeInfo->LpiToken != CM_NULL_TOKEN) { Status = CreateAmlLpiMethod (Generator, ProcHierarchyNodeInfo, CpuNode); if (EFI_ERROR (Status)) { @@ -961,7 +961,7 @@ CreateAmlCpuFromProcHierarchy ( /** Create a Processor Container in the AML namespace. - Any CM_ARM_PROC_HIERARCHY_INFO object with the following flags is + Any CM_ARCH_COMMON_PROC_HIERARCHY_INFO object with the following flags is assumed to be a processor container: - EFI_ACPI_6_3_PPTT_PACKAGE_NOT_PHYSICAL - EFI_ACPI_6_3_PPTT_PROCESSOR_ID_INVALID @@ -979,8 +979,8 @@ CreateAmlCpuFromProcHierarchy ( Protocol Interface. @param [in] ParentNode Parent node to attach the processor container node to. - @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO object used - to create the node. + @param [in] ProcHierarchyNodeInfo CM_ARCH_COMMON_PROC_HIERARCHY_INFO object + used to create the node. @param [in] ProcContainerName Name of the processor container. @param [in] ProcContainerUid Uid of the processor container. @param [out] ProcContainerNodePtr If success, contains the created processor @@ -997,7 +997,7 @@ CreateAmlProcessorContainer ( IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, IN AML_NODE_HANDLE ParentNode, - IN CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo, + IN CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeInfo, IN UINT16 ProcContainerName, IN UINT32 ProcContainerUid, OUT AML_OBJECT_NODE_HANDLE *ProcContainerNodePtr @@ -1050,7 +1050,7 @@ CreateAmlProcessorContainer ( } // If a set of Lpi states are associated with the - // CM_ARM_PROC_HIERARCHY_INFO, create an _LPI method returning them. + // CM_ARCH_COMMON_PROC_HIERARCHY_INFO, create an _LPI method returning them. if (ProcHierarchyNodeInfo->LpiToken != CM_NULL_TOKEN) { Status = CreateAmlLpiMethod ( Generator, @@ -1128,8 +1128,7 @@ CheckProcNode ( @param [in] Generator The SSDT Cpu Topology generator. @param [in] CfgMgrProtocol Pointer to the Configuration Manager Protocol Interface. - @param [in] NodeToken Token of the CM_ARM_PROC_HIERARCHY_INFO - currently handled. + @param [in] NodeToken Token of the CM_ARCH_COMMON_PROC_HIERARCHY_INFO currently handled. @param [in] ParentNode Parent node to attach the created node to. @param [in,out] ProcContainerIndex Pointer to the current processor container @@ -1172,7 +1171,7 @@ CreateAmlCpuTopologyTree ( ProcContainerName = 0; for (Index = 0; Index < Generator->ProcNodeCount; Index++) { - // Find the children of the CM_ARM_PROC_HIERARCHY_INFO + // Find the children of the CM_ARCH_COMMON_PROC_HIERARCHY_INFO // currently being handled (i.e. ParentToken == NodeToken). if (Generator->ProcNodeList[Index].ParentToken == NodeToken) { // Only Cpus (leaf nodes in this tree) have a AcpiIdObjectToken. @@ -1281,8 +1280,8 @@ CreateAmlCpuTopologyTree ( return EFI_SUCCESS; } -/** Create the processor hierarchy AML tree from CM_ARM_PROC_HIERARCHY_INFO - CM objects. +/** Create the processor hierarchy AML tree from + CM_ARCH_COMMON_PROC_HIERARCHY_INFO CM objects. @param [in] Generator The SSDT Cpu Topology generator. @param [in] CfgMgrProtocol Pointer to the Configuration Manager @@ -1469,12 +1468,12 @@ BuildSsdtCpuTopologyTable ( OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table ) { - EFI_STATUS Status; - AML_ROOT_NODE_HANDLE RootNode; - AML_OBJECT_NODE_HANDLE ScopeNode; - CM_ARM_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; - UINT32 ProcHierarchyNodeCount; - ACPI_CPU_TOPOLOGY_GENERATOR *Generator; + EFI_STATUS Status; + AML_ROOT_NODE_HANDLE RootNode; + AML_OBJECT_NODE_HANDLE ScopeNode; + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; + UINT32 ProcHierarchyNodeCount; + ACPI_CPU_TOPOLOGY_GENERATOR *Generator; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -1502,7 +1501,7 @@ BuildSsdtCpuTopologyTable ( // Get the processor hierarchy info and update the processor topology // structure count with Processor Hierarchy Nodes (Type 0) - Status = GetEArmObjProcHierarchyInfo ( + Status = GetEArchCommonObjProcHierarchyInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &ProcHierarchyNodeList, @@ -1526,7 +1525,7 @@ BuildSsdtCpuTopologyTable ( goto exit_handler; } } else { - // Generate the topology from CM_ARM_PROC_HIERARCHY_INFO objects. + // Generate the topology from CM_ARCH_COMMON_PROC_HIERARCHY_INFO objects. Generator->ProcNodeList = ProcHierarchyNodeList; Generator->ProcNodeCount = ProcHierarchyNodeCount; diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h index 889711789fa0..6fb44c7e5887 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h @@ -69,12 +69,12 @@ /** A structure used to handle the Lpi structures referencing. - A CM_ARM_PROC_HIERARCHY_INFO structure references a CM_ARCH_COMMON_OBJ_REF. + A CM_ARCH_COMMON_PROC_HIERARCHY_INFO structure references a CM_ARCH_COMMON_OBJ_REF. This CM_ARCH_COMMON_OBJ_REF references CM_ARCH_COMMON_LPI_INFO structures. Example: (Cpu0) (Cpu1) - CM_ARM_PROC_HIERARCHY_INFO CM_ARM_PROC_HIERARCHY_INFO + CM_ARCH_COMMON_PROC_HIERARCHY_INFO CM_ARCH_COMMON_PROC_HIERARCHY_INFO | | +---------------------------------------- | @@ -88,7 +88,7 @@ (A first Lpi state) (A second Lpi state) CM_ARCH_COMMON_LPI_INFO[0] CM_ARCH_COMMON_LPI_INFO[1] - Here, Cpu0 and Cpu1 have the same Lpi states. Both CM_ARM_PROC_HIERARCHY_INFO + Here, Cpu0 and Cpu1 have the same Lpi states. Both CM_ARCH_COMMON_PROC_HIERARCHY_INFO structures reference the same CM_ARCH_COMMON_OBJ_REF. An entry is created in the TokenTable such as: 0 <-> CM_ARCH_COMMON_OBJ_REF @@ -130,16 +130,16 @@ typedef struct TokenTable { */ typedef struct AcpiCpuTopologyGenerator { /// ACPI Table generator header - ACPI_TABLE_GENERATOR Header; + ACPI_TABLE_GENERATOR Header; // Private fields are defined from here. /// Private object used to handle token referencing. - TOKEN_TABLE TokenTable; - /// List of CM_ARM_PROC_HIERARCHY_INFO CM objects. - CM_ARM_PROC_HIERARCHY_INFO *ProcNodeList; - /// Count of CM_ARM_PROC_HIERARCHY_INFO CM objects. - UINT32 ProcNodeCount; + TOKEN_TABLE TokenTable; + /// List of CM_ARCH_COMMON_PROC_HIERARCHY_INFO CM objects. + CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcNodeList; + /// Count of CM_ARCH_COMMON_PROC_HIERARCHY_INFO CM objects. + UINT32 ProcNodeCount; } ACPI_CPU_TOPOLOGY_GENERATOR; #pragma pack() diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index de3338d10884..fd2a321bfb55 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -163,7 +163,6 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 17 - GIC ITS Identifier Array NULL, ///< 18 - ID Mapping Array NULL, ///< 19 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 20 - Processor Hierarchy Info TokenFixerNotImplemented, ///< 21 - Cache Info NULL, ///< 22 - CMN-600 Info NULL, ///< 23 - Reserved Memory Range Node diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 17388b183554..c48e29e5053d 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -322,9 +322,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonGenericInterruptParser[] = { { "Flags", 4, "0x%x", NULL } }; -/** A parser for EArmObjProcHierarchyInfo. +/** A parser for EArchCommonObjProcHierarchyInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmProcHierarchyInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonProcHierarchyInfoParser[] = { { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "Flags", 4, "0x%x", NULL }, { "ParentToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, @@ -686,6 +686,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjDeviceHandlePci, CmArchCommonDeviceHandlePciParser), CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo,CmArchCommonGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -712,7 +713,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), - CM_PARSER_ADD_OBJECT (EArmObjProcHierarchyInfo, CmArmProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 055836a7e31e..e0af0fd336bb 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -460,20 +460,19 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 17 | GIC ITS Identifier Array | | | 18 | ID Mapping Array | | | 19 | SMMU Interrupt Array | | -| 20 | Processor Hierarchy Info | Move to Arch Common NS | -| 21 | Cache Info | Move to Arch Common NS | -| 22 | CMN 600 Info | | -| 23 | Reserved Memory Range Node | | -| 24 | Memory Range Descriptor | | -| 25 | Continuous Performance Control Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 31 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 32 | Embedded Trace Extension/Module Info | | -| 33 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 20 | Cache Info | Move to Arch Common NS | +| 21 | CMN 600 Info | | +| 22 | Reserved Memory Range Node | | +| 23 | Memory Range Descriptor | | +| 24 | Continuous Performance Control Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 30 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 31 | Embedded Trace Extension/Module Info | | +| 32 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,4 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 13 | Device Handle PCI | | | 14 | Generic Initiator Affinity Info | | | 15 | Low Power Idle State Info | | +| 16 | Processor Hierarchy Info | | | `*` | All other values are reserved. | | + From 368450bf8d52d161ceb2c0636ee34c74015ca9ce Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 13:47:52 +0000 Subject: [PATCH 31/56] DynamicTablesPkg: Move Cache info to Arch Common Move the Cache info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PPTT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 31 +++++++++++ .../Include/ArmNameSpaceObjects.h | 55 ++++--------------- .../Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c | 18 +++--- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 25 ++++----- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 26 ++++----- 6 files changed, 80 insertions(+), 81 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 872f2eebb7c3..17cd552a3f74 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -37,6 +37,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity EArchCommonObjLpiInfo, ///< 15 - Lpi Info EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info + EArchCommonObjCacheInfo, ///< 17 - Cache Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -401,6 +402,36 @@ typedef struct CmArchCommonProcHierarchyInfo { UINT32 OverrideUid; } CM_ARCH_COMMON_PROC_HIERARCHY_INFO; +/** A structure that describes the Cache Type Structure (Type 1) in PPTT + + ID: EArchCommonObjCacheInfo +*/ +typedef struct CmArchCommonCacheInfo { + /// A unique token used to identify this object + CM_OBJECT_TOKEN Token; + /// Reference token for the next level of cache that is private to the same + /// CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN + /// means this entry represents the last cache level appropriate to the + /// processor hierarchy node structures using this entry. + CM_OBJECT_TOKEN NextLevelOfCacheToken; + /// Size of the cache in bytes + UINT32 Size; + /// Number of sets in the cache + UINT32 NumberOfSets; + /// Integer number of ways. The maximum associativity supported by + /// ACPI Cache type structure is limited to MAX_UINT8. However, + /// the maximum number of ways supported by the architecture is + /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field + /// is 32-bit wide. + UINT32 Associativity; + /// Cache attributes (ACPI 6.4 - January 2021, PPTT, Table 5.140) + UINT8 Attributes; + /// Line size in bytes + UINT16 LineSize; + /// Unique ID for the cache + UINT32 CacheId; +} CM_ARCH_COMMON_CACHE_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 4e9f0096ba60..eade2afcd028 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -48,19 +48,18 @@ typedef enum ArmObjectID { EArmObjGicItsIdentifierArray, ///< 17 - GIC ITS Identifier Array EArmObjIdMappingArray, ///< 18 - ID Mapping Array EArmObjSmmuInterruptArray, ///< 19 - SMMU Interrupt Array - EArmObjCacheInfo, ///< 20 - Cache Info - EArmObjCmn600Info, ///< 21 - CMN-600 Info - EArmObjRmr, ///< 22 - Reserved Memory Range Node - EArmObjMemoryRangeDescriptor, ///< 23 - Memory Range Descriptor - EArmObjCpcInfo, ///< 24 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 25 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 26 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 27 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 28 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 29 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 30 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 31 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 32 - P-State Dependency (PSD) Info + EArmObjCmn600Info, ///< 20 - CMN-600 Info + EArmObjRmr, ///< 21 - Reserved Memory Range Node + EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor + EArmObjCpcInfo, ///< 23 - Continuous Performance Control Info + EArmObjPccSubspaceType0Info, ///< 24 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 25 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 26 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 27 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 28 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 29 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 30 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 31 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -644,36 +643,6 @@ typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_SMMU_INTERRUPT; */ typedef CM_ARCH_COMMON_GENERIC_INTERRUPT CM_ARM_EXTENDED_INTERRUPT; -/** A structure that describes the Cache Type Structure (Type 1) in PPTT - - ID: EArmObjCacheInfo -*/ -typedef struct CmArmCacheInfo { - /// A unique token used to identify this object - CM_OBJECT_TOKEN Token; - /// Reference token for the next level of cache that is private to the same - /// CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN - /// means this entry represents the last cache level appropriate to the - /// processor hierarchy node structures using this entry. - CM_OBJECT_TOKEN NextLevelOfCacheToken; - /// Size of the cache in bytes - UINT32 Size; - /// Number of sets in the cache - UINT32 NumberOfSets; - /// Integer number of ways. The maximum associativity supported by - /// ACPI Cache type structure is limited to MAX_UINT8. However, - /// the maximum number of ways supported by the architecture is - /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field - /// is 32-bit wide. - UINT32 Associativity; - /// Cache attributes (ACPI 6.4 - January 2021, PPTT, Table 5.140) - UINT8 Attributes; - /// Line size in bytes - UINT16 LineSize; - /// Unique ID for the cache - UINT32 CacheId; -} CM_ARM_CACHE_INFO; - /** A structure that describes the CMN-600 hardware. ID: EArmObjCmn600Info diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c index 9485de707046..2b8088a07f44 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c @@ -33,7 +33,7 @@ Requirements: The following Configuration Manager Object(s) are used by this Generator: - EArchCommonObjProcHierarchyInfo (REQUIRED) - - EArmObjCacheInfo + - EArchCommonObjCacheInfo - EArchCommonObjCmRef - EArmObjGicCInfo (REQUIRED) */ @@ -53,9 +53,9 @@ GET_OBJECT_LIST ( from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjCacheInfo, - CM_ARM_CACHE_INFO + EObjNameSpaceArchCommon, + EArchCommonObjCacheInfo, + CM_ARCH_COMMON_CACHE_INFO ); /** @@ -117,7 +117,7 @@ GET_SIZE_OF_PPTT_STRUCTS ( GET_SIZE_OF_PPTT_STRUCTS ( CacheTypeStructs, sizeof (EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE), - CM_ARM_CACHE_INFO + CM_ARCH_COMMON_CACHE_INFO ); /** @@ -788,7 +788,7 @@ AddCacheTypeStructures ( EFI_STATUS Status; EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE *CacheStruct; PPTT_NODE_INDEXER *PpttNodeFound; - CM_ARM_CACHE_INFO *CacheInfoNode; + CM_ARCH_COMMON_CACHE_INFO *CacheInfoNode; PPTT_NODE_INDEXER *CacheNodeIterator; UINT32 NodeCount; BOOLEAN CacheIdUnique; @@ -814,7 +814,7 @@ AddCacheTypeStructures ( } for (NodeIndex = 0; NodeIndex < NodeCount; NodeIndex++) { - CacheInfoNode = (CM_ARM_CACHE_INFO *)CacheNodeIterator->Object; + CacheInfoNode = (CM_ARCH_COMMON_CACHE_INFO *)CacheNodeIterator->Object; // Populate the node header CacheStruct->Type = EFI_ACPI_6_4_PPTT_TYPE_CACHE; @@ -1075,7 +1075,7 @@ BuildPpttTable ( UINT32 CacheStructOffset; CM_ARCH_COMMON_PROC_HIERARCHY_INFO *ProcHierarchyNodeList; - CM_ARM_CACHE_INFO *CacheStructList; + CM_ARCH_COMMON_CACHE_INFO *CacheStructList; ACPI_PPTT_GENERATOR *Generator; @@ -1132,7 +1132,7 @@ BuildPpttTable ( // Get the cache info and update the processor topology structure count with // Cache Type Structures (Type 1) - Status = GetEArmObjCacheInfo ( + Status = GetEArchCommonObjCacheInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &CacheStructList, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index fd2a321bfb55..a162d614f9f0 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -163,19 +163,18 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 17 - GIC ITS Identifier Array NULL, ///< 18 - ID Mapping Array NULL, ///< 19 - SMMU Interrupt Array - TokenFixerNotImplemented, ///< 21 - Cache Info - NULL, ///< 22 - CMN-600 Info - NULL, ///< 23 - Reserved Memory Range Node - NULL, ///< 24 - Memory Range Descriptor - NULL, ///< 25 - Continuous Performance Control Info - NULL, ///< 26 - Pcc Subspace Type 0 Info - NULL, ///< 27 - Pcc Subspace Type 2 Info - NULL, ///< 28 - Pcc Subspace Type 2 Info - NULL, ///< 29 - Pcc Subspace Type 3 Info - NULL, ///< 30 - Pcc Subspace Type 4 Info - NULL, ///< 31 - Pcc Subspace Type 5 Info - NULL, ///< 32 - Embedded Trace Extension/Module Info - NULL ///< 33 - P-State Dependency (PSD) Info + NULL, ///< 20 - CMN-600 Info + NULL, ///< 21 - Reserved Memory Range Node + NULL, ///< 22 - Memory Range Descriptor + NULL, ///< 23 - Continuous Performance Control Info + NULL, ///< 24 - Pcc Subspace Type 0 Info + NULL, ///< 25 - Pcc Subspace Type 2 Info + NULL, ///< 26 - Pcc Subspace Type 2 Info + NULL, ///< 27 - Pcc Subspace Type 3 Info + NULL, ///< 28 - Pcc Subspace Type 4 Info + NULL, ///< 29 - Pcc Subspace Type 5 Info + NULL, ///< 30 - Embedded Trace Extension/Module Info + NULL ///< 31 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index c48e29e5053d..5440f9993b67 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -337,9 +337,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonProcHierarchyInfoParser[] = { { "OverrideUid", 4, "0x%x", NULL } }; -/** A parser for EArmObjCacheInfo. +/** A parser for EArchCommonObjCacheInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmCacheInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonCacheInfoParser[] = { { "Token", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "NextLevelOfCacheToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }, { "Size", 4, "0x%x", NULL }, @@ -687,6 +687,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjGenericInitiatorAffinityInfo,CmArchCommonGenericInitiatorAffinityInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -713,7 +714,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjGicItsIdentifierArray, CmArmGicItsIdentifierParser), CM_PARSER_ADD_OBJECT (EArmObjIdMappingArray, CmArmIdMappingParser), CM_PARSER_ADD_OBJECT (EArmObjSmmuInterruptArray, CmArchCommonGenericInterruptParser), - CM_PARSER_ADD_OBJECT (EArmObjCacheInfo, CmArmCacheInfoParser), CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index e0af0fd336bb..7865731841d6 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -460,19 +460,18 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 17 | GIC ITS Identifier Array | | | 18 | ID Mapping Array | | | 19 | SMMU Interrupt Array | | -| 20 | Cache Info | Move to Arch Common NS | -| 21 | CMN 600 Info | | -| 22 | Reserved Memory Range Node | | -| 23 | Memory Range Descriptor | | -| 24 | Continuous Performance Control Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 30 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 31 | Embedded Trace Extension/Module Info | | -| 32 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 20 | CMN 600 Info | | +| 21 | Reserved Memory Range Node | | +| 22 | Memory Range Descriptor | | +| 23 | Continuous Performance Control Info | Move to Arch Common NS | +| 24 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 29 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 30 | Embedded Trace Extension/Module Info | | +| 31 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 14 | Generic Initiator Affinity Info | | | 15 | Low Power Idle State Info | | | 16 | Processor Hierarchy Info | | +| 17 | Cache Info | | | `*` | All other values are reserved. | | From 602619fa5032dcd81905a16b2b1e16a030193356 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 14:00:01 +0000 Subject: [PATCH 32/56] DynamicTablesPkg: Move Continuous perf control info to Arch Common Move the Continuous perfformance control info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT CPU topology generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 19 ++++++ .../Include/ArmNameSpaceObjects.h | 37 +++--------- .../SsdtCpuTopologyGenerator.c | 12 ++-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 15 +++-- .../ConfigurationManagerObjectParser.c | 6 +- DynamicTablesPkg/Readme.md | 60 +++++++++---------- 6 files changed, 74 insertions(+), 75 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 17cd552a3f74..63b24de2f2f1 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -38,6 +38,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjLpiInfo, ///< 15 - Lpi Info EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info EArchCommonObjCacheInfo, ///< 17 - Cache Info + EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -432,6 +433,24 @@ typedef struct CmArchCommonCacheInfo { UINT32 CacheId; } CM_ARCH_COMMON_CACHE_INFO; +/** A structure that describes the Cpc information. + + Continuous Performance Control is described in DSDT/SSDT and associated + to cpus/clusters in the cpu topology. + + Unsupported Optional registers should be encoded with NULL resource + Register {(SystemMemory, 0, 0, 0, 0)} + + For values that support Integer or Buffer, integer will be used + if buffer is NULL resource. + If resource is not NULL then Integer must be 0 + + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) + + ID: EArchCommonObjCpcInfo +*/ +typedef AML_CPC_INFO CM_ARCH_COMMON_CPC_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index eade2afcd028..b9d1202be365 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,15 +51,14 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjCpcInfo, ///< 23 - Continuous Performance Control Info - EArmObjPccSubspaceType0Info, ///< 24 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 25 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 26 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 27 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 28 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 29 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 30 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 31 - P-State Dependency (PSD) Info + EArmObjPccSubspaceType0Info, ///< 23 - Pcc Subspace Type 0 Info + EArmObjPccSubspaceType1Info, ///< 24 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 25 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 26 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 27 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 28 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 29 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 30 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -177,7 +176,7 @@ typedef struct CmArmGicCInfo { UINT32 AffinityFlags; /** Optional field: Reference Token for the Cpc info of this processor. - i.e. a token referencing a CM_ARM_CPC_INFO object. + i.e. a token referencing a CM_ARCH_COMMON_CPC_INFO object. */ CM_OBJECT_TOKEN CpcToken; @@ -715,24 +714,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes the Cpc information. - - Continuous Performance Control is described in DSDT/SSDT and associated - to cpus/clusters in the cpu topology. - - Unsupported Optional registers should be encoded with NULL resource - Register {(SystemMemory, 0, 0, 0, 0)} - - For values that support Integer or Buffer, integer will be used - if buffer is NULL resource. - If resource is not NULL then Integer must be 0 - - Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) - - ID: EArmObjCpcInfo -*/ -typedef AML_CPC_INFO CM_ARM_CPC_INFO; - /** A structure that describes a PCC Mailbox Register. */ diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index d7caca5a3a1e..8c9d1258b2d8 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -89,9 +89,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjCpcInfo, - CM_ARM_CPC_INFO + EObjNameSpaceArchCommon, + EArchCommonObjCpcInfo, + CM_ARCH_COMMON_CPC_INFO ); /** @@ -400,10 +400,10 @@ CreateAmlCpcNode ( IN AML_OBJECT_NODE_HANDLE *Node ) { - EFI_STATUS Status; - CM_ARM_CPC_INFO *CpcInfo; + EFI_STATUS Status; + CM_ARCH_COMMON_CPC_INFO *CpcInfo; - Status = GetEArmObjCpcInfo ( + Status = GetEArchCommonObjCpcInfo ( CfgMgrProtocol, GicCInfo->CpcToken, &CpcInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index a162d614f9f0..68db478c5789 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,15 +166,14 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Continuous Performance Control Info - NULL, ///< 24 - Pcc Subspace Type 0 Info + NULL, ///< 23 - Pcc Subspace Type 0 Info + NULL, ///< 24 - Pcc Subspace Type 2 Info NULL, ///< 25 - Pcc Subspace Type 2 Info - NULL, ///< 26 - Pcc Subspace Type 2 Info - NULL, ///< 27 - Pcc Subspace Type 3 Info - NULL, ///< 28 - Pcc Subspace Type 4 Info - NULL, ///< 29 - Pcc Subspace Type 5 Info - NULL, ///< 30 - Embedded Trace Extension/Module Info - NULL ///< 31 - P-State Dependency (PSD) Info + NULL, ///< 26 - Pcc Subspace Type 3 Info + NULL, ///< 27 - Pcc Subspace Type 4 Info + NULL, ///< 28 - Pcc Subspace Type 5 Info + NULL, ///< 29 - Embedded Trace Extension/Module Info + NULL ///< 30 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 5440f9993b67..54ecc66c5b40 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -479,9 +479,9 @@ STATIC CONST CM_OBJ_PARSER CmArmMemoryRangeDescriptorInfoParser[] = { { "Length", 8, "0x%llx", NULL }, }; -/** A parser for EArmObjCpcInfo. +/** A parser for EArchCommonObjCpcInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonCpcInfoParser[] = { { "Revision", 4, "0x%lx", NULL }, { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE), NULL, NULL, AcpiGenericAddressParser, @@ -688,6 +688,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjLpiInfo, CmArchCommonLpiInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -717,7 +718,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjCpcInfo, CmArmCpcInfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 7865731841d6..8ac9d126b834 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,38 +463,38 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Continuous Performance Control Info | Move to Arch Common NS | -| 24 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 29 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 30 | Embedded Trace Extension/Module Info | | -| 31 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Pcc Subspace Type 0 Info | Move to Arch Common NS | +| 24 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 28 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 29 | Embedded Trace Extension/Module Info | | +| 30 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: -| ID | Description | Comments | -| ---: | :-------------------------- | :--- | -| 0 | Reserved | | -| 1 | Power Management Profile Info | | -| 2 | Serial Port Info | | -| 3 | Serial Console Port Info | | -| 4 | Serial Debug Port Info | | -| 5 | Hypervisor Vendor Id | | -| 6 | Fixed feature flags for FADT | | -| 7 | CM Object Reference | | -| 8 | PCI Configuration Space Info | | -| 9 | PCI Address Map Info | | -| 10 | PCI Interrupt Map Info | | -| 11 | Memory Affinity Info | | -| 12 | Device Handle Acpi | | -| 13 | Device Handle PCI | | -| 14 | Generic Initiator Affinity Info | | -| 15 | Low Power Idle State Info | | -| 16 | Processor Hierarchy Info | | -| 17 | Cache Info | | -| `*` | All other values are reserved. | | +| ID | Description | Comments | +| ---: | :-------------------------- | :--- | +| 0 | Reserved | | +| 1 | Power Management Profile Info | | +| 2 | Serial Port Info | | +| 3 | Serial Console Port Info | | +| 4 | Serial Debug Port Info | | +| 5 | Hypervisor Vendor Id | | +| 6 | Fixed feature flags for FADT | | +| 7 | CM Object Reference | | +| 8 | PCI Configuration Space Info | | +| 9 | PCI Address Map Info | | +| 10 | PCI Interrupt Map Info | | +| 11 | Memory Affinity Info | | +| 12 | Device Handle Acpi | | +| 13 | Device Handle PCI | | +| 14 | Generic Initiator Affinity Info | | +| 15 | Low Power Idle State Info | | +| 16 | Processor Hierarchy Info | | +| 17 | Cache Info | | +| 18 | Continuous Performance Control Info | | +| `*` | All other values are reserved. | | From dcf51fc15cbe2ead1add6f1daba3c09b08d5f8d8 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 14:26:15 +0000 Subject: [PATCH 33/56] DynamicTablesPkg: Move PCC structure definitions to Arch Common Move PCC structure definitions from Arm Namespace header file to the Arch Common namespace header file. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 72 +++++++++++++++++++ .../Include/ArmNameSpaceObjects.h | 72 ------------------- 2 files changed, 72 insertions(+), 72 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 63b24de2f2f1..e21e2ca4e0d2 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -451,6 +451,78 @@ typedef struct CmArchCommonCacheInfo { */ typedef AML_CPC_INFO CM_ARCH_COMMON_CPC_INFO; +/** A structure that describes a + PCC Mailbox Register. +*/ +typedef struct PccMailboxRegisterInfo { + /// GAS describing the Register. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE Register; + + /** Mask of bits to preserve when writing. + + This mask is also used for registers. The Register is only read + and there is no write mask required. E.g.: + - Error Status mask (Cf. PCC Subspace types 3/4/5). + - Command Complete Check mask (Cf. PCC Subspace types 3/4/5). + */ + UINT64 PreserveMask; + + /// Mask of bits to set when writing. + UINT64 WriteMask; +} PCC_MAILBOX_REGISTER_INFO; + +/** A structure that describes the + PCC Subspace CHannel Timings. +*/ +typedef struct PccSubspaceChannelTimingInfo { + /// Expected latency to process a command, in microseconds. + UINT32 NominalLatency; + + /** Maximum number of periodic requests that the subspace channel can + support, reported in commands per minute. 0 indicates no limitation. + + This field is ignored for the PCC Subspace type 5 (HW Registers based). + */ + UINT32 MaxPeriodicAccessRate; + + /** Minimum amount of time that OSPM must wait after the completion + of a command before issuing the next command, in microseconds. + */ + UINT16 MinRequestTurnaroundTime; +} PCC_SUBSPACE_CHANNEL_TIMING_INFO; + +/** A structure that describes a + Generic PCC Subspace (Type 0). +*/ +typedef struct PccSubspaceGenericInfo { + /** Subspace Id. + + Cf. ACPI 6.4, s14.7 Referencing the PCC address space + Cf. s14.1.2 Platform Communications Channel Subspace Structures + The subspace ID of a PCC subspace is its index in the array of + subspace structures, starting with subspace 0. + + At most 256 subspaces are supported. + */ + UINT8 SubspaceId; + + /// Table type (or subspace). + UINT8 Type; + + /// Base address of the shared memory range. + /// This field is ignored for the PCC Subspace type 5 (HW Registers based). + UINT64 BaseAddress; + + /// Address length. + UINT64 AddressLength; + + /// Doorbell Register. + PCC_MAILBOX_REGISTER_INFO DoorbellReg; + + /// Mailbox Timings. + PCC_SUBSPACE_CHANNEL_TIMING_INFO ChannelTiming; +} PCC_SUBSPACE_GENERIC_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index b9d1202be365..e9a2cb0fe6c5 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -714,78 +714,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Mailbox Register. -*/ -typedef struct PccMailboxRegisterInfo { - /// GAS describing the Register. - EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE Register; - - /** Mask of bits to preserve when writing. - - This mask is also used for registers. The Register is only read - and there is no write mask required. E.g.: - - Error Status mask (Cf. PCC Subspace types 3/4/5). - - Command Complete Check mask (Cf. PCC Subspace types 3/4/5). - */ - UINT64 PreserveMask; - - /// Mask of bits to set when writing. - UINT64 WriteMask; -} PCC_MAILBOX_REGISTER_INFO; - -/** A structure that describes the - PCC Subspace CHannel Timings. -*/ -typedef struct PccSubspaceChannelTimingInfo { - /// Expected latency to process a command, in microseconds. - UINT32 NominalLatency; - - /** Maximum number of periodic requests that the subspace channel can - support, reported in commands per minute. 0 indicates no limitation. - - This field is ignored for the PCC Subspace type 5 (HW Registers based). - */ - UINT32 MaxPeriodicAccessRate; - - /** Minimum amount of time that OSPM must wait after the completion - of a command before issuing the next command, in microseconds. - */ - UINT16 MinRequestTurnaroundTime; -} PCC_SUBSPACE_CHANNEL_TIMING_INFO; - -/** A structure that describes a - Generic PCC Subspace (Type 0). -*/ -typedef struct CmArmPccSubspaceGenericInfo { - /** Subspace Id. - - Cf. ACPI 6.4, s14.7 Referencing the PCC address space - Cf. s14.1.2 Platform Communications Channel Subspace Structures - The subspace ID of a PCC subspace is its index in the array of - subspace structures, starting with subspace 0. - - At most 256 subspaces are supported. - */ - UINT8 SubspaceId; - - /// Table type (or subspace). - UINT8 Type; - - /// Base address of the shared memory range. - /// This field is ignored for the PCC Subspace type 5 (HW Registers based). - UINT64 BaseAddress; - - /// Address length. - UINT64 AddressLength; - - /// Doorbell Register. - PCC_MAILBOX_REGISTER_INFO DoorbellReg; - - /// Mailbox Timings. - PCC_SUBSPACE_CHANNEL_TIMING_INFO ChannelTiming; -} PCC_SUBSPACE_GENERIC_INFO; - /** A structure that describes a PCC Subspace of type 0 (Generic). From 19958979e089afbfe694bb18106141baa66b9901 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:11:36 +0000 Subject: [PATCH 34/56] DynamicTablesPkg: Move PCC Type0 info to Arch Common Move the PCC Subspace Type0 info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PCCT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 8 ++ .../Include/ArmNameSpaceObjects.h | 22 ++-- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c | 104 +++++++++--------- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h | 5 +- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 13 +-- .../ConfigurationManagerObjectParser.c | 22 ++-- DynamicTablesPkg/Readme.md | 16 +-- 7 files changed, 96 insertions(+), 94 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index e21e2ca4e0d2..4ce2d7b48ebf 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -39,6 +39,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info EArchCommonObjCacheInfo, ///< 17 - Cache Info EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info + EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -523,6 +524,13 @@ typedef struct PccSubspaceGenericInfo { PCC_SUBSPACE_CHANNEL_TIMING_INFO ChannelTiming; } PCC_SUBSPACE_GENERIC_INFO; +/** A structure that describes a + PCC Subspace of type 0 (Generic). + + ID: EArchCommonObjPccSubspaceType0Info +*/ +typedef PCC_SUBSPACE_GENERIC_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index e9a2cb0fe6c5..a28415c77687 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,14 +51,13 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjPccSubspaceType0Info, ///< 23 - Pcc Subspace Type 0 Info - EArmObjPccSubspaceType1Info, ///< 24 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 25 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 26 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 27 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 28 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 29 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 30 - P-State Dependency (PSD) Info + EArmObjPccSubspaceType1Info, ///< 23 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType2Info, ///< 24 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 25 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 26 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 27 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 28 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 29 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -714,13 +713,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Subspace of type 0 (Generic). - - ID: EArmObjPccSubspaceType0Info -*/ -typedef PCC_SUBSPACE_GENERIC_INFO CM_ARM_PCC_SUBSPACE_TYPE0_INFO; - /** A structure that describes a PCC Subspace of type 1 (HW-Reduced). diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c index 36caf4aaeab7..575ab31f7ff2 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c @@ -29,7 +29,7 @@ Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjPccSubspaceType0Info + - EArchCommonObjPccSubspaceType0Info - EArmObjPccSubspaceType1Info - EArmObjPccSubspaceType2Info - EArmObjPccSubspaceType3Info @@ -41,9 +41,9 @@ Subspace of Type 0 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType0Info, - CM_ARM_PCC_SUBSPACE_TYPE0_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType0Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO ); /** This macro expands to a function that retrieves the PCC @@ -164,11 +164,12 @@ MappingTableFree ( } } -/** Add a new entry for CmArmPccSubspace at Index. +/** Add a new entry for PccSubspace at Index. @param [in] MappingTable The mapping table structure. - @param [in] CmArmPccSubspace Pointer to a CM_ARM_PCC_SUBSPACE_TYPE[X]_INFO. - @param [in] Index Index at which CmArmPccSubspace must be added. + @param [in] PccSubspace A pointer to + CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO. + @param [in] Index Index at which PccSubspace must be added. This is the Subspace Id. @retval EFI_SUCCESS Success. @@ -180,13 +181,13 @@ EFI_STATUS EFIAPI MappingTableAdd ( IN MAPPING_TABLE *MappingTable, - IN VOID *CmArmPccSubspace, + IN VOID *PccSubspace, IN UINT32 Index ) { if ((MappingTable == NULL) || (MappingTable->Table == NULL) || - (CmArmPccSubspace == NULL)) + (PccSubspace == NULL)) { ASSERT_EFI_ERROR (EFI_INVALID_PARAMETER); return EFI_INVALID_PARAMETER; @@ -200,14 +201,15 @@ MappingTableAdd ( } // Just map the Pcc Subspace in the Table. - MappingTable->Table[Index] = CmArmPccSubspace; + MappingTable->Table[Index] = PccSubspace; return EFI_SUCCESS; } /** Parse the CmPccArray objects and add them to the MappingTable. @param [in] MappingTable The mapping table structure. - @param [in] CmPccArray Pointer to an array of CM_ARM_PCC_SUBSPACE_TYPE[X]_INFO. + @param [in] CmPccArray Pointer to an array of + CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO. @param [in] CmPccCount Count of objects in CmPccArray. @retval EFI_SUCCESS Success. @@ -242,7 +244,7 @@ MapPccSubspaceId ( switch (GenericPcc->Type) { case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_GENERIC: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE0_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO); break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS: @@ -304,8 +306,8 @@ STATIC EFI_STATUS EFIAPI AddSubspaceStructType0 ( - IN CM_ARM_PCC_SUBSPACE_TYPE0_INFO *PccCmObj, - IN EFI_ACPI_6_4_PCCT_SUBSPACE_GENERIC *PccAcpi + IN CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *PccCmObj, + IN EFI_ACPI_6_4_PCCT_SUBSPACE_GENERIC *PccAcpi ) { PCC_MAILBOX_REGISTER_INFO *Doorbell; @@ -360,11 +362,11 @@ AddSubspaceStructType1 ( IN EFI_ACPI_6_4_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS *PccAcpi ) { - CM_ARM_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; - PCC_MAILBOX_REGISTER_INFO *Doorbell; - PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; + PCC_MAILBOX_REGISTER_INFO *Doorbell; + PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; - GenericPccCmObj = (CM_ARM_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; + GenericPccCmObj = (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; if ((PccCmObj == NULL) || (GenericPccCmObj->Type != EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS) || @@ -420,12 +422,12 @@ AddSubspaceStructType2 ( IN EFI_ACPI_6_4_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS *PccAcpi ) { - CM_ARM_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; - PCC_MAILBOX_REGISTER_INFO *Doorbell; - PCC_MAILBOX_REGISTER_INFO *PlatIrqAck; - PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; + PCC_MAILBOX_REGISTER_INFO *Doorbell; + PCC_MAILBOX_REGISTER_INFO *PlatIrqAck; + PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; - GenericPccCmObj = (CM_ARM_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; + GenericPccCmObj = (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; if ((PccCmObj == NULL) || (GenericPccCmObj->Type != EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS) || @@ -491,15 +493,15 @@ AddSubspaceStructType34 ( IN EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC *PccAcpi ) { - CM_ARM_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; - PCC_MAILBOX_REGISTER_INFO *Doorbell; - PCC_MAILBOX_REGISTER_INFO *PlatIrqAck; - PCC_MAILBOX_REGISTER_INFO *CmdCompleteCheck; - PCC_MAILBOX_REGISTER_INFO *CmdCompleteUpdate; - PCC_MAILBOX_REGISTER_INFO *ErrorStatus; - PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; + PCC_MAILBOX_REGISTER_INFO *Doorbell; + PCC_MAILBOX_REGISTER_INFO *PlatIrqAck; + PCC_MAILBOX_REGISTER_INFO *CmdCompleteCheck; + PCC_MAILBOX_REGISTER_INFO *CmdCompleteUpdate; + PCC_MAILBOX_REGISTER_INFO *ErrorStatus; + PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; - GenericPccCmObj = (CM_ARM_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; + GenericPccCmObj = (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; if ((PccCmObj == NULL) || ((GenericPccCmObj->Type != EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC) && @@ -603,13 +605,13 @@ AddSubspaceStructType5 ( IN EFI_ACPI_6_4_PCCT_SUBSPACE_5_HW_REGISTERS_COMMUNICATIONS *PccAcpi ) { - CM_ARM_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; - PCC_MAILBOX_REGISTER_INFO *Doorbell; - PCC_MAILBOX_REGISTER_INFO *CmdCompleteCheck; - PCC_MAILBOX_REGISTER_INFO *ErrorStatus; - PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *GenericPccCmObj; + PCC_MAILBOX_REGISTER_INFO *Doorbell; + PCC_MAILBOX_REGISTER_INFO *CmdCompleteCheck; + PCC_MAILBOX_REGISTER_INFO *ErrorStatus; + PCC_SUBSPACE_CHANNEL_TIMING_INFO *ChannelTiming; - GenericPccCmObj = (CM_ARM_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; + GenericPccCmObj = (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *)PccCmObj; if ((PccCmObj == NULL) || (GenericPccCmObj->Type != EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_5_HW_REGISTERS_COMMUNICATIONS) || @@ -705,7 +707,7 @@ PopulatePcctTable ( switch (((PCC_SUBSPACE_GENERIC_INFO *)CurrentPccSubspace)->Type) { case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_GENERIC: Status = AddSubspaceStructType0 ( - (CM_ARM_PCC_SUBSPACE_TYPE0_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_GENERIC *)PccBuffer ); @@ -822,18 +824,18 @@ BuildPcctTable ( MAPPING_TABLE *MappingTable; UINT32 MappingTableCount; - CM_ARM_PCC_SUBSPACE_TYPE0_INFO *PccType0; - UINT32 PccType0Count; - CM_ARM_PCC_SUBSPACE_TYPE1_INFO *PccType1; - UINT32 PccType1Count; - CM_ARM_PCC_SUBSPACE_TYPE2_INFO *PccType2; - UINT32 PccType2Count; - CM_ARM_PCC_SUBSPACE_TYPE3_INFO *PccType3; - UINT32 PccType3Count; - CM_ARM_PCC_SUBSPACE_TYPE4_INFO *PccType4; - UINT32 PccType4Count; - CM_ARM_PCC_SUBSPACE_TYPE5_INFO *PccType5; - UINT32 PccType5Count; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *PccType0; + UINT32 PccType0Count; + CM_ARM_PCC_SUBSPACE_TYPE1_INFO *PccType1; + UINT32 PccType1Count; + CM_ARM_PCC_SUBSPACE_TYPE2_INFO *PccType2; + UINT32 PccType2Count; + CM_ARM_PCC_SUBSPACE_TYPE3_INFO *PccType3; + UINT32 PccType3Count; + CM_ARM_PCC_SUBSPACE_TYPE4_INFO *PccType4; + UINT32 PccType4Count; + CM_ARM_PCC_SUBSPACE_TYPE5_INFO *PccType5; + UINT32 PccType5Count; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -863,7 +865,7 @@ BuildPcctTable ( // First get all the Pcc Subpace CmObj of type X. - Status = GetEArmObjPccSubspaceType0Info ( + Status = GetEArchCommonObjPccSubspaceType0Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType0, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h index 0631a1f5b74b..e1bca78c2ffa 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h @@ -19,7 +19,7 @@ */ typedef struct MappingTable { /// Mapping table for Subspace Ids. - /// Subspace ID/Index <-> CM_ARM_PCC_SUBSPACE_TYPE[X]_INFO pointer + /// Subspace ID/Index <-> CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO pointer VOID **Table; /// Number of entries in the Table. @@ -34,7 +34,8 @@ typedef struct AcpiPcctGenerator { // Private fields are defined from here. - /// Table to map: Subspace ID/Index <-> CM_ARM_PCC_SUBSPACE_TYPE[X]_INFO pointer + /// Table to map: + /// Subspace ID/Index <-> CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO pointer MAPPING_TABLE MappingTable; } ACPI_PCCT_GENERATOR; diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 68db478c5789..1691e6015bf8 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,14 +166,13 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Pcc Subspace Type 0 Info + NULL, ///< 23 - Pcc Subspace Type 2 Info NULL, ///< 24 - Pcc Subspace Type 2 Info - NULL, ///< 25 - Pcc Subspace Type 2 Info - NULL, ///< 26 - Pcc Subspace Type 3 Info - NULL, ///< 27 - Pcc Subspace Type 4 Info - NULL, ///< 28 - Pcc Subspace Type 5 Info - NULL, ///< 29 - Embedded Trace Extension/Module Info - NULL ///< 30 - P-State Dependency (PSD) Info + NULL, ///< 25 - Pcc Subspace Type 3 Info + NULL, ///< 26 - Pcc Subspace Type 4 Info + NULL, ///< 27 - Pcc Subspace Type 5 Info + NULL, ///< 28 - Embedded Trace Extension/Module Info + NULL ///< 29 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 54ecc66c5b40..e071fa460a40 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -574,9 +574,9 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceChannelTimingInfoParser[] = { { "MinRequestTurnaroundTime", 2, "0x%x", NULL }, }; -/** A parser for EArmObjPccSubspaceType0Info. +/** A parser for EArchCommonObjPccSubspaceType0Info. */ -STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType0InfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType0InfoParser[] = { { "SubspaceId", 1, "0x%x", NULL }, { "Type", 1, "0x%x", NULL }, { "BaseAddress", 8, "0x%llx", NULL }, @@ -593,8 +593,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType0InfoParser[] = { */ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), - NULL, NULL, CmArmPccSubspaceType0InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, + NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, + ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT), NULL, NULL, CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, @@ -604,8 +604,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = { */ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), - NULL, NULL, CmArmPccSubspaceType0InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, + NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, + ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL,NULL, CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO), @@ -617,8 +617,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = { */ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), - NULL, NULL, CmArmPccSubspaceType0InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, + NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, + ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL,NULL, CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, { "PlatIrqAckReg", sizeof (PCC_MAILBOX_REGISTER_INFO), @@ -639,8 +639,8 @@ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = { */ STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), - NULL, NULL, CmArmPccSubspaceType0InfoParser, - ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, + NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, + ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, { "Version", 2, "0x%x",NULL }, { "PlatIrq", sizeof (CM_ARCH_COMMON_GENERIC_INTERRUPT),NULL, NULL, CmArchCommonGenericInterruptParser, ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, @@ -689,6 +689,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjProcHierarchyInfo, CmArchCommonProcHierarchyInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -718,7 +719,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType0Info, CmArmPccSubspaceType0InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 8ac9d126b834..999422035984 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,14 +463,13 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Pcc Subspace Type 0 Info | Move to Arch Common NS | -| 24 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 28 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 29 | Embedded Trace Extension/Module Info | | -| 30 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Pcc Subspace Type 1 Info | Move to Arch Common NS | +| 24 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 27 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 28 | Embedded Trace Extension/Module Info | | +| 29 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 16 | Processor Hierarchy Info | | | 17 | Cache Info | | | 18 | Continuous Performance Control Info | | +| 19 | Pcc Subspace Type 0 Info | | | `*` | All other values are reserved. | | From 6d92b8f16428759dbd4b87edeca7007947c34b3f Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:20:39 +0000 Subject: [PATCH 35/56] DynamicTablesPkg: Move PCC Type1 info to Arch Common Move the PCC Subspace Type1 info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PCCT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 18 +++++++++++ .../Include/ArmNameSpaceObjects.h | 30 ++++--------------- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c | 18 +++++------ .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 11 ++++--- .../ConfigurationManagerObjectParser.c | 6 ++-- DynamicTablesPkg/Readme.md | 14 ++++----- 6 files changed, 48 insertions(+), 49 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 4ce2d7b48ebf..583ea0089146 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -40,6 +40,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjCacheInfo, ///< 17 - Cache Info EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info + EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -531,6 +532,23 @@ typedef struct PccSubspaceGenericInfo { */ typedef PCC_SUBSPACE_GENERIC_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO; +/** A structure that describes a + PCC Subspace of type 1 (HW-Reduced). + + ID: EArchCommonObjPccSubspaceType1Info +*/ +typedef struct CmArchCommonPccSubspaceType1Info { + /** Generic Pcc information. + + The Subspace of Type0 contains information that can be re-used + in other Subspace types. + */ + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + + /// Platform Interrupt. + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; +} CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index a28415c77687..8a62d9386263 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,13 +51,12 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjPccSubspaceType1Info, ///< 23 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType2Info, ///< 24 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 25 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 26 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 27 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 28 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 29 - P-State Dependency (PSD) Info + EArmObjPccSubspaceType2Info, ///< 23 - Pcc Subspace Type 2 Info + EArmObjPccSubspaceType3Info, ///< 24 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 25 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 26 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 27 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 28 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -713,23 +712,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Subspace of type 1 (HW-Reduced). - - ID: EArmObjPccSubspaceType1Info -*/ -typedef struct CmArmPccSubspaceType1Info { - /** Generic Pcc information. - - The Subspace of Type0 contains information that can be re-used - in other Subspace types. - */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; - - /// Platform Interrupt. - CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; -} CM_ARM_PCC_SUBSPACE_TYPE1_INFO; - /** A structure that describes a PCC Subspace of type 2 (HW-Reduced). diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c index 575ab31f7ff2..183d8cd221bb 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c @@ -30,7 +30,7 @@ The following Configuration Manager Object(s) are required by this Generator: - EArchCommonObjPccSubspaceType0Info - - EArmObjPccSubspaceType1Info + - EArchCommonObjPccSubspaceType1Info - EArmObjPccSubspaceType2Info - EArmObjPccSubspaceType3Info - EArmObjPccSubspaceType4Info @@ -50,9 +50,9 @@ GET_OBJECT_LIST ( Subspace of Type 1 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType1Info, - CM_ARM_PCC_SUBSPACE_TYPE1_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType1Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO ); /** This macro expands to a function that retrieves the PCC @@ -248,7 +248,7 @@ MapPccSubspaceId ( break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE1_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO); break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS: @@ -358,7 +358,7 @@ STATIC EFI_STATUS EFIAPI AddSubspaceStructType1 ( - IN CM_ARM_PCC_SUBSPACE_TYPE1_INFO *PccCmObj, + IN CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO *PccCmObj, IN EFI_ACPI_6_4_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS *PccAcpi ) { @@ -716,7 +716,7 @@ PopulatePcctTable ( case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS: Status = AddSubspaceStructType1 ( - (CM_ARM_PCC_SUBSPACE_TYPE1_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS *)PccBuffer ); @@ -826,7 +826,7 @@ BuildPcctTable ( CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO *PccType0; UINT32 PccType0Count; - CM_ARM_PCC_SUBSPACE_TYPE1_INFO *PccType1; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO *PccType1; UINT32 PccType1Count; CM_ARM_PCC_SUBSPACE_TYPE2_INFO *PccType2; UINT32 PccType2Count; @@ -876,7 +876,7 @@ BuildPcctTable ( goto error_handler; } - Status = GetEArmObjPccSubspaceType1Info ( + Status = GetEArchCommonObjPccSubspaceType1Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType1, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 1691e6015bf8..3a19870aad34 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -167,12 +167,11 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor NULL, ///< 23 - Pcc Subspace Type 2 Info - NULL, ///< 24 - Pcc Subspace Type 2 Info - NULL, ///< 25 - Pcc Subspace Type 3 Info - NULL, ///< 26 - Pcc Subspace Type 4 Info - NULL, ///< 27 - Pcc Subspace Type 5 Info - NULL, ///< 28 - Embedded Trace Extension/Module Info - NULL ///< 29 - P-State Dependency (PSD) Info + NULL, ///< 24 - Pcc Subspace Type 3 Info + NULL, ///< 25 - Pcc Subspace Type 4 Info + NULL, ///< 26 - Pcc Subspace Type 5 Info + NULL, ///< 27 - Embedded Trace Extension/Module Info + NULL ///< 28 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index e071fa460a40..f8e277f1805e 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -589,9 +589,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType0InfoParser[] = { ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser) }, }; -/** A parser for EArmObjPccSubspaceType1Info. +/** A parser for EArchCommonObjPccSubspaceType1Info. */ -STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType1InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, @@ -690,6 +690,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjCacheInfo, CmArchCommonCacheInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType1Info, CmArchCommonPccSubspaceType1InfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -719,7 +720,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType1Info, CmArmPccSubspaceType1InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 999422035984..3fa3dd9af948 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,13 +463,12 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Pcc Subspace Type 1 Info | Move to Arch Common NS | -| 24 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 27 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 28 | Embedded Trace Extension/Module Info | | -| 29 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Pcc Subspace Type 2 Info | Move to Arch Common NS | +| 24 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 26 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 27 | Embedded Trace Extension/Module Info | | +| 28 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 17 | Cache Info | | | 18 | Continuous Performance Control Info | | | 19 | Pcc Subspace Type 0 Info | | +| 20 | Pcc Subspace Type 1 Info | | | `*` | All other values are reserved. | | From e98ccd8392ffddc94f3fe1b9ad5ccc8162db5de4 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:26:56 +0000 Subject: [PATCH 36/56] DynamicTablesPkg: Move PCC Type2 info to Arch Common Move the PCC Subspace Type2 info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PCCT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 21 +++++++++++++ .../Include/ArmNameSpaceObjects.h | 31 +++---------------- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c | 18 +++++------ .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 11 +++---- .../ConfigurationManagerObjectParser.c | 6 ++-- DynamicTablesPkg/Readme.md | 12 +++---- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 583ea0089146..817c07f40d55 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -41,6 +41,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info + EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -549,6 +550,26 @@ typedef struct CmArchCommonPccSubspaceType1Info { CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO; +/** A structure that describes a + PCC Subspace of type 2 (HW-Reduced). + + ID: EArchCommonObjPccSubspaceType2Info +*/ +typedef struct CmArchCommonPccSubspaceType2Info { + /** Generic Pcc information. + + The Subspace of Type0 contains information that can be re-used + in other Subspace types. + */ + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + + /// Platform Interrupt. + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; + + /// Platform Interrupt Register. + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; +} CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 8a62d9386263..c287a855da87 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,12 +51,11 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjPccSubspaceType2Info, ///< 23 - Pcc Subspace Type 2 Info - EArmObjPccSubspaceType3Info, ///< 24 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 25 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 26 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 27 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 28 - P-State Dependency (PSD) Info + EArmObjPccSubspaceType3Info, ///< 23 - Pcc Subspace Type 3 Info + EArmObjPccSubspaceType4Info, ///< 24 - Pcc Subspace Type 4 Info + EArmObjPccSubspaceType5Info, ///< 25 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 26 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 27 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -712,26 +711,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Subspace of type 2 (HW-Reduced). - - ID: EArmObjPccSubspaceType2Info -*/ -typedef struct CmArmPccSubspaceType2Info { - /** Generic Pcc information. - - The Subspace of Type0 contains information that can be re-used - in other Subspace types. - */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; - - /// Platform Interrupt. - CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; - - /// Platform Interrupt Register. - PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; -} CM_ARM_PCC_SUBSPACE_TYPE2_INFO; - /** A structure that describes a PCC Subspace of type 3 (Extended) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c index 183d8cd221bb..552aca4af47c 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c @@ -31,7 +31,7 @@ this Generator: - EArchCommonObjPccSubspaceType0Info - EArchCommonObjPccSubspaceType1Info - - EArmObjPccSubspaceType2Info + - EArchCommonObjPccSubspaceType2Info - EArmObjPccSubspaceType3Info - EArmObjPccSubspaceType4Info - EArmObjPccSubspaceType5Info @@ -59,9 +59,9 @@ GET_OBJECT_LIST ( Subspace of Type 2 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType2Info, - CM_ARM_PCC_SUBSPACE_TYPE2_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType2Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO ); /** This macro expands to a function that retrieves the PCC @@ -252,7 +252,7 @@ MapPccSubspaceId ( break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE2_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO); break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC: @@ -418,7 +418,7 @@ STATIC EFI_STATUS EFIAPI AddSubspaceStructType2 ( - IN CM_ARM_PCC_SUBSPACE_TYPE2_INFO *PccCmObj, + IN CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO *PccCmObj, IN EFI_ACPI_6_4_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS *PccAcpi ) { @@ -725,7 +725,7 @@ PopulatePcctTable ( case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS: Status = AddSubspaceStructType2 ( - (CM_ARM_PCC_SUBSPACE_TYPE2_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS *)PccBuffer ); @@ -828,7 +828,7 @@ BuildPcctTable ( UINT32 PccType0Count; CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO *PccType1; UINT32 PccType1Count; - CM_ARM_PCC_SUBSPACE_TYPE2_INFO *PccType2; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO *PccType2; UINT32 PccType2Count; CM_ARM_PCC_SUBSPACE_TYPE3_INFO *PccType3; UINT32 PccType3Count; @@ -887,7 +887,7 @@ BuildPcctTable ( goto error_handler; } - Status = GetEArmObjPccSubspaceType2Info ( + Status = GetEArchCommonObjPccSubspaceType2Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType2, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 3a19870aad34..b73d0ded953d 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,12 +166,11 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Pcc Subspace Type 2 Info - NULL, ///< 24 - Pcc Subspace Type 3 Info - NULL, ///< 25 - Pcc Subspace Type 4 Info - NULL, ///< 26 - Pcc Subspace Type 5 Info - NULL, ///< 27 - Embedded Trace Extension/Module Info - NULL ///< 28 - P-State Dependency (PSD) Info + NULL, ///< 23 - Pcc Subspace Type 3 Info + NULL, ///< 24 - Pcc Subspace Type 4 Info + NULL, ///< 25 - Pcc Subspace Type 5 Info + NULL, ///< 26 - Embedded Trace Extension/Module Info + NULL ///< 27 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index f8e277f1805e..c3e18b5a9500 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -600,9 +600,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType1InfoParser[] = { ARRAY_SIZE (CmArchCommonGenericInterruptParser) }, }; -/** A parser for EArmObjPccSubspaceType2Info. +/** A parser for EArchCommonObjPccSubspaceType2Info. */ -STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType2InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, @@ -691,6 +691,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjCpcInfo, CmArchCommonCpcInfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType1Info, CmArchCommonPccSubspaceType1InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType2Info, CmArchCommonPccSubspaceType2InfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -720,7 +721,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType2Info, CmArmPccSubspaceType2InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 3fa3dd9af948..59b6f8d1eaa3 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,12 +463,11 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Pcc Subspace Type 2 Info | Move to Arch Common NS | -| 24 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 26 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 27 | Embedded Trace Extension/Module Info | | -| 28 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Pcc Subspace Type 3 Info | Move to Arch Common NS | +| 24 | Pcc Subspace Type 4 Info | Move to Arch Common NS | +| 25 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 26 | Embedded Trace Extension/Module Info | | +| 27 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 18 | Continuous Performance Control Info | | | 19 | Pcc Subspace Type 0 Info | | | 20 | Pcc Subspace Type 1 Info | | +| 21 | Pcc Subspace Type 2 Info | | | `*` | All other values are reserved. | | From c259d0bb508f34ca6ef795398377bf351eb037a2 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:38:58 +0000 Subject: [PATCH 37/56] DynamicTablesPkg: Move PCC Type 3 & 4 info to Arch Common Move the PCC Subspace Type 3 & 4 info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PCCT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 40 ++++++++++++++++ .../Include/ArmNameSpaceObjects.h | 46 ++----------------- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c | 34 +++++++------- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 8 ++-- .../ConfigurationManagerObjectParser.c | 8 ++-- DynamicTablesPkg/Readme.md | 10 ++-- 6 files changed, 72 insertions(+), 74 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 817c07f40d55..d4de70af5a6c 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -42,6 +42,8 @@ typedef enum ArchCommonObjectID { EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info + EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info + EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -570,6 +572,44 @@ typedef struct CmArchCommonPccSubspaceType2Info { PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO; +/** A structure that describes a + PCC Subspace of type 3 (Extended) + + ID: EArchCommonObjPccSubspaceType3Info +*/ +typedef struct CmArchCommonPccSubspaceType3Info { + /** Generic Pcc information. + + The Subspace of Type0 contains information that can be re-used + in other Subspace types. + */ + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + + /// Platform Interrupt. + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; + + /// Platform Interrupt Register. + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; + + /// Command Complete Check Register. + /// The WriteMask field is not used. + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; + + /// Command Complete Update Register. + PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg; + + /// Error Status Register. + /// The WriteMask field is not used. + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; +} CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO; + +/** A structure that describes a + PCC Subspace of type 4 (Extended) + + ID: EArchCommonObjPccSubspaceType4Info +*/ +typedef CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index c287a855da87..7977cef07a0a 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,11 +51,9 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjPccSubspaceType3Info, ///< 23 - Pcc Subspace Type 3 Info - EArmObjPccSubspaceType4Info, ///< 24 - Pcc Subspace Type 4 Info - EArmObjPccSubspaceType5Info, ///< 25 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 26 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 27 - P-State Dependency (PSD) Info + EArmObjPccSubspaceType5Info, ///< 23 - Pcc Subspace Type 5 Info + EArmObjEtInfo, ///< 24 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -711,44 +709,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Subspace of type 3 (Extended) - - ID: EArmObjPccSubspaceType3Info -*/ -typedef struct CmArmPccSubspaceType3Info { - /** Generic Pcc information. - - The Subspace of Type0 contains information that can be re-used - in other Subspace types. - */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; - - /// Platform Interrupt. - CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; - - /// Platform Interrupt Register. - PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; - - /// Command Complete Check Register. - /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; - - /// Command Complete Update Register. - PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg; - - /// Error Status Register. - /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; -} CM_ARM_PCC_SUBSPACE_TYPE3_INFO; - -/** A structure that describes a - PCC Subspace of type 4 (Extended) - - ID: EArmObjPccSubspaceType4Info -*/ -typedef CM_ARM_PCC_SUBSPACE_TYPE3_INFO CM_ARM_PCC_SUBSPACE_TYPE4_INFO; - /** A structure that describes a PCC Subspace of type 5 (HW-Registers). diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c index 552aca4af47c..0df6429b0f91 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c @@ -32,8 +32,8 @@ - EArchCommonObjPccSubspaceType0Info - EArchCommonObjPccSubspaceType1Info - EArchCommonObjPccSubspaceType2Info - - EArmObjPccSubspaceType3Info - - EArmObjPccSubspaceType4Info + - EArchCommonObjPccSubspaceType3Info + - EArchCommonObjPccSubspaceType4Info - EArmObjPccSubspaceType5Info */ @@ -68,18 +68,18 @@ GET_OBJECT_LIST ( Subspace of Type 3 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType3Info, - CM_ARM_PCC_SUBSPACE_TYPE3_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType3Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO ); /** This macro expands to a function that retrieves the PCC Subspace of Type 4 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType4Info, - CM_ARM_PCC_SUBSPACE_TYPE4_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType4Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO ); /** This macro expands to a function that retrieves the PCC @@ -256,11 +256,11 @@ MapPccSubspaceId ( break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE3_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO); break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE4_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO); break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_5_HW_REGISTERS_COMMUNICATIONS: @@ -489,7 +489,7 @@ STATIC EFI_STATUS EFIAPI AddSubspaceStructType34 ( - IN CM_ARM_PCC_SUBSPACE_TYPE3_INFO *PccCmObj, + IN CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO *PccCmObj, IN EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC *PccAcpi ) { @@ -734,7 +734,7 @@ PopulatePcctTable ( case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC: Status = AddSubspaceStructType34 ( - (CM_ARM_PCC_SUBSPACE_TYPE3_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC *)PccBuffer ); @@ -743,7 +743,7 @@ PopulatePcctTable ( case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC: Status = AddSubspaceStructType34 ( - (CM_ARM_PCC_SUBSPACE_TYPE4_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_4_EXTENDED_PCC *)PccBuffer ); @@ -830,9 +830,9 @@ BuildPcctTable ( UINT32 PccType1Count; CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO *PccType2; UINT32 PccType2Count; - CM_ARM_PCC_SUBSPACE_TYPE3_INFO *PccType3; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO *PccType3; UINT32 PccType3Count; - CM_ARM_PCC_SUBSPACE_TYPE4_INFO *PccType4; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO *PccType4; UINT32 PccType4Count; CM_ARM_PCC_SUBSPACE_TYPE5_INFO *PccType5; UINT32 PccType5Count; @@ -898,7 +898,7 @@ BuildPcctTable ( goto error_handler; } - Status = GetEArmObjPccSubspaceType3Info ( + Status = GetEArchCommonObjPccSubspaceType3Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType3, @@ -909,7 +909,7 @@ BuildPcctTable ( goto error_handler; } - Status = GetEArmObjPccSubspaceType4Info ( + Status = GetEArchCommonObjPccSubspaceType4Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType4, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index b73d0ded953d..112bef715166 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,11 +166,9 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Pcc Subspace Type 3 Info - NULL, ///< 24 - Pcc Subspace Type 4 Info - NULL, ///< 25 - Pcc Subspace Type 5 Info - NULL, ///< 26 - Embedded Trace Extension/Module Info - NULL ///< 27 - P-State Dependency (PSD) Info + NULL, ///< 23 - Pcc Subspace Type 5 Info + NULL, ///< 24 - Embedded Trace Extension/Module Info + NULL ///< 25 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index c3e18b5a9500..5f08f514faad 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -613,9 +613,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType2InfoParser[] = { ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, }; -/** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Info. +/** A parser for EArchCommonObjPccSubspaceType3Info or EArchCommonObjPccSubspaceType4Info. */ -STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType34InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, @@ -692,6 +692,8 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType0Info, CmArchCommonPccSubspaceType0InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType1Info, CmArchCommonPccSubspaceType1InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType2Info, CmArchCommonPccSubspaceType2InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType3Info, CmArchCommonPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType4Info, CmArchCommonPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -721,8 +723,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType3Info, CmArmPccSubspaceType34InfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType4Info, CmArmPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 59b6f8d1eaa3..1e45bcd5974e 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,11 +463,9 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Pcc Subspace Type 3 Info | Move to Arch Common NS | -| 24 | Pcc Subspace Type 4 Info | Move to Arch Common NS | -| 25 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 26 | Embedded Trace Extension/Module Info | | -| 27 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Pcc Subspace Type 5 Info | Move to Arch Common NS | +| 24 | Embedded Trace Extension/Module Info | | +| 25 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +494,7 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 19 | Pcc Subspace Type 0 Info | | | 20 | Pcc Subspace Type 1 Info | | | 21 | Pcc Subspace Type 2 Info | | +| 22 | Pcc Subspace Type 3 Info | | +| 23 | Pcc Subspace Type 4 Info | | | `*` | All other values are reserved. | | From a387b243984be55503f53d06decac23f6ec03258 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:45:15 +0000 Subject: [PATCH 38/56] DynamicTablesPkg: Move PCC Type 5 info to Arch Common Move the PCC Subspace Type 5 info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - PCCT generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 32 +++++++++++++++++ .../Include/ArmNameSpaceObjects.h | 36 ++----------------- .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c | 22 ++++++------ .../Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h | 4 +-- .../DynamicPlatRepoLib/CmObjectTokenFixer.c | 5 ++- .../ConfigurationManagerObjectParser.c | 6 ++-- DynamicTablesPkg/Readme.md | 6 ++-- 7 files changed, 55 insertions(+), 56 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index d4de70af5a6c..58a137e905d9 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -44,6 +44,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info + EArchCommonObjPccSubspaceType5Info, ///< 24 - Pcc Subspace Type 5 Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -610,6 +611,37 @@ typedef struct CmArchCommonPccSubspaceType3Info { */ typedef CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO; +/** A structure that describes a + PCC Subspace of type 5 (HW-Registers). + + ID: EArchCommonObjPccSubspaceType5Info +*/ +typedef struct CmArchCommonPccSubspaceType5Info { + /** Generic Pcc information. + + The Subspace of Type0 contains information that can be re-used + in other Subspace types. + + MaximumPeriodicAccessRate doesn't need to be populated for + this structure. + */ + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; + + /// Version. + UINT16 Version; + + /// Platform Interrupt. + CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; + + /// Command Complete Check Register. + /// The WriteMask field is not used. + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; + + /// Error Status Register. + /// The WriteMask field is not used. + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; +} CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 7977cef07a0a..724e614bb652 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -51,9 +51,8 @@ typedef enum ArmObjectID { EArmObjCmn600Info, ///< 20 - CMN-600 Info EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor - EArmObjPccSubspaceType5Info, ///< 23 - Pcc Subspace Type 5 Info - EArmObjEtInfo, ///< 24 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info + EArmObjEtInfo, ///< 23 - Embedded Trace Extension/Module Info + EArmObjPsdInfo, ///< 24 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -709,37 +708,6 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; -/** A structure that describes a - PCC Subspace of type 5 (HW-Registers). - - ID: EArmObjPccSubspaceType5Info -*/ -typedef struct CmArmPccSubspaceType5Info { - /** Generic Pcc information. - - The Subspace of Type0 contains information that can be re-used - in other Subspace types. - - MaximumPeriodicAccessRate doesn't need to be populated for - this structure. - */ - PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; - - /// Version. - UINT16 Version; - - /// Platform Interrupt. - CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq; - - /// Command Complete Check Register. - /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; - - /// Error Status Register. - /// The WriteMask field is not used. - PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; -} CM_ARM_PCC_SUBSPACE_TYPE5_INFO; - /** An enum describing the Arm Embedded Trace device type. */ typedef enum ArmEtType { diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c index 0df6429b0f91..205c44405785 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c @@ -34,7 +34,7 @@ - EArchCommonObjPccSubspaceType2Info - EArchCommonObjPccSubspaceType3Info - EArchCommonObjPccSubspaceType4Info - - EArmObjPccSubspaceType5Info + - EArchCommonObjPccSubspaceType5Info */ /** This macro expands to a function that retrieves the PCC @@ -86,9 +86,9 @@ GET_OBJECT_LIST ( Subspace of Type 5 Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPccSubspaceType5Info, - CM_ARM_PCC_SUBSPACE_TYPE5_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPccSubspaceType5Info, + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO ); /** The Platform is capable of generating an interrupt @@ -168,7 +168,7 @@ MappingTableFree ( @param [in] MappingTable The mapping table structure. @param [in] PccSubspace A pointer to - CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO. + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE[X]_INFO. @param [in] Index Index at which PccSubspace must be added. This is the Subspace Id. @@ -209,7 +209,7 @@ MappingTableAdd ( @param [in] MappingTable The mapping table structure. @param [in] CmPccArray Pointer to an array of - CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO. + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE[X]_INFO. @param [in] CmPccCount Count of objects in CmPccArray. @retval EFI_SUCCESS Success. @@ -264,7 +264,7 @@ MapPccSubspaceId ( break; case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_5_HW_REGISTERS_COMMUNICATIONS: - CmObjSize = sizeof (CM_ARM_PCC_SUBSPACE_TYPE5_INFO); + CmObjSize = sizeof (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO); break; default: @@ -601,7 +601,7 @@ STATIC EFI_STATUS EFIAPI AddSubspaceStructType5 ( - IN CM_ARM_PCC_SUBSPACE_TYPE5_INFO *PccCmObj, + IN CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO *PccCmObj, IN EFI_ACPI_6_4_PCCT_SUBSPACE_5_HW_REGISTERS_COMMUNICATIONS *PccAcpi ) { @@ -752,7 +752,7 @@ PopulatePcctTable ( case EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_5_HW_REGISTERS_COMMUNICATIONS: Status = AddSubspaceStructType5 ( - (CM_ARM_PCC_SUBSPACE_TYPE5_INFO *)CurrentPccSubspace, + (CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO *)CurrentPccSubspace, (EFI_ACPI_6_4_PCCT_SUBSPACE_5_HW_REGISTERS_COMMUNICATIONS *)PccBuffer ); @@ -834,7 +834,7 @@ BuildPcctTable ( UINT32 PccType3Count; CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO *PccType4; UINT32 PccType4Count; - CM_ARM_PCC_SUBSPACE_TYPE5_INFO *PccType5; + CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO *PccType5; UINT32 PccType5Count; ASSERT (This != NULL); @@ -920,7 +920,7 @@ BuildPcctTable ( goto error_handler; } - Status = GetEArmObjPccSubspaceType5Info ( + Status = GetEArchCommonObjPccSubspaceType5Info ( CfgMgrProtocol, CM_NULL_TOKEN, &PccType5, diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h index e1bca78c2ffa..b99bf91b41b2 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h @@ -19,7 +19,7 @@ */ typedef struct MappingTable { /// Mapping table for Subspace Ids. - /// Subspace ID/Index <-> CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO pointer + /// Subspace ID/Index <-> CM_ARCH_COMMON_PCC_SUBSPACE_TYPE[X]_INFO pointer VOID **Table; /// Number of entries in the Table. @@ -35,7 +35,7 @@ typedef struct AcpiPcctGenerator { // Private fields are defined from here. /// Table to map: - /// Subspace ID/Index <-> CM_[ARM|ARCH_COMMON]_PCC_SUBSPACE_TYPE[X]_INFO pointer + /// Subspace ID/Index <-> CM_ARCH_COMMON_PCC_SUBSPACE_TYPE[X]_INFO pointer MAPPING_TABLE MappingTable; } ACPI_PCCT_GENERATOR; diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 112bef715166..05fbdadf156b 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,9 +166,8 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Pcc Subspace Type 5 Info - NULL, ///< 24 - Embedded Trace Extension/Module Info - NULL ///< 25 - P-State Dependency (PSD) Info + NULL, ///< 23 - Embedded Trace Extension/Module Info + NULL ///< 24 - P-State Dependency (PSD) Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index 5f08f514faad..da7901a2c48c 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -635,9 +635,9 @@ STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType34InfoParser[] = { ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, }; -/** A parser for EArmObjPccSubspaceType5Info. +/** A parser for EArchCommonObjPccSubspaceType5Info. */ -STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPccSubspaceType5InfoParser[] = { { "GenericPccInfo", sizeof (PCC_SUBSPACE_GENERIC_INFO), NULL, NULL, CmArchCommonPccSubspaceType0InfoParser, ARRAY_SIZE (CmArchCommonPccSubspaceType0InfoParser) }, @@ -694,6 +694,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType2Info, CmArchCommonPccSubspaceType2InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType3Info, CmArchCommonPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType4Info, CmArchCommonPccSubspaceType34InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType5Info, CmArchCommonPccSubspaceType5InfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -723,7 +724,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjCmn600Info, CmArmCmn600InfoParser), CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), - CM_PARSER_ADD_OBJECT (EArmObjPccSubspaceType5Info, CmArmPccSubspaceType5InfoParser), CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax) diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index 1e45bcd5974e..d4c95a3c42c8 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -463,9 +463,8 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 20 | CMN 600 Info | | | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | -| 23 | Pcc Subspace Type 5 Info | Move to Arch Common NS | -| 24 | Embedded Trace Extension/Module Info | | -| 25 | P-State Dependency (PSD) Info | Move to Arch Common NS | +| 23 | Embedded Trace Extension/Module Info | | +| 24 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 21 | Pcc Subspace Type 2 Info | | | 22 | Pcc Subspace Type 3 Info | | | 23 | Pcc Subspace Type 4 Info | | +| 24 | Pcc Subspace Type 5 Info | | | `*` | All other values are reserved. | | From 01c62b6e89d80787b73001d06d980ea4b4d91478 Mon Sep 17 00:00:00 2001 From: Sami Mujawar Date: Mon, 11 Mar 2024 15:50:37 +0000 Subject: [PATCH 39/56] DynamicTablesPkg: Move PSD info to Arch Common Move the PSD info object from Arm Namespace to the Arch Common namespace. Correspondingly also update the following modules to reflect the changes introduced by the move: - SSDT CPU topology generator - ConfigurationManagerObjectParser - Dynamic Plat Repo TokenFixer map. Cc: Pierre Gondois Cc: Yeo Reum Yun Cc: AbdulLateef Attar Cc: Jeshua Smith Cc: Jeff Brasen Cc: Girish Mahadevan Cc: Leif Lindholm Cc: Meenakshi Aggarwal Signed-off-by: Sami Mujawar Signed-off-by: Pierre Gondois Reviewed-by: Sunil V L --- .../Include/ArchCommonNameSpaceObjects.h | 10 ++++++++++ DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 12 +----------- .../SsdtCpuTopologyGenerator.c | 14 +++++++------- .../Common/DynamicPlatRepoLib/CmObjectTokenFixer.c | 3 +-- .../ConfigurationManagerObjectParser.c | 6 +++--- DynamicTablesPkg/Readme.md | 2 +- 6 files changed, 23 insertions(+), 24 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 58a137e905d9..6de57dbbf223 100644 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -45,6 +45,7 @@ typedef enum ArchCommonObjectID { EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info EArchCommonObjPccSubspaceType5Info, ///< 24 - Pcc Subspace Type 5 Info + EArchCommonObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -642,6 +643,15 @@ typedef struct CmArchCommonPccSubspaceType5Info { PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO; +/** A structure that describes a + P-State Dependency (PSD) Info. + + Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency). + + ID: EArchCommonObjPsdInfo +*/ +typedef AML_PSD_INFO CM_ARCH_COMMON_PSD_INFO; + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 724e614bb652..958c3dc93cd3 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -52,7 +52,6 @@ typedef enum ArmObjectID { EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor EArmObjEtInfo, ///< 23 - Embedded Trace Extension/Module Info - EArmObjPsdInfo, ///< 24 - P-State Dependency (PSD) Info EArmObjMax } EARM_OBJECT_ID; @@ -188,7 +187,7 @@ typedef struct CmArmGicCInfo { CM_OBJECT_TOKEN EtToken; /** Optional field: Reference Token for the Psd info of this processor. - i.e. a token referencing a CM_ARM_PSD_INFO object. + i.e. a token referencing a CM_ARCH_COMMON_PSD_INFO object. */ CM_OBJECT_TOKEN PsdToken; } CM_ARM_GICC_INFO; @@ -724,15 +723,6 @@ typedef struct CmArmEtInfo { ARM_ET_TYPE EtType; } CM_ARM_ET_INFO; -/** A structure that describes a - P-State Dependency (PSD) Info. - - Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency). - - ID: EArmObjPsdInfo -*/ -typedef AML_PSD_INFO CM_ARM_PSD_INFO; - #pragma pack() #endif // ARM_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c index 8c9d1258b2d8..2deaa4640c5c 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c @@ -42,7 +42,7 @@ - EArchCommonObjCmRef (OPTIONAL) - EArchCommonObjLpiInfo (OPTIONAL) - GetEArmObjEtInfo (OPTIONAL) - - EArmObjPsdInfo (OPTIONAL) + - EArchCommonObjPsdInfo (OPTIONAL) */ /** This macro expands to a function that retrieves the GIC @@ -109,9 +109,9 @@ GET_OBJECT_LIST ( information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjPsdInfo, - CM_ARM_PSD_INFO + EObjNameSpaceArchCommon, + EArchCommonObjPsdInfo, + CM_ARCH_COMMON_PSD_INFO ); /** Initialize the TokenTable. @@ -313,10 +313,10 @@ CreateAmlPsdNode ( IN AML_OBJECT_NODE_HANDLE *Node ) { - EFI_STATUS Status; - CM_ARM_PSD_INFO *PsdInfo; + EFI_STATUS Status; + CM_ARCH_COMMON_PSD_INFO *PsdInfo; - Status = GetEArmObjPsdInfo ( + Status = GetEArchCommonObjPsdInfo ( CfgMgrProtocol, GicCInfo->PsdToken, &PsdInfo, diff --git a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c index 05fbdadf156b..5325b20743e8 100644 --- a/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c +++ b/DynamicTablesPkg/Library/Common/DynamicPlatRepoLib/CmObjectTokenFixer.c @@ -166,8 +166,7 @@ CM_OBJECT_TOKEN_FIXER TokenFixer[EArmObjMax] = { NULL, ///< 20 - CMN-600 Info NULL, ///< 21 - Reserved Memory Range Node NULL, ///< 22 - Memory Range Descriptor - NULL, ///< 23 - Embedded Trace Extension/Module Info - NULL ///< 24 - P-State Dependency (PSD) Info + NULL ///< 23 - Embedded Trace Extension/Module Info }; /** CmObj token fixer. diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c index da7901a2c48c..e726b2c61602 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c @@ -658,9 +658,9 @@ STATIC CONST CM_OBJ_PARSER CmArmEtInfo[] = { { "EtType", sizeof (ARM_ET_TYPE), "0x%x", NULL } }; -/** A parser for EArmObjPsdInfo. +/** A parser for EArchCommonObjPsdInfo. */ -STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = { +STATIC CONST CM_OBJ_PARSER CmArchCommonPsdInfoParser[] = { { "Revision", 1, "0x%x", NULL }, { "DomainId", 4, "0x%x", NULL }, { "CoordType", 4, "0x%x", NULL }, @@ -695,6 +695,7 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArchCommonNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType3Info, CmArchCommonPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType4Info, CmArchCommonPccSubspaceType34InfoParser), CM_PARSER_ADD_OBJECT (EArchCommonObjPccSubspaceType5Info, CmArchCommonPccSubspaceType5InfoParser), + CM_PARSER_ADD_OBJECT (EArchCommonObjPsdInfo, CmArchCommonPsdInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArchCommonObjMax) }; @@ -725,7 +726,6 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { CM_PARSER_ADD_OBJECT (EArmObjRmr, CmArmRmrInfoParser), CM_PARSER_ADD_OBJECT (EArmObjMemoryRangeDescriptor, CmArmMemoryRangeDescriptorInfoParser), CM_PARSER_ADD_OBJECT (EArmObjEtInfo, CmArmEtInfo), - CM_PARSER_ADD_OBJECT (EArmObjPsdInfo, CmArmPsdInfoParser), CM_PARSER_ADD_OBJECT_RESERVED (EArmObjMax) }; diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index d4c95a3c42c8..7790b14636ff 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -464,7 +464,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 21 | Reserved Memory Range Node | | | 22 | Memory Range Descriptor | | | 23 | Embedded Trace Extension/Module Info | | -| 24 | P-State Dependency (PSD) Info | Move to Arch Common NS | | `*` | All other values are reserved. | | #### Object ID's in the Arch Common Namespace: @@ -496,5 +495,6 @@ The CM_OBJECT_ID type is used to identify the Configuration Manager | 22 | Pcc Subspace Type 3 Info | | | 23 | Pcc Subspace Type 4 Info | | | 24 | Pcc Subspace Type 5 Info | | +| 25 | P-State Dependency (PSD) Info | | | `*` | All other values are reserved. | | From 050a688c05131a891a057025f49a9eeda081dcc2 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 40/56] DynamicTablesPkg: Acpi: Move generic libraries to common folder Some of the ACPI table generators are generic enough to be re-used by other architectures. Move the following generators to a 'Common' folder: - AcpiDbg2Lib - AcpiFadtLib - AcpiMcfgLib - AcpiPcctLib - AcpiPpttLib - AcpiRawLib - AcpiSpcrLib - AcpiSratLib - SsdtSerialPortLib - SsdtCpuTopologyLib - SsdtPcieLib and update DynamicTables.dsc.inc accordingly. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- DynamicTablesPkg/DynamicTables.dsc.inc | 64 +++++++++++-------- .../AcpiDbg2Lib/AcpiDbg2Lib.inf} | 0 .../AcpiDbg2Lib}/Dbg2Generator.c | 0 .../AcpiFadtLib/AcpiFadtLib.inf} | 0 .../AcpiFadtLib}/FadtGenerator.c | 0 .../AcpiMcfgLib/AcpiMcfgLib.inf} | 0 .../AcpiMcfgLib}/McfgGenerator.c | 0 .../AcpiPcctLib/AcpiPcctLib.inf} | 0 .../AcpiPcctLib}/PcctGenerator.c | 0 .../AcpiPcctLib}/PcctGenerator.h | 0 .../AcpiPpttLib/AcpiPpttLib.inf} | 0 .../AcpiPpttLib}/PpttGenerator.c | 0 .../AcpiPpttLib}/PpttGenerator.h | 0 .../AcpiRawLib/AcpiRawLib.inf} | 0 .../AcpiRawLib}/RawGenerator.c | 0 .../AcpiSpcrLib/AcpiSpcrLib.inf} | 0 .../AcpiSpcrLib}/SpcrGenerator.c | 0 .../AcpiSratLib/AcpiSratLib.inf} | 0 .../AcpiSratLib}/SratGenerator.c | 0 .../SsdtCpuTopologyGenerator.c | 0 .../SsdtCpuTopologyGenerator.h | 0 .../SsdtCpuTopologyLib.inf} | 0 .../AcpiSsdtPcieLib}/SsdtPcieGenerator.c | 0 .../AcpiSsdtPcieLib}/SsdtPcieGenerator.h | 0 .../AcpiSsdtPcieLib/SsdtPcieLib.inf} | 0 .../SsdtSerialPortGenerator.c | 0 .../SsdtSerialPortLib.inf} | 0 27 files changed, 38 insertions(+), 26 deletions(-) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf => Common/AcpiDbg2Lib/AcpiDbg2Lib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiDbg2LibArm => Common/AcpiDbg2Lib}/Dbg2Generator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf => Common/AcpiFadtLib/AcpiFadtLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiFadtLibArm => Common/AcpiFadtLib}/FadtGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf => Common/AcpiMcfgLib/AcpiMcfgLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiMcfgLibArm => Common/AcpiMcfgLib}/McfgGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPcctLibArm/AcpiPcctLibArm.inf => Common/AcpiPcctLib/AcpiPcctLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPcctLibArm => Common/AcpiPcctLib}/PcctGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPcctLibArm => Common/AcpiPcctLib}/PcctGenerator.h (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPpttLibArm/AcpiPpttLibArm.inf => Common/AcpiPpttLib/AcpiPpttLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPpttLibArm => Common/AcpiPpttLib}/PpttGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiPpttLibArm => Common/AcpiPpttLib}/PpttGenerator.h (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiRawLibArm/AcpiRawLibArm.inf => Common/AcpiRawLib/AcpiRawLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiRawLibArm => Common/AcpiRawLib}/RawGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf => Common/AcpiSpcrLib/AcpiSpcrLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSpcrLibArm => Common/AcpiSpcrLib}/SpcrGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSratLibArm/AcpiSratLibArm.inf => Common/AcpiSratLib/AcpiSratLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSratLibArm => Common/AcpiSratLib}/SratGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtCpuTopologyLibArm => Common/AcpiSsdtCpuTopologyLib}/SsdtCpuTopologyGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtCpuTopologyLibArm => Common/AcpiSsdtCpuTopologyLib}/SsdtCpuTopologyGenerator.h (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyLibArm.inf => Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtPcieLibArm => Common/AcpiSsdtPcieLib}/SsdtPcieGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtPcieLibArm => Common/AcpiSsdtPcieLib}/SsdtPcieGenerator.h (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf => Common/AcpiSsdtPcieLib/SsdtPcieLib.inf} (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtSerialPortLibArm => Common/AcpiSsdtSerialPortLib}/SsdtSerialPortGenerator.c (100%) rename DynamicTablesPkg/Library/Acpi/{Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf => Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf} (100%) diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc index 19ca62d6a85c..fa68b63ab12d 100644 --- a/DynamicTablesPkg/DynamicTables.dsc.inc +++ b/DynamicTablesPkg/DynamicTables.dsc.inc @@ -25,6 +25,25 @@ DynamicTablesScmiInfoLib|DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf [Components.common] + # + # Generators (Common) + # + DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf + + # AML Fixup (Common) + DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf + + # AML Codegen (Common) + DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf + # # Dynamic Tables Manager Dxe # @@ -38,51 +57,44 @@ [Components.ARM, Components.AARCH64] # - # Generators + # Generators (Arm specific) # - DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/AcpiPpttLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/AcpiRawLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/AcpiSratLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/AcpiPcctLibArm.inf - # AML Fixup - DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf + # AML Fixup (Arm specific) DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600LibArm.inf - # AML Codegen - DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf - # # Dynamic Table Factory Dxe # DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf { - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf + # Generators + # Common + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf + # Arm specific NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/AcpiPpttLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/AcpiRawLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/AcpiSratLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/AcpiPcctLibArm.inf # AML Fixup - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf + # Common + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf + # Arm specific NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCmn600LibArm/SsdtCmn600LibArm.inf # AML Codegen - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyLibArm.inf - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf + # Common + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf } diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/AcpiDbg2LibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiDbg2LibArm/Dbg2Generator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/FadtGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/McfgGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/AcpiPcctLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/AcpiPcctLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.h similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPcctLibArm/PcctGenerator.h rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.h diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/AcpiPpttLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/AcpiPpttLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.h similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiPpttLibArm/PpttGenerator.h rename to DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.h diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/AcpiRawLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/AcpiRawLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/RawGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/RawGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiRawLibArm/RawGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/RawGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/SpcrGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/AcpiSratLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/AcpiSratLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSratLibArm/SratGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.h rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.h similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerator.h rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.h diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtSerialPortLibArm/SsdtSerialPortLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf From 177001ed68969682497d8f2094bea53be7f3c925 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 41/56] DynamicTablesPkg: Acpi: Prepare common libraries to support other archs Allow other architectures to reuse ACPI common libraries by: - Removing the Arm prefix from the BASE_NAME - Moving Arm specific libraries/packages to ARM/AARCH64 specific sections in the .inf files Also remove the empty .inf sections. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf | 15 +++++++-------- .../Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf | 9 +-------- .../Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf | 9 +-------- .../Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf | 2 +- .../Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf | 2 +- .../Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf | 9 +-------- .../Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf | 9 +-------- .../Acpi/Common/AcpiSratLib/AcpiSratLib.inf | 2 +- .../AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf | 6 ++++-- .../Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf | 2 +- .../AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf | 6 ++++-- 11 files changed, 23 insertions(+), 48 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf index f7b7c1c025a6..32dcd20c082b 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiDbg2LibArm + BASE_NAME = AcpiDbg2Lib FILE_GUID = A17BA4F0-3DEB-4FE5-BD27-EC008E541B22 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -19,16 +19,20 @@ [Sources] Dbg2Generator.c +[Packages.ARM, Packages.AARCH64] + ArmPlatformPkg/ArmPlatformPkg.dec + [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec EmbeddedPkg/EmbeddedPkg.dec - ArmPlatformPkg/ArmPlatformPkg.dec DynamicTablesPkg/DynamicTablesPkg.dec +[LibraryClasses.ARM, LibraryClasses.AARCH64] + PL011UartLib + [LibraryClasses] BaseLib - PL011UartLib SsdtSerialPortFixupLib [FixedPcd] @@ -36,8 +40,3 @@ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits - -[Protocols] - -[Guids] - diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf index 8fe34013d420..c9cd850faac0 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiFadtLibArm + BASE_NAME = AcpiFadtLib FILE_GUID = 686FE5FE-B944-485F-8B1C-7D60E0056487 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -27,10 +27,3 @@ [LibraryClasses] BaseLib - -[Pcd] - -[Protocols] - -[Guids] - diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf index 1c7f085274e6..36c343d3875a 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiMcfgLibArm + BASE_NAME = AcpiMcfgLib FILE_GUID = 8C9BDCB2-72D4-4F30-A12D-1145C3807FF7 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -27,10 +27,3 @@ [LibraryClasses] BaseLib - -[Pcd] - -[Protocols] - -[Guids] - diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf index da54585c2dd9..666bdcab2225 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = AcpiPcctLibArm + BASE_NAME = AcpiPcctLib FILE_GUID = 38FE945C-D6ED-4CD6-8D20-FCEF3260D15A VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf index 2c7d19513d6c..a1c91a6eab74 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = AcpiPpttLibArm + BASE_NAME = AcpiPpttLib FILE_GUID = FA102D52-5A92-4F95-A097-1D53F9CF5959 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf index f2ab1b7111fb..8b461ea05b86 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiRawLib/AcpiRawLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiRawLibArm + BASE_NAME = AcpiRawLib FILE_GUID = 20F31568-D687-49BA-B326-CCD9D38EDE16 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -27,10 +27,3 @@ [LibraryClasses] BaseLib - -[Pcd] - -[Protocols] - -[Guids] - diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf index e11f878ec83e..80a61022da48 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/AcpiSpcrLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiSpcrLibArm + BASE_NAME = AcpiSpcrLib FILE_GUID = 55088136-7B78-4974-B1EE-F630150D0DE7 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -28,10 +28,3 @@ [LibraryClasses] BaseLib SsdtSerialPortFixupLib - -[Pcd] - -[Protocols] - -[Guids] - diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf index 5891dc4d1c7c..2f23f4e668e5 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = AcpiSratLibArm + BASE_NAME = AcpiSratLib FILE_GUID = 2CE21E0A-A39C-4B26-BC0E-526178036ACD VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf index 3e2d15474980..2d38fb30fb09 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = SsdtCpuTopologyLibArm + BASE_NAME = SsdtCpuTopologyLib FILE_GUID = F2835EB6-4B05-48D4-A475-147DA0F3755C VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -20,11 +20,13 @@ SsdtCpuTopologyGenerator.c SsdtCpuTopologyGenerator.h +[Packages.ARM, Packages.AARCH64] + ArmPlatformPkg/ArmPlatformPkg.dec + [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec EmbeddedPkg/EmbeddedPkg.dec - ArmPlatformPkg/ArmPlatformPkg.dec DynamicTablesPkg/DynamicTablesPkg.dec [LibraryClasses] diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf index c2a1acb57066..440b0d721214 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = SsdtPcieLibArm + BASE_NAME = SsdtPcieLib FILE_GUID = E431D7FD-26BF-4E3D-9064-5B13B0439057 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf index 36e61ea9b132..24d7db5645c1 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtSerialPortLib/SsdtSerialPortLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x0001001B - BASE_NAME = SsdtSerialPortLibArm + BASE_NAME = SsdtSerialPortLib FILE_GUID = D1F92325-2DFB-435C-9B4C-A6B864F19230 VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER @@ -19,11 +19,13 @@ [Sources] SsdtSerialPortGenerator.c +[Packages.ARM, Packages.AARCH64] + ArmPlatformPkg/ArmPlatformPkg.dec + [Packages] MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec EmbeddedPkg/EmbeddedPkg.dec - ArmPlatformPkg/ArmPlatformPkg.dec DynamicTablesPkg/DynamicTablesPkg.dec [LibraryClasses] From 6411e553d9f0382ef778aabad0ae52c400c17c6a Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 42/56] DynamicTablesPkg: AcpiFadtLib: Prepare to support other archs Allow other architectures to reuse the AcpiFadtLib by extracting the Arm specific part of the table generation. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf | 7 + .../Common/AcpiFadtLib/Arm/ArmFadtGenerator.c | 126 ++++++++++++++++++ .../Acpi/Common/AcpiFadtLib/FadtGenerator.c | 86 ++---------- .../Acpi/Common/AcpiFadtLib/FadtGenerator.h | 35 +++++ .../Common/AcpiFadtLib/FadtGeneratorNull.c | 47 +++++++ 5 files changed, 225 insertions(+), 76 deletions(-) create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/Arm/ArmFadtGenerator.c create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGeneratorNull.c diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf index c9cd850faac0..67c7fdbd23d8 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf @@ -18,6 +18,13 @@ [Sources] FadtGenerator.c + FadtGenerator.h + +[Sources.ARM, Sources.AARCH64] + Arm/ArmFadtGenerator.c + +[Sources.IA32, Sources.X64] + FadtGeneratorNull.c [Packages] MdePkg/MdePkg.dec diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/Arm/ArmFadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/Arm/ArmFadtGenerator.c new file mode 100644 index 000000000000..2d2afe98ab1f --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/Arm/ArmFadtGenerator.c @@ -0,0 +1,126 @@ +/** @file + ARM FADT Table Helpers + + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.5 Specification, Aug 29, 2022 + +**/ + +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include +#include "FadtGenerator.h" + +/** ARM Standard FADT Generator + +Requirements: + The following Configuration Manager Object(s) are required by + this Generator: + - EArmObjBootArchInfo +*/ + +/** This macro expands to a function that retrieves the Boot + Architecture Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjBootArchInfo, + CM_ARM_BOOT_ARCH_INFO + ); + +/** This macro defines the FADT flag options for ARM Platforms. +*/ +#define FADT_FLAGS (EFI_ACPI_6_5_HW_REDUCED_ACPI | \ + EFI_ACPI_6_5_LOW_POWER_S0_IDLE_CAPABLE) + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in, out] Fadt Pointer to the constructed ACPI Table. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object was not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +STATIC +EFI_STATUS +EFIAPI +ArmFadtBootArchInfoUpdate ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ) +{ + EFI_STATUS Status; + CM_ARM_BOOT_ARCH_INFO *BootArchInfo; + + ASSERT (CfgMgrProtocol != NULL); + ASSERT (Fadt != NULL); + + // Get the Boot Architecture flags from the Platform Configuration Manager + Status = GetEArmObjBootArchInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &BootArchInfo, + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: FADT: Failed to get Boot Architecture flags. Status = %r\n", + Status + )); + return Status; + } + + DEBUG (( + DEBUG_INFO, + "FADT BootArchFlag = 0x%x\n", + BootArchInfo->BootArchFlags + )); + + Fadt->ArmBootArch = BootArchInfo->BootArchFlags; + + return Status; +} + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in, out] Fadt Pointer to the constructed ACPI Table. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object was not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +FadtArchUpdate ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ) +{ + ASSERT (CfgMgrProtocol != NULL); + ASSERT (Fadt != NULL); + + Fadt->Flags = FADT_FLAGS; + + return ArmFadtBootArchInfoUpdate (CfgMgrProtocol, Fadt); +} diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c index 470f1acfd11f..c2140ef414d2 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c @@ -19,22 +19,17 @@ #include #include #include +#include "FadtGenerator.h" -/** ARM standard FADT Generator +/** Standard FADT Generator Requirements: The following Configuration Manager Object(s) are required by this Generator: - EArchCommonObjPowerManagementProfileInfo - - EArmObjBootArchInfo - EArchCommonObjHypervisorVendorIdentity (OPTIONAL) */ -/** This macro defines the FADT flag options for ARM Platforms. -*/ -#define FADT_FLAGS (EFI_ACPI_6_5_HW_REDUCED_ACPI | \ - EFI_ACPI_6_5_LOW_POWER_S0_IDLE_CAPABLE) - /** This macro defines the valid mask for the FADT flag option if HW_REDUCED_ACPI flag in the table is set. @@ -159,13 +154,13 @@ EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE AcpiFadt = { // UINT8 Reserved1 0, // UINT32 Flags - FADT_FLAGS, + 0, // EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE ResetReg NULL_GAS, // UINT8 ResetValue 0, // UINT16 ArmBootArch - EFI_ACPI_6_5_ARM_PSCI_COMPLIANT, // {Template}: ARM Boot Architecture Flags + 0, // {Template}: ARM Boot Architecture Flags // UINT8 MinorRevision EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION, // {Template} // UINT64 XFirmwareCtrl @@ -207,15 +202,6 @@ GET_OBJECT_LIST ( CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO ); -/** This macro expands to a function that retrieves the Boot - Architecture Information from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjBootArchInfo, - CM_ARM_BOOT_ARCH_INFO - ); - /** This macro expands to a function that retrieves the Hypervisor Vendor ID from the Configuration Manager. */ @@ -287,58 +273,6 @@ FadtAddPmProfileInfo ( return Status; } -/** Updates the Boot Architecture information in the FADT Table. - - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - - @retval EFI_SUCCESS Success. - @retval EFI_INVALID_PARAMETER A parameter is invalid. - @retval EFI_NOT_FOUND The required object was not found. - @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration - Manager is less than the Object size for the - requested object. -**/ -STATIC -EFI_STATUS -EFIAPI -FadtAddBootArchInfo ( - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol - ) -{ - EFI_STATUS Status; - CM_ARM_BOOT_ARCH_INFO *BootArchInfo; - - ASSERT (CfgMgrProtocol != NULL); - - // Get the Boot Architecture flags from the Platform Configuration Manager - Status = GetEArmObjBootArchInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &BootArchInfo, - NULL - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: FADT: Failed to get Boot Architecture flags. Status = %r\n", - Status - )); - goto error_handler; - } - - DEBUG (( - DEBUG_INFO, - "FADT BootArchFlag = 0x%x\n", - BootArchInfo->BootArchFlags - )); - - AcpiFadt.ArmBootArch = BootArchInfo->BootArchFlags; - -error_handler: - return Status; -} - /** Update the Hypervisor Vendor ID in the FADT Table. @param [in] CfgMgrProtocol Pointer to the Configuration Manager @@ -577,12 +511,6 @@ BuildFadtTable ( goto error_handler; } - // Update BootArch Info - Status = FadtAddBootArchInfo (CfgMgrProtocol); - if (EFI_ERROR (Status)) { - goto error_handler; - } - // Add the Hypervisor Vendor Id if present // Note if no hypervisor is present the zero bytes // will be placed in this field. @@ -623,6 +551,12 @@ BuildFadtTable ( } } + // Update Arch specific Info + Status = FadtArchUpdate (CfgMgrProtocol, &AcpiFadt); + if (EFI_ERROR (Status)) { + goto error_handler; + } + *Table = (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiFadt; error_handler: return Status; diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h new file mode 100644 index 000000000000..08ac59e00684 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h @@ -0,0 +1,35 @@ +/** @file + FADT Table Generator + + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.5 Specification, Aug 29, 2022 + +**/ + +#ifndef FADT_GENERATOR_H_ +#define FADT_GENERATOR_H_ + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in, out] Fadt Pointer to the constructed ACPI Table. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object was not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +FadtArchUpdate ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ); + +#endif // FADT_GENERATOR_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGeneratorNull.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGeneratorNull.c new file mode 100644 index 000000000000..7868aae742c8 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGeneratorNull.c @@ -0,0 +1,47 @@ +/** @file + Common FADT Table Helpers + + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.5 Specification, Aug 29, 2022 + +**/ + +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include +#include "FadtGenerator.h" + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in, out] Fadt Pointer to the constructed ACPI Table. + + @retval EFI_SUCCESS Success. + @retval EFI_UNSUPPORTED Unsupported. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object was not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +FadtArchUpdate ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ) +{ + // Not implemented. + return EFI_UNSUPPORTED; +} From cd1691891e8ec9cb4a899a8bf1b7fc59dd5ba933 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 43/56] DynamicTablesPkg: AcpiDbg2Lib: Prepare to support other archs Allow other architectures to reuse the AcpiDbg2Lib by extracting the Arm specific part of the table generation. Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf | 7 ++ .../Common/AcpiDbg2Lib/Arm/ArmDbg2Generator.c | 67 +++++++++++++++++++ .../Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c | 24 +++++-- .../Acpi/Common/AcpiDbg2Lib/Dbg2Generator.h | 56 ++++++++++++++++ .../Common/AcpiDbg2Lib/Dbg2GeneratorNull.c | 60 +++++++++++++++++ 5 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Arm/ArmDbg2Generator.c create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.h create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2GeneratorNull.c diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf index 32dcd20c082b..ed049ea4a278 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf @@ -18,6 +18,13 @@ [Sources] Dbg2Generator.c + Dbg2Generator.h + +[Sources.ARM, Sources.AARCH64] + Arm/ArmDbg2Generator.c + +[Sources.IA32, Sources.X86] + Dbg2GeneratorNull.c [Packages.ARM, Packages.AARCH64] ArmPlatformPkg/ArmPlatformPkg.dec diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Arm/ArmDbg2Generator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Arm/ArmDbg2Generator.c new file mode 100644 index 000000000000..a063f49829e5 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Arm/ArmDbg2Generator.c @@ -0,0 +1,67 @@ +/** @file + Arm DBG2 Table Generator + + Copyright (c) 2024, Arm Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015. +**/ + +#include +#include +#include +#include "Dbg2Generator.h" + +/** + Initialise the serial port to the specified settings. + The serial port is re-configured only if the specified settings + are different from the current settings. + All unspecified settings will be set to the default values. + + @param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing + the serial port. + @param BaudRate The baud rate of the serial device. If the + baud rate is not supported, the speed will be + reduced to the nearest supported one and the + variable's value will be updated accordingly. + @param ReceiveFifoDepth The number of characters the device will + buffer on input. Value of 0 will use the + device's default FIFO depth. + @param Parity If applicable, this is the EFI_PARITY_TYPE + that is computed or checked as each character + is transmitted or received. If the device + does not support parity, the value is the + default parity value. + @param DataBits The number of data bits in each character. + @param StopBits If applicable, the EFI_STOP_BITS_TYPE number + of stop bits per character. + If the device does not support stop bits, the + value is the default stop bit value. + + @retval RETURN_SUCCESS All attributes were set correctly on the + serial device. + @retval RETURN_INVALID_PARAMETER One or more of the attributes has an + unsupported value. +**/ +RETURN_STATUS +EFIAPI +Dbg2InitializePort ( + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN OUT UINT64 *BaudRate, + IN OUT UINT32 *ReceiveFifoDepth, + IN OUT EFI_PARITY_TYPE *Parity, + IN OUT UINT8 *DataBits, + IN OUT EFI_STOP_BITS_TYPE *StopBits + ) +{ + return PL011UartInitializePort ( + (UINTN)SerialPortInfo->BaseAddress, + SerialPortInfo->Clock, + BaudRate, + ReceiveFifoDepth, + Parity, + DataBits, + StopBits + ); +} diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c index fbf2ba37331d..6f49e6a27053 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include @@ -26,9 +25,11 @@ #include #include +#include "Dbg2Generator.h" + /** ARM standard DBG2 Table Generator - Constructs the DBG2 table for PL011 or SBSA UART peripherals. + Constructs the DBG2 table for corresponding DBG2 peripheral. Requirements: The following Configuration Manager Object(s) are required by @@ -169,7 +170,7 @@ DBG2_TABLE AcpiDbg2 = { DBG2_DEBUG_PORT_DDI ( 0, // {Template}: Serial Port Subtype 0, // {Template}: Serial Port Base Address - PL011_UART_LENGTH, + 0, // {Template}: Serial Port Base Address Size NAMESPACE_STR_DBG_PORT0 ) } @@ -186,7 +187,7 @@ GET_OBJECT_LIST ( CM_ARCH_COMMON_SERIAL_PORT_INFO ); -/** Initialize the PL011/SBSA UART with the parameters obtained from +/** Initialize the DBG2 UART with the parameters obtained from the Configuration Manager. @param [in] SerialPortInfo Pointer to the Serial Port Information. @@ -218,9 +219,8 @@ SetupDebugUart ( StopBits = (EFI_STOP_BITS_TYPE)FixedPcdGet8 (PcdUartDefaultStopBits); BaudRate = SerialPortInfo->BaudRate; - Status = PL011UartInitializePort ( - (UINTN)SerialPortInfo->BaseAddress, - SerialPortInfo->Clock, + Status = Dbg2InitializePort ( + SerialPortInfo, &BaudRate, &ReceiveFifoDepth, &Parity, @@ -460,6 +460,9 @@ BuildDbg2TableEx ( (SerialPortInfo->PortSubtype == EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_SBSA_GENERIC_UART)) { + // Setup the PL011 length. + AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = PL011_UART_LENGTH; + // Initialize the serial port Status = SetupDebugUart (SerialPortInfo); if (EFI_ERROR (Status)) { @@ -470,6 +473,13 @@ BuildDbg2TableEx ( )); goto error_handler; } + } else if ((SerialPortInfo->PortSubtype == + EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_16550_WITH_GAS)) + { + AcpiDbg2.Dbg2DeviceInfo[INDEX_DBG_PORT0].AddressSize = SIZE_4KB; + } else { + // Try to catch other serial ports, but don't return an error. + ASSERT (0); } TableList[0] = (EFI_ACPI_DESCRIPTION_HEADER *)&AcpiDbg2; diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.h new file mode 100644 index 000000000000..5424be47b8ec --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2Generator.h @@ -0,0 +1,56 @@ +/** @file + DBG2 Table Generator + + Copyright (c) 2024, Arm Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015. +**/ + +#ifndef DBG2_GENERATOR_H_ +#define DBG2_GENERATOR_H_ + +/** + Initialise the serial port to the specified settings. + The serial port is re-configured only if the specified settings + are different from the current settings. + All unspecified settings will be set to the default values. + + @param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing + the serial port. + @param BaudRate The baud rate of the serial device. If the + baud rate is not supported, the speed will be + reduced to the nearest supported one and the + variable's value will be updated accordingly. + @param ReceiveFifoDepth The number of characters the device will + buffer on input. Value of 0 will use the + device's default FIFO depth. + @param Parity If applicable, this is the EFI_PARITY_TYPE + that is computed or checked as each character + is transmitted or received. If the device + does not support parity, the value is the + default parity value. + @param DataBits The number of data bits in each character. + @param StopBits If applicable, the EFI_STOP_BITS_TYPE number + of stop bits per character. + If the device does not support stop bits, the + value is the default stop bit value. + + @retval RETURN_SUCCESS All attributes were set correctly on the + serial device. + @retval RETURN_INVALID_PARAMETER One or more of the attributes has an + unsupported value. +**/ +RETURN_STATUS +EFIAPI +Dbg2InitializePort ( + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN OUT UINT64 *BaudRate, + IN OUT UINT32 *ReceiveFifoDepth, + IN OUT EFI_PARITY_TYPE *Parity, + IN OUT UINT8 *DataBits, + IN OUT EFI_STOP_BITS_TYPE *StopBits + ); + +#endif // DBG2_GENERATOR_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2GeneratorNull.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2GeneratorNull.c new file mode 100644 index 000000000000..3219f6f90978 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/Dbg2GeneratorNull.c @@ -0,0 +1,60 @@ +/** @file + Common DBG2 Table Generator + + Copyright (c) 2024, Arm Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - Microsoft Debug Port Table 2 (DBG2) Specification - December 10, 2015. +**/ + +#include +#include +#include "Dbg2Generator.h" + +/** + Initialise the serial port to the specified settings. + The serial port is re-configured only if the specified settings + are different from the current settings. + All unspecified settings will be set to the default values. + + @param SerialPortInfo CM_ARCH_COMMON_SERIAL_PORT_INFO object describing + the serial port. + @param BaudRate The baud rate of the serial device. If the + baud rate is not supported, the speed will be + reduced to the nearest supported one and the + variable's value will be updated accordingly. + @param ReceiveFifoDepth The number of characters the device will + buffer on input. Value of 0 will use the + device's default FIFO depth. + @param Parity If applicable, this is the EFI_PARITY_TYPE + that is computed or checked as each character + is transmitted or received. If the device + does not support parity, the value is the + default parity value. + @param DataBits The number of data bits in each character. + @param StopBits If applicable, the EFI_STOP_BITS_TYPE number + of stop bits per character. + If the device does not support stop bits, the + value is the default stop bit value. + + @retval RETURN_SUCCESS All attributes were set correctly on the + serial device. + @retval RETURN_UNSUPPORTED Not supported. + @retval RETURN_INVALID_PARAMETER One or more of the attributes has an + unsupported value. +**/ +RETURN_STATUS +EFIAPI +Dbg2InitializePort ( + IN CONST CM_ARCH_COMMON_SERIAL_PORT_INFO *SerialPortInfo, + IN OUT UINT64 *BaudRate, + IN OUT UINT32 *ReceiveFifoDepth, + IN OUT EFI_PARITY_TYPE *Parity, + IN OUT UINT8 *DataBits, + IN OUT EFI_STOP_BITS_TYPE *StopBits + ) +{ + // Not implemented. + return RETURN_UNSUPPORTED; +} From 59888397d6c4cbd05a6ad013116154e9106d371d Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 44/56] DynamicTablesPkg: AcpiSpcrLib: Prepare to support other archs Remove the Arm name from the generator to show the generator can be used by other archs. Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c index 6f027f3bf941..065729d7eecf 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSpcrLib/SpcrGenerator.c @@ -26,7 +26,7 @@ #include #include -/** ARM standard SPCR Table Generator +/** Standard SPCR Table Generator Constructs the SPCR table for PL011 or SBSA UART peripherals. From 6a5b5e367d2088249ffae62712e7dfacba963c12 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 45/56] DynamicTablesPkg: AcpiSratLib: Prepare to support other archs Allow other architectures to reuse the AcpiSratLib by extracting the Arm specific part of the table generation. Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Acpi/Common/AcpiSratLib/AcpiSratLib.inf | 7 + .../Common/AcpiSratLib/Arm/ArmSratGenerator.c | 262 ++++++++++++++++++ .../Acpi/Common/AcpiSratLib/SratGenerator.c | 214 ++------------ .../Acpi/Common/AcpiSratLib/SratGenerator.h | 59 ++++ .../Common/AcpiSratLib/SratGeneratorNull.c | 79 ++++++ 5 files changed, 424 insertions(+), 197 deletions(-) create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/Arm/ArmSratGenerator.c create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.h create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGeneratorNull.c diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf index 2f23f4e668e5..14e435e32580 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf @@ -18,6 +18,13 @@ [Sources] SratGenerator.c + SratGenerator.h + +[Sources.ARM, Sources.AARCH64] + Arm/ArmSratGenerator.c + +[Sources.IA32, Sources.X64] + SratGeneratorNull.c [Packages] EmbeddedPkg/EmbeddedPkg.dec diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/Arm/ArmSratGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/Arm/ArmSratGenerator.c new file mode 100644 index 000000000000..3d36b25e1840 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/Arm/ArmSratGenerator.c @@ -0,0 +1,262 @@ +/** @file + Arm SRAT Table Generator + + Copyright (c) 2019 - 2020, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.3 Specification, January 2019 + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#include +#include +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include + +#include "SratGenerator.h" + +/** + ARM standard SRAT Generator + + Requirements: + The following Configuration Manager Object(s) are used by this Generator: + - EArmObjGicCInfo (REQUIRED) + - EArmObjGicItsInfo (OPTIONAL) +*/ + +/** This macro expands to a function that retrieves the GIC + CPU interface Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjGicCInfo, + CM_ARM_GICC_INFO + ); + +/** This macro expands to a function that retrieves the GIC + Interrupt Translation Service Information from the + Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjGicItsInfo, + CM_ARM_GIC_ITS_INFO + ); + +/** Enum of the Arm specific CM objects required to + build the arch specific information of the SRAT table. +*/ +typedef enum ArmSratSubTableType { + EArmGicCSubTableType, + EArmGicItsSubTableType, + EArmSubTableTypeMax, +} EARM_SRAT_SUB_TABLE_TYPE; + +typedef struct SratSubTable { + /// Start offset of the arch specific sub-table. + UINT32 Offset; + + /// Count + UINT32 Count; + + /// Array of CmInfo objects of the relevant type. + VOID *CmInfo; +} SRAT_SUB_TABLE; + +STATIC SRAT_SUB_TABLE mSratSubTable[EArmSubTableTypeMax]; + +/** Reserve arch sub-tables space. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + @param [in, out] ArchOffset On input, contains the offset where arch specific + sub-tables can be written. It is expected that + there enough space to write all the arch specific + sub-tables from this offset onward. + On ouput, contains the ending offset of the arch + specific sub-tables. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +ArchReserveOffsets ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT UINT32 *ArchOffset + ) +{ + EFI_STATUS Status; + + ASSERT (CfgMgrProtocol != NULL); + ASSERT (ArchOffset != NULL); + + Status = GetEArmObjGicCInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + (CM_ARM_GICC_INFO **)&mSratSubTable[EArmGicCSubTableType].CmInfo, + &mSratSubTable[EArmGicCSubTableType].Count + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: SRAT: Failed to get GICC Info. Status = %r\n", + Status + )); + return Status; + } + + if (mSratSubTable[EArmGicCSubTableType].Count == 0) { + DEBUG (( + DEBUG_ERROR, + "ERROR: SRAT: GIC CPU Interface information not provided.\n" + )); + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + Status = GetEArmObjGicItsInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + (CM_ARM_GIC_ITS_INFO **)&mSratSubTable[EArmGicItsSubTableType].CmInfo, + &mSratSubTable[EArmGicItsSubTableType].Count + ); + if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: SRAT: Failed to get GIC ITS Info. Status = %r\n", + Status + )); + return Status; + } + + mSratSubTable[EArmGicCSubTableType].Offset = *ArchOffset; + *ArchOffset += (sizeof (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE) * + mSratSubTable[EArmGicCSubTableType].Count); + + if (mSratSubTable[EArmGicItsSubTableType].Count != 0) { + mSratSubTable[EArmGicItsSubTableType].Offset = *ArchOffset; + *ArchOffset += (sizeof (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE) * + mSratSubTable[EArmGicItsSubTableType].Count); + } + + return EFI_SUCCESS; +} + +/** Add the GICC Affinity Structures in the SRAT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] Srat Pointer to the SRAT Table. +**/ +STATIC +VOID +EFIAPI +AddGICCAffinity ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat + ) +{ + EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE *GicCAff; + CM_ARM_GICC_INFO *GicCInfo; + + GicCInfo = mSratSubTable[EArmGicCSubTableType].CmInfo; + GicCAff = (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE *)((UINT8 *)Srat + + mSratSubTable[EArmGicCSubTableType].Offset); + + while (mSratSubTable[EArmGicCSubTableType].Count-- != 0) { + DEBUG ((DEBUG_INFO, "SRAT: GicCAff = 0x%p\n", GicCAff)); + + GicCAff->Type = EFI_ACPI_6_3_GICC_AFFINITY; + GicCAff->Length = sizeof (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE); + GicCAff->ProximityDomain = GicCInfo->ProximityDomain; + GicCAff->AcpiProcessorUid = GicCInfo->AcpiProcessorUid; + GicCAff->Flags = GicCInfo->AffinityFlags; + GicCAff->ClockDomain = GicCInfo->ClockDomain; + + // Next + GicCAff++; + GicCInfo++; + }// while +} + +/** Add the GIC ITS Affinity Structures in the SRAT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] Srat Pointer to the SRAT Table. +**/ +STATIC +VOID +EFIAPI +AddGICItsAffinity ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat + ) +{ + EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE *GicItsAff; + CM_ARM_GIC_ITS_INFO *GicItsInfo; + + GicItsInfo = mSratSubTable[EArmGicItsSubTableType].CmInfo; + GicItsAff = (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE *)((UINT8 *)Srat + + mSratSubTable[EArmGicItsSubTableType].Offset); + + while (mSratSubTable[EArmGicItsSubTableType].Count-- != 0) { + DEBUG ((DEBUG_INFO, "SRAT: GicItsAff = 0x%p\n", GicItsAff)); + + GicItsAff->Type = EFI_ACPI_6_3_GIC_ITS_AFFINITY; + GicItsAff->Length = sizeof (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE); + GicItsAff->ProximityDomain = GicItsInfo->ProximityDomain; + GicItsAff->Reserved[0] = EFI_ACPI_RESERVED_BYTE; + GicItsAff->Reserved[1] = EFI_ACPI_RESERVED_BYTE; + GicItsAff->ItsId = GicItsInfo->GicItsId; + + // Next + GicItsAff++; + GicItsInfo++; + }// while +} + +/** Add the arch specific sub-tables to the SRAT table. + + These sub-tables are written in the space reserved beforehand. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] Srat Pointer to the SRAT Table. + + @retval EFI_SUCCESS Table generated successfully. +**/ +EFI_STATUS +EFIAPI +AddArchObjects ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat + ) +{ + ASSERT (CfgMgrProtocol != NULL); + ASSERT (Srat != NULL); + + AddGICCAffinity (CfgMgrProtocol, Srat); + + if (mSratSubTable[EArmGicCSubTableType].Count != 0) { + AddGICItsAffinity (CfgMgrProtocol, Srat); + } + + return EFI_SUCCESS; +} diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c index 48c9970a7151..dcdacc4e966e 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c @@ -25,38 +25,19 @@ #include #include +#include "SratGenerator.h" + /** - ARM standard SRAT Generator + Standard SRAT Generator Requirements: The following Configuration Manager Object(s) are used by this Generator: - - EArmObjGicCInfo (REQUIRED) - - EArmObjGicItsInfo (OPTIONAL) - EArchCommonObjMemoryAffinityInfo (OPTIONAL) - EArchCommonObjGenericInitiatorAffinityInfo (OPTIONAL) - EArchCommonObjDeviceHandleAcpi (OPTIONAL) - EArchCommonObjDeviceHandlePci (OPTIONAL) */ -/** This macro expands to a function that retrieves the GIC - CPU interface Information from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjGicCInfo, - CM_ARM_GICC_INFO - ); - -/** This macro expands to a function that retrieves the GIC - Interrupt Translation Service Information from the - Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjGicItsInfo, - CM_ARM_GIC_ITS_INFO - ); - /** This macro expands to a function that retrieves the Memory Affinity information from the Configuration Manager. @@ -121,102 +102,6 @@ GetBdf ( return Bdf; } -/** Add the GICC Affinity Structures in the SRAT Table. - - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - @param [in] Srat Pointer to the SRAT Table. - @param [in] GicCAffOffset Offset of the GICC Affinity - information in the SRAT Table. - @param [in] GicCInfo Pointer to the GIC CPU Information list. - @param [in] GicCCount Count of GIC CPU Interfaces. - - @retval EFI_SUCCESS Table generated successfully. -**/ -STATIC -EFI_STATUS -AddGICCAffinity ( - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat, - IN CONST UINT32 GicCAffOffset, - IN CONST CM_ARM_GICC_INFO *GicCInfo, - IN UINT32 GicCCount - ) -{ - EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE *GicCAff; - - ASSERT (Srat != NULL); - ASSERT (GicCInfo != NULL); - - GicCAff = (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE *)((UINT8 *)Srat + - GicCAffOffset); - - while (GicCCount-- != 0) { - DEBUG ((DEBUG_INFO, "SRAT: GicCAff = 0x%p\n", GicCAff)); - - GicCAff->Type = EFI_ACPI_6_3_GICC_AFFINITY; - GicCAff->Length = sizeof (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE); - GicCAff->ProximityDomain = GicCInfo->ProximityDomain; - GicCAff->AcpiProcessorUid = GicCInfo->AcpiProcessorUid; - GicCAff->Flags = GicCInfo->AffinityFlags; - GicCAff->ClockDomain = GicCInfo->ClockDomain; - - // Next - GicCAff++; - GicCInfo++; - }// while - - return EFI_SUCCESS; -} - -/** Add the GIC ITS Affinity Structures in the SRAT Table. - - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - @param [in] Srat Pointer to the SRAT Table. - @param [in] GicItsAffOffset Offset of the GIC ITS Affinity - information in the SRAT Table. - @param [in] GicItsInfo Pointer to the GIC ITS Information list. - @param [in] GicItsCount Count of GIC ITS. - - @retval EFI_SUCCESS Table generated successfully. -**/ -STATIC -EFI_STATUS -AddGICItsAffinity ( - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat, - IN CONST UINT32 GicItsAffOffset, - IN CONST CM_ARM_GIC_ITS_INFO *GicItsInfo, - IN UINT32 GicItsCount - ) -{ - EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE *GicItsAff; - - ASSERT (Srat != NULL); - ASSERT (GicItsInfo != NULL); - - GicItsAff = (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE *)((UINT8 *)Srat + - GicItsAffOffset); - - while (GicItsCount-- != 0) { - DEBUG ((DEBUG_INFO, "SRAT: GicItsAff = 0x%p\n", GicItsAff)); - - GicItsAff->Type = EFI_ACPI_6_3_GIC_ITS_AFFINITY; - GicItsAff->Length = sizeof (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE); - GicItsAff->ProximityDomain = GicItsInfo->ProximityDomain; - GicItsAff->Reserved[0] = EFI_ACPI_RESERVED_BYTE; - GicItsAff->Reserved[1] = EFI_ACPI_RESERVED_BYTE; - GicItsAff->ItsId = GicItsInfo->GicItsId; - - // Next - GicItsAff++; - GicItsInfo++; - }// while - - return EFI_SUCCESS; -} - /** Add the Memory Affinity Structures in the SRAT Table. @param [in] CfgMgrProtocol Pointer to the Configuration Manager @@ -455,18 +340,12 @@ BuildSratTable ( { EFI_STATUS Status; UINT32 TableSize; - UINT32 GicCCount; - UINT32 GicItsCount; UINT32 MemAffCount; UINT32 GenInitiatorAffCount; - UINT32 GicCAffOffset; - UINT32 GicItsAffOffset; UINT32 MemAffOffset; UINT32 GenInitiatorAffOffset; - CM_ARM_GICC_INFO *GicCInfo; - CM_ARM_GIC_ITS_INFO *GicItsInfo; CM_ARCH_COMMON_MEMORY_AFFINITY_INFO *MemAffInfo; CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO *GenInitiatorAffInfo; @@ -497,46 +376,6 @@ BuildSratTable ( *Table = NULL; - Status = GetEArmObjGicCInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &GicCInfo, - &GicCCount - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: SRAT: Failed to get GICC Info. Status = %r\n", - Status - )); - goto error_handler; - } - - if (GicCCount == 0) { - DEBUG (( - DEBUG_ERROR, - "ERROR: SRAT: GIC CPU Interface information not provided.\n" - )); - ASSERT (0); - Status = EFI_INVALID_PARAMETER; - goto error_handler; - } - - Status = GetEArmObjGicItsInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &GicItsInfo, - &GicItsCount - ); - if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: SRAT: Failed to get GIC ITS Info. Status = %r\n", - Status - )); - goto error_handler; - } - Status = GetEArchCommonObjMemoryAffinityInfo ( CfgMgrProtocol, CM_NULL_TOKEN, @@ -571,13 +410,18 @@ BuildSratTable ( // Calculate the size of the SRAT table TableSize = sizeof (EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER); - GicCAffOffset = TableSize; - TableSize += (sizeof (EFI_ACPI_6_3_GICC_AFFINITY_STRUCTURE) * GicCCount); - - if (GicItsCount != 0) { - GicItsAffOffset = TableSize; - TableSize += (sizeof (EFI_ACPI_6_3_GIC_ITS_AFFINITY_STRUCTURE) * - GicItsCount); + // Place the Arch specific subtables/structures first and + // reserve the offsets. The common subtables/structures + // are placed next. + Status = ArchReserveOffsets (CfgMgrProtocol, &TableSize); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: SRAT: Failed to reserve arch offsets." + " Status = %r\n", + Status + )); + goto error_handler; } if (MemAffCount != 0) { @@ -636,40 +480,16 @@ BuildSratTable ( Srat->Reserved1 = 1; Srat->Reserved2 = EFI_ACPI_RESERVED_QWORD; - Status = AddGICCAffinity ( - CfgMgrProtocol, - Srat, - GicCAffOffset, - GicCInfo, - GicCCount - ); + Status = AddArchObjects (CfgMgrProtocol, Srat); if (EFI_ERROR (Status)) { DEBUG (( DEBUG_ERROR, - "ERROR: SRAT: Failed to add GICC Affinity structures. Status = %r\n", + "ERROR: SRAT: Failed to add arch objects header. Status = %r\n", Status )); goto error_handler; } - if (GicItsCount != 0) { - Status = AddGICItsAffinity ( - CfgMgrProtocol, - Srat, - GicItsAffOffset, - GicItsInfo, - GicItsCount - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: SRAT: Failed to add GIC ITS Affinity structures. Status = %r\n", - Status - )); - goto error_handler; - } - } - if (MemAffCount != 0) { Status = AddMemoryAffinity ( CfgMgrProtocol, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.h new file mode 100644 index 000000000000..106d0084947e --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.h @@ -0,0 +1,59 @@ +/** @file + SRAT Table Generator + + Copyright (c) 2019 - 2020, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.3 Specification, January 2019 + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#ifndef SRAT_GENERATOR_H_ +#define SRAT_GENERATOR_H_ + +/** Reserve arch sub-tables space. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + @param [in, out] ArchOffset On input, contains the offset where arch specific + sub-tables can be written. It is expected that + there enough space to write all the arch specific + sub-tables from this offset onward. + On ouput, contains the ending offset of the arch + specific sub-tables. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +ArchReserveOffsets ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT UINT32 *ArchOffset + ); + +/** Add the arch specific sub-tables to the SRAT table. + + These sub-tables are written in the space reserved beforehand. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] Srat Pointer to the SRAT Table. + + @retval EFI_SUCCESS Table generated successfully. +**/ +EFI_STATUS +EFIAPI +AddArchObjects ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat + ); + +#endif // SRAT_GENERATOR_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGeneratorNull.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGeneratorNull.c new file mode 100644 index 000000000000..4ebdf97fd6d5 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGeneratorNull.c @@ -0,0 +1,79 @@ +/** @file + Common SRAT Table Generator + + Copyright (c) 2019 - 2020, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.3 Specification, January 2019 + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#include +#include +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include + +#include "SratGenerator.h" + +/** Reserve arch sub-tables space. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + @param [in, out] ArchOffset On input, contains the offset where arch specific + sub-tables can be written. It is expected that + there enough space to write all the arch specific + sub-tables from this offset onward. + On ouput, contains the ending offset of the arch + specific sub-tables. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_UNSUPPORTED Not supported. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +ArchReserveOffsets ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN OUT UINT32 *ArchOffset + ) +{ + // Not implemented. + return EFI_UNSUPPORTED; +} + +/** Add the arch specific sub-tables to the SRAT table. + + These sub-tables are written in the space reserved beforehand. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] Srat Pointer to the SRAT Table. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_UNSUPPORTED Not supported. +**/ +EFI_STATUS +EFIAPI +AddArchObjects ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN EFI_ACPI_6_3_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER *CONST Srat + ) +{ + // Not implemented. + return EFI_UNSUPPORTED; +} From bc4f63273ee324d6bd4a6d6b6140ba9c2d748592 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 46/56] DynamicTablesPkg: AcpiSsdtCpuTopologyLib: Avoid dependency on GICC The GICC is an ARM specific structure. Other architectures have different local interrupt controller structures from which CPU topology can be created. Avoid the GICC reference in common code by: - creating a wrapper CreateTopologyFromIntC() instead of CreateTopologyFromGicC() so that different archs can implement it differently. - implementing arch specific functions to get the AcpiProcessorUid, CpcToken, EtToken and use them instead of using the GicC CM object directly. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Arm/ArmSsdtCpuTopologyGenerator.c | 408 ++++++++++++++++++ .../SsdtCpuTopologyGenerator.c | 341 ++------------- .../SsdtCpuTopologyGenerator.h | 196 +++++++++ .../SsdtCpuTopologyLib.inf | 3 + 4 files changed, 647 insertions(+), 301 deletions(-) create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/Arm/ArmSsdtCpuTopologyGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/Arm/ArmSsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/Arm/ArmSsdtCpuTopologyGenerator.c new file mode 100644 index 000000000000..140a2e491116 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/Arm/ArmSsdtCpuTopologyGenerator.c @@ -0,0 +1,408 @@ +/** @file + ARM SSDT Cpu Topology Table Generator Helpers. + + Copyright (c) 2021 - 2023, Arm Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.3 Specification - January 2019 - s8.4 Declaring Processors + - ACPI for CoreSight version 1.2 Platform Design Document + (https://developer.arm.com/documentation/den0067/a/?lang=en) + + @par Glossary: + - ETE - Embedded Trace Extension. + - ETM - Embedded Trace Macrocell. +**/ + +#include +#include +#include +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include +#include +#include + +#include "SsdtCpuTopologyGenerator.h" + +/** ARM SSDT Cpu Topology Table Generator. + +Requirements: + The following Configuration Manager Object(s) are required by + this Generator: + - EArmObjGicCInfo + - EArmObjEtInfo (OPTIONAL) +*/ + +/** This macro expands to a function that retrieves the GIC + CPU interface Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjGicCInfo, + CM_ARM_GICC_INFO + ); + +/** + This macro expands to a function that retrieves the ET device + information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjEtInfo, + CM_ARM_ET_INFO + ); + +/** Create an embedded trace device and add it to the Cpu Node in the + AML namespace. + + This generates the following ASL code: + Device (E002) + { + Name (_UID, 2) + Name (_HID, "ARMHC500") + } + + Note: Currently we only support generating ETE nodes. Unlike ETM, + ETE has a system register interface and therefore does not need + the MMIO range to be described. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] ParentNode Parent node to attach the Cpu node to. + @param [in] AcpiProcessorUid ACPI Processor UID of the CPU. + @param [in] CpuName Value used to generate the node name. + @param [out] EtNodePtr If not NULL, return the created Cpu node. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +STATIC +EFI_STATUS +EFIAPI +CreateAmlEtd ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN AML_NODE_HANDLE ParentNode, + IN UINT32 AcpiProcessorUid, + IN UINT32 CpuName, + OUT AML_OBJECT_NODE_HANDLE *EtNodePtr OPTIONAL + ) +{ + EFI_STATUS Status; + AML_OBJECT_NODE_HANDLE EtNode; + CHAR8 AslName[AML_NAME_SEG_SIZE + 1]; + + ASSERT (Generator != NULL); + ASSERT (ParentNode != NULL); + + Status = WriteAslName ('E', CpuName, AslName); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + Status = AmlCodeGenDevice (AslName, ParentNode, &EtNode); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + Status = AmlCodeGenNameInteger ( + "_UID", + AcpiProcessorUid, + EtNode, + NULL + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + Status = AmlCodeGenNameString ( + "_HID", + ACPI_HID_ET_DEVICE, + EtNode, + NULL + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + // If requested, return the handle to the EtNode. + if (EtNodePtr != NULL) { + *EtNodePtr = EtNode; + } + + return Status; +} + +/** Create and add an Embedded trace device to the Cpu Node. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] AcpiProcessorUid ACPI processor Uid of the local intc (gicc, other) + describing the Cpu. + @param [in] EtToken Embedded Trace Token of the CPU. + @param [in] CpuName Value used to generate the CPU node name. + @param [in] CpuNode CPU Node to which the ET device node is + attached. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_UNSUPPORTED Feature Unsupported. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +STATIC +EFI_STATUS +EFIAPI +CreateAmlEtNode ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN UINT32 AcpiProcessorUid, + IN CM_OBJECT_TOKEN EtToken, + IN UINT32 CpuName, + IN AML_OBJECT_NODE_HANDLE *CpuNode + ) +{ + EFI_STATUS Status; + CM_ARM_ET_INFO *EtInfo; + + Status = GetEArmObjEtInfo ( + CfgMgrProtocol, + EtToken, + &EtInfo, + NULL + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + // Currently we only support creation of a ETE Node. + if (EtInfo->EtType != ArmEtTypeEte) { + return EFI_UNSUPPORTED; + } + + Status = CreateAmlEtd ( + Generator, + CpuNode, + AcpiProcessorUid, + CpuName, + NULL + ); + ASSERT_EFI_ERROR (Status); + return Status; +} + +/** Create the processor hierarchy AML tree from arch specific CM objects. + + The Arm architecture will use the CM_ARM_GICC_INFO CM objects for instance. + A processor container is by extension any non-leave device in the cpu topology. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] ScopeNode Scope node handle ('\_SB' scope). + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +CreateTopologyFromIntC ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN AML_OBJECT_NODE_HANDLE ScopeNode + ) +{ + EFI_STATUS Status; + CM_ARM_GICC_INFO *GicCInfo; + UINT32 GicCInfoCount; + UINT32 Index; + AML_OBJECT_NODE_HANDLE CpuNode; + + ASSERT (Generator != NULL); + ASSERT (CfgMgrProtocol != NULL); + ASSERT (ScopeNode != NULL); + + Status = GetEArmObjGicCInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &GicCInfo, + &GicCInfoCount + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + // For each CM_ARM_GICC_INFO object, create an AML node. + for (Index = 0; Index < GicCInfoCount; Index++) { + Status = CreateAmlCpu ( + Generator, + ScopeNode, + GicCInfo[Index].AcpiProcessorUid, + Index, + &CpuNode + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + break; + } + + // If a CPC info is associated with the + // GicCinfo, create an _CPC method returning them. + if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) { + Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, GicCInfo[Index].CpcToken, CpuNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + break; + } + } + + if (GicCInfo[Index].EtToken != CM_NULL_TOKEN) { + Status = CreateAmlEtNode ( + Generator, + CfgMgrProtocol, + GicCInfo[Index].AcpiProcessorUid, + GicCInfo[Index].EtToken, + Index, + CpuNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + } + } // for + + return Status; +} + +/** Get generic interrupt information from arch specific CM objects. + + The AcpiProcessorUid, CpcToken, etc. are held in arch specific CM objects, + in the CM_ARM_GICC_INFO CM object for Arm for instance. + This wrapper allows to get this information from each arch object. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] AcpiIdObjectToken AcpiIdObjectToken identifying the CPU to fetch the + other fields from. + @param [out] AcpiProcessorUid AcpiProcessorUid of the CPU identified by + the AcpiIdObjectToken. + @param [out] CpcToken CpcToken of the CPU identified by + the AcpiIdObjectToken. + @param [out] PsdToken PsdToken of the CPU identified by + the AcpiIdObjectToken. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. +**/ +EFI_STATUS +EFIAPI +GetIntCInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_OBJECT_TOKEN AcpiIdObjectToken, + OUT UINT32 *AcpiProcessorUid, + OUT CM_OBJECT_TOKEN *CpcToken, + OUT CM_OBJECT_TOKEN *PsdToken + ) +{ + EFI_STATUS Status; + CM_ARM_GICC_INFO *GicCInfo; + + Status = GetEArmObjGicCInfo ( + CfgMgrProtocol, + AcpiIdObjectToken, + &GicCInfo, + NULL + ); + if (EFI_ERROR (Status)) { + return Status; + } + + if (AcpiProcessorUid != NULL) { + *AcpiProcessorUid = GicCInfo->AcpiProcessorUid; + } + + if (CpcToken != NULL) { + *CpcToken = GicCInfo->CpcToken; + } + + if (PsdToken != NULL) { + *PsdToken = GicCInfo->PsdToken; + } + + return Status; +} + +/** Add arch specific information to a CPU node in the asl description. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] AcpiIdObjectToken AcpiIdObjectToken identifying the CPU to fetch the + other fields from. + @param [in] CpuName Value used to generate the CPU node name. + @param [out] CpuNode CPU Node to which the ET device node is + attached. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. + @retval EFI_UNSUPPORTED Feature Unsupported. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +AddArchAmlCpuInfo ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_OBJECT_TOKEN AcpiIdObjectToken, + IN UINT32 CpuName, + OUT AML_OBJECT_NODE_HANDLE *CpuNode + ) +{ + EFI_STATUS Status; + CM_ARM_GICC_INFO *GicCInfo; + + Status = GetEArmObjGicCInfo ( + CfgMgrProtocol, + AcpiIdObjectToken, + &GicCInfo, + NULL + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // Add an Embedded Trace node if present. + if (GicCInfo->EtToken != CM_NULL_TOKEN) { + Status = CreateAmlEtNode ( + Generator, + CfgMgrProtocol, + GicCInfo->AcpiProcessorUid, + GicCInfo->EtToken, + CpuName, + CpuNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + } + + return Status; +} diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c index 2deaa4640c5c..74595131935c 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c @@ -32,28 +32,17 @@ #include "SsdtCpuTopologyGenerator.h" -/** ARM standard SSDT Cpu Topology Table Generator. +/** SSDT Cpu Topology Table Generator. Requirements: The following Configuration Manager Object(s) are required by this Generator: - - EArmObjGicCInfo - EArchCommonObjProcHierarchyInfo (OPTIONAL) along with - EArchCommonObjCmRef (OPTIONAL) - EArchCommonObjLpiInfo (OPTIONAL) - - GetEArmObjEtInfo (OPTIONAL) - EArchCommonObjPsdInfo (OPTIONAL) */ -/** This macro expands to a function that retrieves the GIC - CPU interface Information from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjGicCInfo, - CM_ARM_GICC_INFO - ); - /** This macro expands to a function that retrieves the Processor Hierarchy information from the Configuration Manager. @@ -94,16 +83,6 @@ GET_OBJECT_LIST ( CM_ARCH_COMMON_CPC_INFO ); -/** - This macro expands to a function that retrieves the ET device - information from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjEtInfo, - CM_ARM_ET_INFO - ); - /** This macro expands to a function that retrieves the PSD information from the Configuration Manager. @@ -238,7 +217,6 @@ TokenTableAdd ( @retval EFI_SUCCESS Success. @retval EFI_INVALID_PARAMETER Invalid parameter. **/ -STATIC EFI_STATUS EFIAPI WriteAslName ( @@ -294,8 +272,7 @@ WriteAslName ( @param [in] Generator The SSDT Cpu Topology generator. @param [in] CfgMgrProtocol Pointer to the Configuration Manager Protocol Interface. - @param [in] GicCInfo Pointer to the CM_ARM_GICC_INFO object - describing the Cpu. + @param [in] PsdToken Token to identify the Psd information. @param [in] Node CPU Node to which the _CPC node is attached. @@ -309,7 +286,7 @@ EFIAPI CreateAmlPsdNode ( IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CM_ARM_GICC_INFO *GicCInfo, + IN CM_OBJECT_TOKEN PsdToken, IN AML_OBJECT_NODE_HANDLE *Node ) { @@ -318,7 +295,7 @@ CreateAmlPsdNode ( Status = GetEArchCommonObjPsdInfo ( CfgMgrProtocol, - GicCInfo->PsdToken, + PsdToken, &PsdInfo, NULL ); @@ -381,7 +358,7 @@ CreateAmlPsdNode ( @param [in] Generator The SSDT Cpu Topology generator. @param [in] CfgMgrProtocol Pointer to the Configuration Manager Protocol Interface. - @param [in] GicCInfo Pointer to the CM_ARM_GICC_INFO object + @param [in] CpcToken CPC token of the INTC info describing the Cpu. @param [in] Node CPU Node to which the _CPC node is attached. @@ -390,13 +367,12 @@ CreateAmlPsdNode ( @retval EFI_INVALID_PARAMETER Invalid parameter. @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. **/ -STATIC EFI_STATUS EFIAPI CreateAmlCpcNode ( IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CM_ARM_GICC_INFO *GicCInfo, + IN CM_OBJECT_TOKEN CpcToken, IN AML_OBJECT_NODE_HANDLE *Node ) { @@ -405,7 +381,7 @@ CreateAmlCpcNode ( Status = GetEArchCommonObjCpcInfo ( CfgMgrProtocol, - GicCInfo->CpcToken, + CpcToken, &CpcInfo, NULL ); @@ -423,147 +399,6 @@ CreateAmlCpcNode ( return Status; } -/** Create an embedded trace device and add it to the Cpu Node in the - AML namespace. - - This generates the following ASL code: - Device (E002) - { - Name (_UID, 2) - Name (_HID, "ARMHC500") - } - - Note: Currently we only support generating ETE nodes. Unlike ETM, - ETE has a system register interface and therefore does not need - the MMIO range to be described. - - @param [in] Generator The SSDT Cpu Topology generator. - @param [in] ParentNode Parent node to attach the Cpu node to. - @param [in] GicCInfo CM_ARM_GICC_INFO object used to create the node. - @param [in] CpuName Value used to generate the node name. - @param [out] EtNodePtr If not NULL, return the created Cpu node. - - @retval EFI_SUCCESS Success. - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. -**/ -STATIC -EFI_STATUS -EFIAPI -CreateAmlEtd ( - IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, - IN AML_NODE_HANDLE ParentNode, - IN CM_ARM_GICC_INFO *GicCInfo, - IN UINT32 CpuName, - OUT AML_OBJECT_NODE_HANDLE *EtNodePtr OPTIONAL - ) -{ - EFI_STATUS Status; - AML_OBJECT_NODE_HANDLE EtNode; - CHAR8 AslName[AML_NAME_SEG_SIZE + 1]; - - ASSERT (Generator != NULL); - ASSERT (ParentNode != NULL); - - Status = WriteAslName ('E', CpuName, AslName); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - Status = AmlCodeGenDevice (AslName, ParentNode, &EtNode); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - Status = AmlCodeGenNameInteger ( - "_UID", - GicCInfo->AcpiProcessorUid, - EtNode, - NULL - ); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - Status = AmlCodeGenNameString ( - "_HID", - ACPI_HID_ET_DEVICE, - EtNode, - NULL - ); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - // If requested, return the handle to the EtNode. - if (EtNodePtr != NULL) { - *EtNodePtr = EtNode; - } - - return Status; -} - -/** Create and add an Embedded trace device to the Cpu Node. - - @param [in] Generator The SSDT Cpu Topology generator. - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - @param [in] GicCInfo Pointer to the CM_ARM_GICC_INFO object - describing the Cpu. - @param [in] CpuName Value used to generate the CPU node name. - @param [in] Node CPU Node to which the ET device node is - attached. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_UNSUPPORTED Feature Unsupported. - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. -**/ -STATIC -EFI_STATUS -EFIAPI -CreateAmlEtNode ( - IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN CM_ARM_GICC_INFO *GicCInfo, - IN UINT32 CpuName, - IN AML_OBJECT_NODE_HANDLE *Node - ) -{ - EFI_STATUS Status; - CM_ARM_ET_INFO *EtInfo; - - Status = GetEArmObjEtInfo ( - CfgMgrProtocol, - GicCInfo->EtToken, - &EtInfo, - NULL - ); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - // Currently we only support creation of a ETE Node. - if (EtInfo->EtType != ArmEtTypeEte) { - return EFI_UNSUPPORTED; - } - - Status = CreateAmlEtd ( - Generator, - Node, - GicCInfo, - CpuName, - NULL - ); - ASSERT_EFI_ERROR (Status); - return Status; -} - /** Create and add an _LPI method to Cpu/Cluster Node. For instance, transform an AML node from: @@ -789,23 +624,22 @@ GenerateLpiStates ( Name (_HID, "ACPI0007") } - @param [in] Generator The SSDT Cpu Topology generator. - @param [in] ParentNode Parent node to attach the Cpu node to. - @param [in] GicCInfo CM_ARM_GICC_INFO object used to create the node. - @param [in] CpuName Value used to generate the node name. - @param [out] CpuNodePtr If not NULL, return the created Cpu node. + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] ParentNode Parent node to attach the Cpu node to. + @param [in] AcpiProcessorUid ACPI processor UID of the CPU. + @param [in] CpuName Value used to generate the node name. + @param [out] CpuNodePtr If not NULL, return the created Cpu node. @retval EFI_SUCCESS Success. @retval EFI_INVALID_PARAMETER Invalid parameter. @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. **/ -STATIC EFI_STATUS EFIAPI CreateAmlCpu ( IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, IN AML_NODE_HANDLE ParentNode, - IN CM_ARM_GICC_INFO *GicCInfo, + IN UINT32 AcpiProcessorUid, IN UINT32 CpuName, OUT AML_OBJECT_NODE_HANDLE *CpuNodePtr OPTIONAL ) @@ -816,7 +650,6 @@ CreateAmlCpu ( ASSERT (Generator != NULL); ASSERT (ParentNode != NULL); - ASSERT (GicCInfo != NULL); Status = WriteAslName ('C', CpuName, AslName); if (EFI_ERROR (Status)) { @@ -832,7 +665,7 @@ CreateAmlCpu ( Status = AmlCodeGenNameInteger ( "_UID", - GicCInfo->AcpiProcessorUid, + AcpiProcessorUid, CpuNode, NULL ); @@ -887,8 +720,10 @@ CreateAmlCpuFromProcHierarchy ( ) { EFI_STATUS Status; - CM_ARM_GICC_INFO *GicCInfo; AML_OBJECT_NODE_HANDLE CpuNode; + UINT32 AcpiProcessorUid; + CM_OBJECT_TOKEN CpcToken; + CM_OBJECT_TOKEN PsdToken; ASSERT (Generator != NULL); ASSERT (CfgMgrProtocol != NULL); @@ -896,18 +731,19 @@ CreateAmlCpuFromProcHierarchy ( ASSERT (ProcHierarchyNodeInfo != NULL); ASSERT (ProcHierarchyNodeInfo->AcpiIdObjectToken != CM_NULL_TOKEN); - Status = GetEArmObjGicCInfo ( + Status = GetIntCInfo ( CfgMgrProtocol, ProcHierarchyNodeInfo->AcpiIdObjectToken, - &GicCInfo, - NULL + &AcpiProcessorUid, + &CpcToken, + &PsdToken ); if (EFI_ERROR (Status)) { ASSERT (0); return Status; } - Status = CreateAmlCpu (Generator, ParentNode, GicCInfo, CpuName, &CpuNode); + Status = CreateAmlCpu (Generator, ParentNode, AcpiProcessorUid, CpuName, &CpuNode); if (EFI_ERROR (Status)) { ASSERT (0); return Status; @@ -923,8 +759,8 @@ CreateAmlCpuFromProcHierarchy ( } } - if (GicCInfo->PsdToken != CM_NULL_TOKEN) { - Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode); + if (PsdToken != CM_NULL_TOKEN) { + Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, PsdToken, CpuNode); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); return Status; @@ -932,28 +768,26 @@ CreateAmlCpuFromProcHierarchy ( } // If a CPC info is associated with the - // GicCinfo, create an _CPC method returning them. - if (GicCInfo->CpcToken != CM_NULL_TOKEN) { - Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode); + // IntcInfo, create an _CPC method returning them. + if (CpcToken != CM_NULL_TOKEN) { + Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, CpcToken, CpuNode); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); return Status; } } - // Add an Embedded Trace node if present. - if (GicCInfo->EtToken != CM_NULL_TOKEN) { - Status = CreateAmlEtNode ( - Generator, - CfgMgrProtocol, - GicCInfo, - CpuName, - CpuNode - ); - if (EFI_ERROR (Status)) { - ASSERT_EFI_ERROR (Status); - return Status; - } + // Add arch specific information if necessary. + Status = AddArchAmlCpuInfo ( + Generator, + CfgMgrProtocol, + ProcHierarchyNodeInfo->AcpiIdObjectToken, + CpuName, + CpuNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; } return Status; @@ -1342,100 +1176,6 @@ CreateTopologyFromProcHierarchy ( return Status; } -/** Create the processor hierarchy AML tree from CM_ARM_GICC_INFO - CM objects. - - A processor container is by extension any non-leave device in the cpu topology. - - @param [in] Generator The SSDT Cpu Topology generator. - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - @param [in] ScopeNode Scope node handle ('\_SB' scope). - - @retval EFI_SUCCESS Success. - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. -**/ -STATIC -EFI_STATUS -EFIAPI -CreateTopologyFromGicC ( - IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, - IN AML_OBJECT_NODE_HANDLE ScopeNode - ) -{ - EFI_STATUS Status; - CM_ARM_GICC_INFO *GicCInfo; - UINT32 GicCInfoCount; - UINT32 Index; - AML_OBJECT_NODE_HANDLE CpuNode; - - ASSERT (Generator != NULL); - ASSERT (CfgMgrProtocol != NULL); - ASSERT (ScopeNode != NULL); - - Status = GetEArmObjGicCInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &GicCInfo, - &GicCInfoCount - ); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - - // For each CM_ARM_GICC_INFO object, create an AML node. - for (Index = 0; Index < GicCInfoCount; Index++) { - Status = CreateAmlCpu ( - Generator, - ScopeNode, - &GicCInfo[Index], - Index, - &CpuNode - ); - if (EFI_ERROR (Status)) { - ASSERT (0); - break; - } - - if (GicCInfo->PsdToken != CM_NULL_TOKEN) { - Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode); - if (EFI_ERROR (Status)) { - ASSERT_EFI_ERROR (Status); - return Status; - } - } - - // If a CPC info is associated with the - // GicCinfo, create an _CPC method returning them. - if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) { - Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, &GicCInfo[Index], CpuNode); - if (EFI_ERROR (Status)) { - ASSERT_EFI_ERROR (Status); - break; - } - } - - if (GicCInfo[Index].EtToken != CM_NULL_TOKEN) { - Status = CreateAmlEtNode ( - Generator, - CfgMgrProtocol, - &GicCInfo[Index], - Index, - CpuNode - ); - if (EFI_ERROR (Status)) { - ASSERT_EFI_ERROR (Status); - return Status; - } - } - } // for - - return Status; -} - /** Construct the SSDT Cpu Topology ACPI table. This function invokes the Configuration Manager protocol interface @@ -1514,9 +1254,8 @@ BuildSsdtCpuTopologyTable ( } if (Status == EFI_NOT_FOUND) { - // If hierarchy information is not found generate a flat topology - // using CM_ARM_GICC_INFO objects. - Status = CreateTopologyFromGicC ( + // If hierarchy information is not found generate a flat topology. + Status = CreateTopologyFromIntC ( Generator, CfgMgrProtocol, ScopeNode diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h index 6fb44c7e5887..a5d80177f2fc 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.h @@ -144,4 +144,200 @@ typedef struct AcpiCpuTopologyGenerator { #pragma pack() +/** Write a string 'Xxxx\0' in AslName (5 bytes long), + with 'X' being the leading char of the name, and + with 'xxx' being Value in hexadecimal. + + As 'xxx' in hexadecimal represents a number on 12 bits, + we have Value < (1 << 12). + + @param [in] LeadChar Leading char of the name. + @param [in] Value Hex value of the name. + Must be lower than (2 << 12). + @param [in, out] AslName Pointer to write the 'Xxxx' string to. + Must be at least 5 bytes long. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. +**/ +EFI_STATUS +EFIAPI +WriteAslName ( + IN CHAR8 LeadChar, + IN UINT32 Value, + IN OUT CHAR8 *AslName + ); + +/** Get generic interrupt information from arch specific CM objects. + + The AcpiProcessorUid, CpcToken, etc. are held in arch specific CM objects, + in the CM_ARM_GICC_INFO CM object for Arm for instance. + This wrapper allows to get this information from each arch object. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] AcpiProcessorUid ACPI processor Uid of the local intc (gicc, other) + other fields from. + @param [out] AcpiProcessorUid AcpiProcessorUid of the CPU identified by + the AcpiIdObjectToken. + @param [out] CpcToken CpcToken of the CPU identified by + the AcpiIdObjectToken. + @param [out] PsdToken PsdToken of the CPU identified by + the AcpiIdObjectToken. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. +**/ +EFI_STATUS +EFIAPI +GetIntCInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_OBJECT_TOKEN AcpiIdObjectToken, + OUT UINT32 *AcpiProcessorUid, + OUT CM_OBJECT_TOKEN *CpcToken, + OUT CM_OBJECT_TOKEN *PsdToken + ); + +/** Create and add an _CPC Node to Cpu Node. + + For instance, transform an AML node from: + Device (C002) + { + Name (_UID, 2) + Name (_HID, "ACPI0007") + } + + To: + Device (C002) + { + Name (_UID, 2) + Name (_HID, "ACPI0007") + Name(_CPC, Package() + { + NumEntries, // Integer + Revision, // Integer + HighestPerformance, // Integer or Buffer (Resource Descriptor) + NominalPerformance, // Integer or Buffer (Resource Descriptor) + LowestNonlinearPerformance, // Integer or Buffer (Resource Descriptor) + LowestPerformance, // Integer or Buffer (Resource Descriptor) + GuaranteedPerformanceRegister, // Buffer (Resource Descriptor) + DesiredPerformanceRegister , // Buffer (Resource Descriptor) + MinimumPerformanceRegister , // Buffer (Resource Descriptor) + MaximumPerformanceRegister , // Buffer (Resource Descriptor) + PerformanceReductionToleranceRegister, // Buffer (Resource Descriptor) + TimeWindowRegister, // Buffer (Resource Descriptor) + CounterWraparoundTime, // Integer or Buffer (Resource Descriptor) + ReferencePerformanceCounterRegister, // Buffer (Resource Descriptor) + DeliveredPerformanceCounterRegister, // Buffer (Resource Descriptor) + PerformanceLimitedRegister, // Buffer (Resource Descriptor) + CPPCEnableRegister // Buffer (Resource Descriptor) + AutonomousSelectionEnable, // Integer or Buffer (Resource Descriptor) + AutonomousActivityWindowRegister, // Buffer (Resource Descriptor) + EnergyPerformancePreferenceRegister, // Buffer (Resource Descriptor) + ReferencePerformance // Integer or Buffer (Resource Descriptor) + LowestFrequency, // Integer or Buffer (Resource Descriptor) + NominalFrequency // Integer or Buffer (Resource Descriptor) + }) + } + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] CpcToken CPC token of the INTC info + describing the Cpu. + @param [in] Node CPU Node to which the _CPC node is + attached. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +CreateAmlCpcNode ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_OBJECT_TOKEN CpcToken, + IN AML_OBJECT_NODE_HANDLE *Node + ); + +/** Create a Cpu in the AML namespace. + + This generates the following ASL code: + Device (C002) + { + Name (_UID, 2) + Name (_HID, "ACPI0007") + } + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] ParentNode Parent node to attach the Cpu node to. + @param [in] AcpiProcessorUid ACPI processor UID of the CPU. + @param [in] CpuName Value used to generate the node name. + @param [out] CpuNodePtr If not NULL, return the created Cpu node. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +CreateAmlCpu ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN AML_NODE_HANDLE ParentNode, + IN UINT32 AcpiProcessorUid, + IN UINT32 CpuName, + OUT AML_OBJECT_NODE_HANDLE *CpuNodePtr OPTIONAL + ); + +/** Create the processor hierarchy AML tree from arch specific CM objects. + + The Arm architecture will use the CM_ARM_GICC_INFO CM objects for instance. + A processor container is by extension any non-leave device in the cpu topology. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] ScopeNode Scope node handle ('\_SB' scope). + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +CreateTopologyFromIntC ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN AML_OBJECT_NODE_HANDLE ScopeNode + ); + +/** Add arch specific information to a CPU node in the asl description. + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] AcpiIdObjectToken AcpiIdObjectToken identifying the CPU to fetch the + other fields from. + @param [in] CpuName Value used to generate the CPU node name. + @param [out] CpuNode CPU Node to which the ET device node is + attached. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. + @retval EFI_UNSUPPORTED Feature Unsupported. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +AddArchAmlCpuInfo ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_OBJECT_TOKEN AcpiIdObjectToken, + IN UINT32 CpuName, + OUT AML_OBJECT_NODE_HANDLE *CpuNode + ); + #endif // SSDT_CPU_TOPOLOGY_GENERATOR_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf index 2d38fb30fb09..93ede691cdf9 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyLib.inf @@ -20,6 +20,9 @@ SsdtCpuTopologyGenerator.c SsdtCpuTopologyGenerator.h +[Sources.ARM, Sources.AARCH64] + Arm/ArmSsdtCpuTopologyGenerator.c + [Packages.ARM, Packages.AARCH64] ArmPlatformPkg/ArmPlatformPkg.dec From 373500267e5c1ee21e86e5c67da14602e00457cd Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 47/56] DynamicTablesPkg: DynamicTableManagerDxe: Refactor PresenceArray Mandatory ACPI tables depend on the architectures. Different architectures might also want to check other tables. Move mAcpiVerifyTables containing the list of ACPI tables to check to an arch specific file and introduce GetAcpiTablePresenceInfo() to get get the relevant information from the array. Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Arm/ArmDynamicTableManager.c | 63 +++++++++++++++++ .../DynamicTableManagerDxe.c | 70 ++++++------------- .../DynamicTableManagerDxe.h | 63 +++++++++++++++++ .../DynamicTableManagerDxe.inf | 7 ++ .../DynamicTableManagerNull.c | 59 ++++++++++++++++ 5 files changed, 212 insertions(+), 50 deletions(-) create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/Arm/ArmDynamicTableManager.c create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.h create mode 100644 DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerNull.c diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/Arm/ArmDynamicTableManager.c b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/Arm/ArmDynamicTableManager.c new file mode 100644 index 000000000000..4874fe883f95 --- /dev/null +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/Arm/ArmDynamicTableManager.c @@ -0,0 +1,63 @@ +/** @file + ARM Dynamic Table Manager Dxe + + Copyright (c) 2017 - 2019, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include +#include +#include +#include "DynamicTableManagerDxe.h" + +/// +/// Array containing the ACPI tables to check. +/// We require the FADT, MADT, GTDT and the DSDT tables to boot. +/// This list also include optional ACPI tables: DBG2, SPCR. +/// The FADT table must be placed at index 0. +/// +STATIC ACPI_TABLE_PRESENCE_INFO mAcpiVerifyTables[] = { + { EStdAcpiTableIdFadt, EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, "FADT", TRUE, 0 }, + { EStdAcpiTableIdMadt, EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, "MADT", TRUE, 0 }, + { EStdAcpiTableIdGtdt, EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, "GTDT", TRUE, 0 }, + { EStdAcpiTableIdDsdt, EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, "DSDT", TRUE, 0 }, + { EStdAcpiTableIdDbg2, EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, "DBG2", FALSE, 0 }, + { EStdAcpiTableIdSpcr, EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, "SPCR", FALSE, 0 }, +}; + +/** Get the arch specific ACPI table presence information. + + @param [out] PresenceArray Array containing the ACPI tables to check. + @param [out] PresenceArrayCount Count of elements in the PresenceArray. + @param [out] FadtIndex Index of the FADT table in the PresenceArray. + -1 if absent. + + @retval EFI_SUCCESS Success. +**/ +EFI_STATUS +EFIAPI +GetAcpiTablePresenceInfo ( + OUT ACPI_TABLE_PRESENCE_INFO **PresenceArray, + OUT UINT32 *PresenceArrayCount, + OUT INT32 *FadtIndex + ) +{ + *PresenceArray = mAcpiVerifyTables; + *PresenceArrayCount = ARRAY_SIZE (mAcpiVerifyTables); + *FadtIndex = ACPI_TABLE_VERIFY_FADT; + + return EFI_SUCCESS; +} diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c index 1e9b811c4017..dfccccb83954 100644 --- a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.c @@ -23,57 +23,15 @@ #include #include -/// -/// Bit definitions for acceptable ACPI table presence formats. -/// Currently only ACPI tables present in the ACPI info list and -/// already installed will count towards "Table Present" during -/// verification routine. -/// -#define ACPI_TABLE_PRESENT_INFO_LIST BIT0 -#define ACPI_TABLE_PRESENT_INSTALLED BIT1 - -/// -/// Order of ACPI table being verified during presence inspection. -/// -#define ACPI_TABLE_VERIFY_FADT 0 -#define ACPI_TABLE_VERIFY_MADT 1 -#define ACPI_TABLE_VERIFY_GTDT 2 -#define ACPI_TABLE_VERIFY_DSDT 3 -#define ACPI_TABLE_VERIFY_DBG2 4 -#define ACPI_TABLE_VERIFY_SPCR 5 -#define ACPI_TABLE_VERIFY_COUNT 6 - -/// -/// Private data structure to verify the presence of mandatory -/// or optional ACPI tables. -/// -typedef struct { - /// ESTD ID for the ACPI table of interest. - ESTD_ACPI_TABLE_ID EstdTableId; - /// Standard UINT32 ACPI signature. - UINT32 AcpiTableSignature; - /// 4 character ACPI table name (the 5th char8 is for null terminator). - CHAR8 AcpiTableName[sizeof (UINT32) + 1]; - /// Indicator on whether the ACPI table is required. - BOOLEAN IsMandatory; - /// Formats of verified presences, as defined by ACPI_TABLE_PRESENT_* - /// This field should be initialized to 0 and will be populated during - /// verification routine. - UINT16 Presence; -} ACPI_TABLE_PRESENCE_INFO; +#include "DynamicTableManagerDxe.h" /// /// We require the FADT, MADT, GTDT and the DSDT tables to boot. /// This list also include optional ACPI tables: DBG2, SPCR. /// -ACPI_TABLE_PRESENCE_INFO mAcpiVerifyTables[ACPI_TABLE_VERIFY_COUNT] = { - { EStdAcpiTableIdFadt, EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, "FADT", TRUE, 0 }, - { EStdAcpiTableIdMadt, EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, "MADT", TRUE, 0 }, - { EStdAcpiTableIdGtdt, EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, "GTDT", TRUE, 0 }, - { EStdAcpiTableIdDsdt, EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, "DSDT", TRUE, 0 }, - { EStdAcpiTableIdDbg2, EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, "DBG2", FALSE, 0 }, - { EStdAcpiTableIdSpcr, EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, "SPCR", FALSE, 0 }, -}; +STATIC ACPI_TABLE_PRESENCE_INFO *mAcpiVerifyTables; +STATIC UINT32 mAcpiVerifyTablesCount; +STATIC INT32 mAcpiVerifyTablesFadtIndex; /** This macro expands to a function that retrieves the ACPI Table List from the Configuration Manager. @@ -472,7 +430,7 @@ VerifyMandatoryTablesArePresent ( // Check against the statically initialized ACPI tables to see if they are in ACPI info list while (AcpiTableCount-- != 0) { - for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) { + for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) { if (AcpiTableInfo[AcpiTableCount].AcpiTableSignature == mAcpiVerifyTables[Index].AcpiTableSignature) { mAcpiVerifyTables[Index].Presence |= ACPI_TABLE_PRESENT_INFO_LIST; // Found this table, skip the rest. @@ -491,7 +449,7 @@ VerifyMandatoryTablesArePresent ( return Status; } - for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) { + for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) { Handle = 0; InstalledTableIndex = 0; do { @@ -511,7 +469,7 @@ VerifyMandatoryTablesArePresent ( // Reset the return Status value to EFI_SUCCESS. We do not fully care if the table look up has failed. Status = EFI_SUCCESS; - for (Index = 0; Index < ACPI_TABLE_VERIFY_COUNT; Index++) { + for (Index = 0; Index < mAcpiVerifyTablesCount; Index++) { if (mAcpiVerifyTables[Index].Presence == 0) { if (mAcpiVerifyTables[Index].IsMandatory) { DEBUG ((DEBUG_ERROR, "ERROR: %a Table not found.\n", mAcpiVerifyTables[Index].AcpiTableName)); @@ -623,7 +581,9 @@ ProcessAcpiTables ( } // Add the FADT Table first. - if ((mAcpiVerifyTables[ACPI_TABLE_VERIFY_FADT].Presence & ACPI_TABLE_PRESENT_INSTALLED) == 0) { + if ((mAcpiVerifyTablesFadtIndex >= 0) && + ((mAcpiVerifyTables[mAcpiVerifyTablesFadtIndex].Presence & ACPI_TABLE_PRESENT_INSTALLED) == 0)) + { // FADT is not yet installed for (Idx = 0; Idx < AcpiTableCount; Idx++) { if (CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt) == @@ -785,6 +745,16 @@ DynamicTableManagerDxeInitialize ( CfgMfrInfo->OemId[5] )); + Status = GetAcpiTablePresenceInfo ( + &mAcpiVerifyTables, + &mAcpiVerifyTablesCount, + &mAcpiVerifyTablesFadtIndex + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + Status = ProcessAcpiTables (TableFactoryProtocol, CfgMgrProtocol); if (EFI_ERROR (Status)) { DEBUG (( diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.h b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.h new file mode 100644 index 000000000000..a12a775af132 --- /dev/null +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.h @@ -0,0 +1,63 @@ +/** @file + Dynamic Table Manager Dxe + + Copyright (c) 2017 - 2024, ARM Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef DYNAMIC_TABLE_MANAGER_DXE_H_ +#define DYNAMIC_TABLE_MANAGER_DXE_H_ + +#include + +/// +/// Bit definitions for acceptable ACPI table presence formats. +/// Currently only ACPI tables present in the ACPI info list and +/// already installed will count towards "Table Present" during +/// verification routine. +/// +#define ACPI_TABLE_PRESENT_INFO_LIST BIT0 +#define ACPI_TABLE_PRESENT_INSTALLED BIT1 + +/// The FADT table must be placed at index 0 in mAcpiVerifyTables. +#define ACPI_TABLE_VERIFY_FADT 0 + +/// +/// Private data structure to verify the presence of mandatory +/// or optional ACPI tables. +/// +typedef struct { + /// ESTD ID for the ACPI table of interest. + ESTD_ACPI_TABLE_ID EstdTableId; + /// Standard UINT32 ACPI signature. + UINT32 AcpiTableSignature; + /// 4 character ACPI table name (the 5th char8 is for null terminator). + CHAR8 AcpiTableName[sizeof (UINT32) + 1]; + /// Indicator on whether the ACPI table is required. + BOOLEAN IsMandatory; + /// Formats of verified presences, as defined by ACPI_TABLE_PRESENT_* + /// This field should be initialized to 0 and will be populated during + /// verification routine. + UINT16 Presence; +} ACPI_TABLE_PRESENCE_INFO; + +/** Get the arch specific ACPI table presence information. + + @param [out] PresenceArray Array containing the ACPI tables to check. + @param [out] PresenceArrayCount Count of elements in the PresenceArray. + @param [out] FadtIndex Index of the FADT table in the PresenceArray. + -1 if absent. + + @retval EFI_SUCCESS Success. +**/ +EFI_STATUS +EFIAPI +GetAcpiTablePresenceInfo ( + OUT ACPI_TABLE_PRESENCE_INFO **PresenceArray, + OUT UINT32 *PresenceArrayCount, + OUT INT32 *FadtIndex + ); + +#endif // DYNAMIC_TABLE_MANAGER_DXE_H_ diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf index ad8b3d037c16..00d03e75be1e 100644 --- a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerDxe.inf @@ -22,6 +22,13 @@ [Sources] DynamicTableManagerDxe.c + DynamicTableManagerDxe.h + +[Sources.ARM, Sources.AARCH64] + Arm/ArmDynamicTableManager.c + +[Sources.IA32, Sources.X64] + DynamicTableManagerNull.c [Packages] MdePkg/MdePkg.dec diff --git a/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerNull.c b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerNull.c new file mode 100644 index 000000000000..d9b727468a71 --- /dev/null +++ b/DynamicTablesPkg/Drivers/DynamicTableManagerDxe/DynamicTableManagerNull.c @@ -0,0 +1,59 @@ +/** @file + Common Dynamic Table Manager Dxe + + Copyright (c) 2024, Arm Limited. All rights reserved. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include + +// Module specific include files. +#include +#include +#include +#include +#include +#include +#include +#include "DynamicTableManagerDxe.h" + +/// +/// Array containing the ACPI tables to check. +/// This is a dummy list only existing for build purpose. +/// The FADT table must be placed at index 0. +/// +ACPI_TABLE_PRESENCE_INFO mAcpiVerifyTables[] = { + { EStdAcpiTableIdFadt, EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, "FADT", TRUE, 0 }, +}; + +/** Get the arch specific ACPI table presence information. + + @param [out] PresenceArray Array containing the ACPI tables to check. + @param [out] PresenceArrayCount Count of elements in the PresenceArray. + @param [out] FadtIndex Index of the FADT table in the PresenceArray. + -1 if absent. + + @retval EFI_SUCCESS Success. + @retval EFI_UNSUPPORTED Unsupported. +**/ +EFI_STATUS +EFIAPI +GetAcpiTablePresenceInfo ( + OUT ACPI_TABLE_PRESENCE_INFO **PresenceArray, + OUT UINT32 *PresenceArrayCount, + OUT INT32 *FadtIndex + ) +{ + // Dummy function - Not Implemented. + *PresenceArray = mAcpiVerifyTables; + *PresenceArrayCount = ARRAY_SIZE (mAcpiVerifyTables); + *FadtIndex = ACPI_TABLE_VERIFY_FADT; + + return EFI_UNSUPPORTED; +} From 2e712d605556318653bfe9fd3f7b6e0c7379ba70 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 48/56] DynamicTablesPkg: FdtHwInfoParserLib: Move ARM parsers to Arm directory Create an Arm directory in the FdtHwInfoParserLib as a preparation step to support other architectures. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../{ => Arm}/BootArch/ArmBootArchParser.c | 2 +- .../{ => Arm}/BootArch/ArmBootArchParser.h | 0 .../GenericTimer/ArmGenericTimerParser.c | 4 +-- .../GenericTimer/ArmGenericTimerParser.h | 0 .../{ => Arm}/Gic/ArmGicCParser.c | 4 +-- .../{ => Arm}/Gic/ArmGicCParser.h | 0 .../{ => Arm}/Gic/ArmGicDParser.c | 4 +-- .../{ => Arm}/Gic/ArmGicDParser.h | 0 .../{ => Arm}/Gic/ArmGicDispatcher.c | 12 +++---- .../{ => Arm}/Gic/ArmGicDispatcher.h | 0 .../{ => Arm}/Gic/ArmGicItsParser.c | 4 +-- .../{ => Arm}/Gic/ArmGicItsParser.h | 0 .../{ => Arm}/Gic/ArmGicMsiFrameParser.c | 4 +-- .../{ => Arm}/Gic/ArmGicMsiFrameParser.h | 0 .../{ => Arm}/Gic/ArmGicRParser.c | 4 +-- .../{ => Arm}/Gic/ArmGicRParser.h | 0 .../FdtHwInfoParserLib/FdtHwInfoParser.c | 6 ++-- .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 32 +++++++++---------- .../Pci/ArmPciConfigSpaceParser.c | 2 +- 19 files changed, 39 insertions(+), 39 deletions(-) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/BootArch/ArmBootArchParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/BootArch/ArmBootArchParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/GenericTimer/ArmGenericTimerParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/GenericTimer/ArmGenericTimerParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicCParser.c (96%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicCParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicDParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicDParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicDispatcher.c (92%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicDispatcher.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicItsParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicItsParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicMsiFrameParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicMsiFrameParser.h (100%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicRParser.c (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/{ => Arm}/Gic/ArmGicRParser.h (100%) diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/BootArch/ArmBootArchParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/BootArch/ArmBootArchParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c index b07b6b8b666a..d217e33424b1 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/BootArch/ArmBootArchParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c @@ -10,7 +10,7 @@ #include "FdtHwInfoParser.h" #include "CmObjectDescUtility.h" -#include "BootArch/ArmBootArchParser.h" +#include "Arm/BootArch/ArmBootArchParser.h" /** List of "compatible" property values for Psci nodes. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/BootArch/ArmBootArchParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/BootArch/ArmBootArchParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/GenericTimer/ArmGenericTimerParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/GenericTimer/ArmGenericTimerParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/GenericTimer/ArmGenericTimerParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/GenericTimer/ArmGenericTimerParser.c index 988a81221dab..6488399ed812 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/GenericTimer/ArmGenericTimerParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/GenericTimer/ArmGenericTimerParser.c @@ -10,8 +10,8 @@ #include "FdtHwInfoParser.h" #include "CmObjectDescUtility.h" -#include "GenericTimer/ArmGenericTimerParser.h" -#include "Gic/ArmGicDispatcher.h" +#include "Arm/GenericTimer/ArmGenericTimerParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" /** List of "compatible" property values for timer nodes. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/GenericTimer/ArmGenericTimerParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/GenericTimer/ArmGenericTimerParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/GenericTimer/ArmGenericTimerParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/GenericTimer/ArmGenericTimerParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c similarity index 96% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c index ee82f7a0b461..cf577b47242e 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c @@ -13,8 +13,8 @@ #include "FdtHwInfoParser.h" #include "CmObjectDescUtility.h" -#include "Gic/ArmGicCParser.h" -#include "Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicCParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" /** List of "compatible" property values for CPU nodes. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicCParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDParser.c index b7f569672980..906ef8b8585e 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDParser.c @@ -11,8 +11,8 @@ #include "CmObjectDescUtility.h" #include "FdtHwInfoParser.h" -#include "Gic/ArmGicDispatcher.h" -#include "Gic/ArmGicDParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicDParser.h" /** Parse a Gic compatible interrupt-controller node, extracting GicD information. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDispatcher.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDispatcher.c similarity index 92% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDispatcher.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDispatcher.c index 1f3af1f968a9..ca34d24a78d9 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDispatcher.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDispatcher.c @@ -10,12 +10,12 @@ **/ #include "FdtHwInfoParser.h" -#include "Gic/ArmGicCParser.h" -#include "Gic/ArmGicDispatcher.h" -#include "Gic/ArmGicDParser.h" -#include "Gic/ArmGicItsParser.h" -#include "Gic/ArmGicMsiFrameParser.h" -#include "Gic/ArmGicRParser.h" +#include "Arm/Gic/ArmGicCParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicDParser.h" +#include "Arm/Gic/ArmGicItsParser.h" +#include "Arm/Gic/ArmGicMsiFrameParser.h" +#include "Arm/Gic/ArmGicRParser.h" /** List of "compatible" property values for GicV2 interrupt nodes. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDispatcher.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDispatcher.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicDispatcher.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicDispatcher.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicItsParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicItsParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicItsParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicItsParser.c index f23818fbd047..6d4bde6a141a 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicItsParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicItsParser.c @@ -10,8 +10,8 @@ #include "CmObjectDescUtility.h" #include "FdtHwInfoParser.h" -#include "Gic/ArmGicDispatcher.h" -#include "Gic/ArmGicItsParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicItsParser.h" /** Parse a Gic compatible interrupt-controller node, extracting GicIts information. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicItsParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicItsParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicItsParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicItsParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicMsiFrameParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicMsiFrameParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicMsiFrameParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicMsiFrameParser.c index c474cb25fe6f..dff5beff91be 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicMsiFrameParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicMsiFrameParser.c @@ -11,8 +11,8 @@ #include "CmObjectDescUtility.h" #include "FdtHwInfoParser.h" -#include "Gic/ArmGicDispatcher.h" -#include "Gic/ArmGicMsiFrameParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicMsiFrameParser.h" /** List of "compatible" property values for Msi-frame nodes. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicMsiFrameParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicMsiFrameParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicMsiFrameParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicMsiFrameParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicRParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicRParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicRParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicRParser.c index 0f9c7bb3fea2..de2e1dd1f1e3 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicRParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicRParser.c @@ -10,8 +10,8 @@ #include "CmObjectDescUtility.h" #include "FdtHwInfoParser.h" -#include "Gic/ArmGicDispatcher.h" -#include "Gic/ArmGicRParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicRParser.h" /** Parse a Gic compatible interrupt-controller node, extracting GicR information. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicRParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicRParser.h similarity index 100% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Gic/ArmGicRParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicRParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c index 376de078bcb1..78bf9c9efae4 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c @@ -6,9 +6,9 @@ **/ #include "FdtHwInfoParser.h" -#include "BootArch/ArmBootArchParser.h" -#include "GenericTimer/ArmGenericTimerParser.h" -#include "Gic/ArmGicDispatcher.h" +#include "Arm/BootArch/ArmBootArchParser.h" +#include "Arm/GenericTimer/ArmGenericTimerParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" #include "Pci/ArmPciConfigSpaceParser.h" #include "Serial/ArmSerialPortParser.h" diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index d2c171accaa5..fa768cf664df 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -22,22 +22,22 @@ FdtHwInfoParser.h FdtUtility.c FdtUtility.h - BootArch/ArmBootArchParser.c - BootArch/ArmBootArchParser.h - GenericTimer/ArmGenericTimerParser.c - GenericTimer/ArmGenericTimerParser.h - Gic/ArmGicCParser.c - Gic/ArmGicCParser.h - Gic/ArmGicDispatcher.c - Gic/ArmGicDispatcher.h - Gic/ArmGicDParser.c - Gic/ArmGicDParser.h - Gic/ArmGicItsParser.c - Gic/ArmGicItsParser.h - Gic/ArmGicMsiFrameParser.c - Gic/ArmGicMsiFrameParser.h - Gic/ArmGicRParser.c - Gic/ArmGicRParser.h + Arm/BootArch/ArmBootArchParser.c + Arm/BootArch/ArmBootArchParser.h + Arm/GenericTimer/ArmGenericTimerParser.c + Arm/GenericTimer/ArmGenericTimerParser.h + Arm/Gic/ArmGicCParser.c + Arm/Gic/ArmGicCParser.h + Arm/Gic/ArmGicDispatcher.c + Arm/Gic/ArmGicDispatcher.h + Arm/Gic/ArmGicDParser.c + Arm/Gic/ArmGicDParser.h + Arm/Gic/ArmGicItsParser.c + Arm/Gic/ArmGicItsParser.h + Arm/Gic/ArmGicMsiFrameParser.c + Arm/Gic/ArmGicMsiFrameParser.h + Arm/Gic/ArmGicRParser.c + Arm/Gic/ArmGicRParser.h Pci/ArmPciConfigSpaceParser.c Pci/ArmPciConfigSpaceParser.h Serial/ArmSerialPortParser.c diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c index b064e62c17bc..5d11863dfe0a 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c @@ -17,7 +17,7 @@ #include "FdtHwInfoParser.h" #include "Pci/ArmPciConfigSpaceParser.h" -#include "Gic/ArmGicDispatcher.h" +#include "Arm/Gic/ArmGicDispatcher.h" /** List of "compatible" property values for host PCIe bridges nodes. From 211a2bd48f6b847ede9f71af226baa77c43d1c2d Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 49/56] DynamicTablesPkg: FdtHwInfoParserLib: Refactor to prepare for other archs To allow other architectures to potentially re-use the serial port parser and make the code arch neutral, make the MainDispatcher() function arch specific. Other architectures can choose which parse/dispatcher are desired to be called through the configuration of the HwInfoParserTable. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Arm/ArmFdtHwInfoParser.c | 83 +++++++++++++++++++ .../FdtHwInfoParserLib/FdtHwInfoParser.c | 78 +---------------- .../FdtHwInfoParserLib/FdtHwInfoParser.h | 27 ++++++ .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 15 ++-- 4 files changed, 121 insertions(+), 82 deletions(-) create mode 100644 DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c new file mode 100644 index 000000000000..403402731add --- /dev/null +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c @@ -0,0 +1,83 @@ +/** @file + Arm Flattened Device Tree parser library for KvmTool. + + Copyright (c) 2021, ARM Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include "FdtHwInfoParser.h" +#include "Arm/BootArch/ArmBootArchParser.h" +#include "Arm/GenericTimer/ArmGenericTimerParser.h" +#include "Arm/Gic/ArmGicDispatcher.h" +#include "Pci/ArmPciConfigSpaceParser.h" +#include "Serial/ArmSerialPortParser.h" + +/** Ordered table of parsers/dispatchers. + + A parser parses a Device Tree to populate a specific CmObj type. None, + one or many CmObj can be created by the parser. + The created CmObj are then handed to the parser's caller through the + HW_INFO_ADD_OBJECT interface. + This can also be a dispatcher. I.e. a function that not parsing a + Device Tree but calling other parsers. +*/ +STATIC CONST FDT_HW_INFO_PARSER_FUNC HwInfoParserTable[] = { + ArmBootArchInfoParser, + ArmGenericTimerInfoParser, + ArmGicDispatcher, + ArmPciConfigInfoParser, + SerialPortDispatcher +}; + +/** Main dispatcher: sequentially call the parsers/dispatchers + of the HwInfoParserTable. + + A parser parses a Device Tree to populate a specific CmObj type. None, + one or many CmObj can be created by the parser. + The created CmObj are then handed to the parser's caller through the + HW_INFO_ADD_OBJECT interface. + This can also be a dispatcher. I.e. a function that not parsing a + Device Tree but calling other parsers. + + @param [in] FdtParserHandle A handle to the parser instance. + @param [in] FdtBranch When searching for DT node name, restrict + the search to this Device Tree branch. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_ABORTED An error occurred. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. + @retval EFI_UNSUPPORTED Unsupported. +**/ +EFI_STATUS +EFIAPI +ArchFdtHwInfoMainDispatcher ( + IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, + IN INT32 FdtBranch + ) +{ + EFI_STATUS Status; + UINT32 Index; + + if (fdt_check_header (FdtParserHandle->Fdt) < 0) { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + for (Index = 0; Index < ARRAY_SIZE (HwInfoParserTable); Index++) { + Status = HwInfoParserTable[Index]( + FdtParserHandle, + FdtBranch + ); + if (EFI_ERROR (Status) && + (Status != EFI_NOT_FOUND)) + { + // If EFI_NOT_FOUND, the parser didn't find information in the DT. + // Don't trigger an error. + ASSERT (0); + return Status; + } + } // for + + return EFI_SUCCESS; +} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c index 78bf9c9efae4..8e980dabe373 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.c @@ -6,82 +6,6 @@ **/ #include "FdtHwInfoParser.h" -#include "Arm/BootArch/ArmBootArchParser.h" -#include "Arm/GenericTimer/ArmGenericTimerParser.h" -#include "Arm/Gic/ArmGicDispatcher.h" -#include "Pci/ArmPciConfigSpaceParser.h" -#include "Serial/ArmSerialPortParser.h" - -/** Ordered table of parsers/dispatchers. - - A parser parses a Device Tree to populate a specific CmObj type. None, - one or many CmObj can be created by the parser. - The created CmObj are then handed to the parser's caller through the - HW_INFO_ADD_OBJECT interface. - This can also be a dispatcher. I.e. a function that not parsing a - Device Tree but calling other parsers. -*/ -STATIC CONST FDT_HW_INFO_PARSER_FUNC HwInfoParserTable[] = { - ArmBootArchInfoParser, - ArmGenericTimerInfoParser, - ArmGicDispatcher, - ArmPciConfigInfoParser, - SerialPortDispatcher -}; - -/** Main dispatcher: sequentially call the parsers/dispatchers - of the HwInfoParserTable. - - A parser parses a Device Tree to populate a specific CmObj type. None, - one or many CmObj can be created by the parser. - The created CmObj are then handed to the parser's caller through the - HW_INFO_ADD_OBJECT interface. - This can also be a dispatcher. I.e. a function that not parsing a - Device Tree but calling other parsers. - - @param [in] FdtParserHandle A handle to the parser instance. - @param [in] FdtBranch When searching for DT node name, restrict - the search to this Device Tree branch. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_ABORTED An error occurred. - @retval EFI_INVALID_PARAMETER Invalid parameter. - @retval EFI_NOT_FOUND Not found. - @retval EFI_UNSUPPORTED Unsupported. -**/ -STATIC -EFI_STATUS -EFIAPI -MainDispatcher ( - IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, - IN INT32 FdtBranch - ) -{ - EFI_STATUS Status; - UINT32 Index; - - if (fdt_check_header (FdtParserHandle->Fdt) < 0) { - ASSERT (0); - return EFI_INVALID_PARAMETER; - } - - for (Index = 0; Index < ARRAY_SIZE (HwInfoParserTable); Index++) { - Status = HwInfoParserTable[Index]( - FdtParserHandle, - FdtBranch - ); - if (EFI_ERROR (Status) && - (Status != EFI_NOT_FOUND)) - { - // If EFI_NOT_FOUND, the parser didn't find information in the DT. - // Don't trigger an error. - ASSERT (0); - return Status; - } - } // for - - return EFI_SUCCESS; -} /** Initialise the HwInfoParser. @@ -159,7 +83,7 @@ HwInfoParse ( } // Call all the parsers from the root node (-1). - Status = MainDispatcher ( + Status = ArchFdtHwInfoMainDispatcher ( (FDT_HW_INFO_PARSER_HANDLE)ParserHandle, -1 ); diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.h index 8a8cf38581e0..90850b356a8c 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParser.h @@ -60,4 +60,31 @@ EFI_STATUS IN INT32 FdtBranch ); +/** Main dispatcher: sequentially call the parsers/dispatchers + of the HwInfoParserTable. + + A parser parses a Device Tree to populate a specific CmObj type. None, + one or many CmObj can be created by the parser. + The created CmObj are then handed to the parser's caller through the + HW_INFO_ADD_OBJECT interface. + This can also be a dispatcher. I.e. a function that not parsing a + Device Tree but calling other parsers. + + @param [in] FdtParserHandle A handle to the parser instance. + @param [in] FdtBranch When searching for DT node name, restrict + the search to this Device Tree branch. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_ABORTED An error occurred. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_NOT_FOUND Not found. + @retval EFI_UNSUPPORTED Unsupported. +**/ +EFI_STATUS +EFIAPI +ArchFdtHwInfoMainDispatcher ( + IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, + IN INT32 FdtBranch + ); + #endif // FDT_HW_INFO_PARSER_H_ diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index fa768cf664df..3abc6a0fd274 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -22,6 +22,13 @@ FdtHwInfoParser.h FdtUtility.c FdtUtility.h + Pci/ArmPciConfigSpaceParser.c + Pci/ArmPciConfigSpaceParser.h + Serial/ArmSerialPortParser.c + Serial/ArmSerialPortParser.h + +[Sources.ARM, Sources.AARCH64] + Arm/ArmFdtHwInfoParser.c Arm/BootArch/ArmBootArchParser.c Arm/BootArch/ArmBootArchParser.h Arm/GenericTimer/ArmGenericTimerParser.c @@ -38,13 +45,11 @@ Arm/Gic/ArmGicMsiFrameParser.h Arm/Gic/ArmGicRParser.c Arm/Gic/ArmGicRParser.h - Pci/ArmPciConfigSpaceParser.c - Pci/ArmPciConfigSpaceParser.h - Serial/ArmSerialPortParser.c - Serial/ArmSerialPortParser.h -[Packages] +[Packages.ARM, Packages.AARCH64] ArmPkg/ArmPkg.dec + +[Packages] DynamicTablesPkg/DynamicTablesPkg.dec EmbeddedPkg/EmbeddedPkg.dec MdeModulePkg/MdeModulePkg.dec From b815cc735388b7bfd84a79f587eb98051b20f614 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 50/56] DynamicTablesPkg: FdtHwInfoParserLib: Make Pci parser arch neutral To allow other architectures to potentially re-use the serial port parser and make the code arch neutral, remove the Arm prefixes. Also remove the check searching for a GIC version. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c | 4 ++-- .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 4 ++-- ...nfigSpaceParser.c => PciConfigSpaceParser.c} | 17 ++++------------- ...nfigSpaceParser.h => PciConfigSpaceParser.h} | 10 +++++----- 4 files changed, 13 insertions(+), 22 deletions(-) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/{ArmPciConfigSpaceParser.c => PciConfigSpaceParser.c} (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/{ArmPciConfigSpaceParser.h => PciConfigSpaceParser.h} (93%) diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c index 403402731add..49a7636dad0a 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c @@ -9,7 +9,7 @@ #include "Arm/BootArch/ArmBootArchParser.h" #include "Arm/GenericTimer/ArmGenericTimerParser.h" #include "Arm/Gic/ArmGicDispatcher.h" -#include "Pci/ArmPciConfigSpaceParser.h" +#include "Pci/PciConfigSpaceParser.h" #include "Serial/ArmSerialPortParser.h" /** Ordered table of parsers/dispatchers. @@ -25,7 +25,7 @@ STATIC CONST FDT_HW_INFO_PARSER_FUNC HwInfoParserTable[] = { ArmBootArchInfoParser, ArmGenericTimerInfoParser, ArmGicDispatcher, - ArmPciConfigInfoParser, + PciConfigInfoParser, SerialPortDispatcher }; diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index 3abc6a0fd274..55ec7d97fa18 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -22,8 +22,8 @@ FdtHwInfoParser.h FdtUtility.c FdtUtility.h - Pci/ArmPciConfigSpaceParser.c - Pci/ArmPciConfigSpaceParser.h + Pci/PciConfigSpaceParser.c + Pci/PciConfigSpaceParser.h Serial/ArmSerialPortParser.c Serial/ArmSerialPortParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c index 5d11863dfe0a..76f9efdf64d5 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c @@ -1,5 +1,5 @@ /** @file - Arm PCI Configuration Space Parser. + PCI Configuration Space Parser. Copyright (c) 2021, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -16,8 +16,7 @@ #include #include "FdtHwInfoParser.h" -#include "Pci/ArmPciConfigSpaceParser.h" -#include "Arm/Gic/ArmGicDispatcher.h" +#include "Pci/PciConfigSpaceParser.h" /** List of "compatible" property values for host PCIe bridges nodes. @@ -306,8 +305,7 @@ ParseIrqMap ( CONST UINT8 *IrqMapMask; INT32 IrqMapMaskSize; - INT32 PHandleOffset; - UINT32 GicVersion; + INT32 PHandleOffset; UINT32 PciAddressAttr; @@ -366,13 +364,6 @@ ParseIrqMap ( return EFI_ABORTED; } - // Only support Gic(s) for now. - Status = GetGicVersion (Fdt, IntcNode, &GicVersion); - if (EFI_ERROR (Status)) { - ASSERT (0); - return Status; - } - // Get the "address-cells" property of the IntcNode. Status = FdtGetAddressInfo (Fdt, IntcNode, &IntcAddressCells, NULL); if (EFI_ERROR (Status)) { @@ -727,7 +718,7 @@ FreeParserTable ( **/ EFI_STATUS EFIAPI -ArmPciConfigInfoParser ( +PciConfigInfoParser ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, IN INT32 FdtBranch ) diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.h similarity index 93% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.h index e68013838515..aeffe7ac3501 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/ArmPciConfigSpaceParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.h @@ -1,5 +1,5 @@ /** @file - Arm PCI Configuration Space Parser. + PCI Configuration Space Parser. Copyright (c) 2021, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -12,8 +12,8 @@ - linux kernel code **/ -#ifndef ARM_PCI_CONFIG_SPACE_PARSER_H_ -#define ARM_PCI_CONFIG_SPACE_PARSER_H_ +#ifndef PCI_CONFIG_SPACE_PARSER_H_ +#define PCI_CONFIG_SPACE_PARSER_H_ /** Read LEN bits at OFF offsets bits of the ADDR. @@ -135,9 +135,9 @@ typedef struct PciParserTable { **/ EFI_STATUS EFIAPI -ArmPciConfigInfoParser ( +PciConfigInfoParser ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, IN INT32 FdtBranch ); -#endif // ARM_PCI_CONFIG_SPACE_PARSER_H_ +#endif // PCI_CONFIG_SPACE_PARSER_H_ From 39e2865c8344787fb54689bdbcc6765964f60262 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 51/56] DynamicTablesPkg: FdtHwInfoParserLib: Make Serial Port parser arch neutral To allow other architectures to potentially re-use the serial port parser and make the code arch neutral, remove the Arm prefixes. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c | 2 +- .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 4 ++-- ...{ArmSerialPortParser.c => SerialPortParser.c} | 16 ++++++++-------- ...{ArmSerialPortParser.h => SerialPortParser.h} | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/{ArmSerialPortParser.c => SerialPortParser.c} (95%) rename DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/{ArmSerialPortParser.h => SerialPortParser.h} (89%) diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c index 49a7636dad0a..2c9105ed1023 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtHwInfoParser.c @@ -10,7 +10,7 @@ #include "Arm/GenericTimer/ArmGenericTimerParser.h" #include "Arm/Gic/ArmGicDispatcher.h" #include "Pci/PciConfigSpaceParser.h" -#include "Serial/ArmSerialPortParser.h" +#include "Serial/SerialPortParser.h" /** Ordered table of parsers/dispatchers. diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index 55ec7d97fa18..d3010af527c1 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -24,8 +24,8 @@ FdtUtility.h Pci/PciConfigSpaceParser.c Pci/PciConfigSpaceParser.h - Serial/ArmSerialPortParser.c - Serial/ArmSerialPortParser.h + Serial/SerialPortParser.c + Serial/SerialPortParser.h [Sources.ARM, Sources.AARCH64] Arm/ArmFdtHwInfoParser.c diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.c similarity index 95% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.c index f17ad2e842e2..2d0dccea3d3a 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.c @@ -1,5 +1,5 @@ /** @file - Arm Serial Port Parser. + Serial Port Parser. Copyright (c) 2021 - 2023, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -15,7 +15,7 @@ #include "CmObjectDescUtility.h" #include "FdtHwInfoParser.h" -#include "Serial/ArmSerialPortParser.h" +#include "Serial/SerialPortParser.h" /** List of "compatible" property values for serial port nodes. @@ -329,7 +329,7 @@ GetSerialConsoleNode ( STATIC EFI_STATUS EFIAPI -ArmSerialPortInfoDispatch ( +SerialPortInfoDispatch ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, IN CM_ARCH_COMMON_SERIAL_PORT_INFO *GenericSerialInfo, IN INT32 NodeCount, @@ -408,7 +408,7 @@ ArmSerialPortInfoDispatch ( STATIC EFI_STATUS EFIAPI -ArmSerialPortInfoParser ( +SerialPortInfoParser ( IN CONST FDT_HW_INFO_PARSER_HANDLE FdtParserHandle, IN INT32 FdtBranch, IN EARCH_COMMON_OBJECT_ID SerialObjectId @@ -436,7 +436,7 @@ ArmSerialPortInfoParser ( return Status; } - Status = ArmSerialPortInfoDispatch ( + Status = SerialPortInfoDispatch ( FdtParserHandle, &SerialInfo, 1, @@ -529,7 +529,7 @@ SerialPortDispatcher ( return Status; } else { // Parse the console serial-port. - Status = ArmSerialPortInfoParser ( + Status = SerialPortInfoParser ( FdtParserHandle, SerialConsoleNode, EArchCommonObjConsolePortInfo @@ -587,7 +587,7 @@ SerialPortDispatcher ( // The first serial-port node, not being the console serial-port, // will be the debug serial-port. SerialDebugNode = SerialNode; - Status = ArmSerialPortInfoParser ( + Status = SerialPortInfoParser ( FdtParserHandle, SerialDebugNode, EArchCommonObjSerialDebugPortInfo @@ -617,7 +617,7 @@ SerialPortDispatcher ( } // for if (GenericSerialIndex > 0) { - Status = ArmSerialPortInfoDispatch ( + Status = SerialPortInfoDispatch ( FdtParserHandle, GenericSerialInfo, GenericSerialIndex, diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.h similarity index 89% rename from DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h rename to DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.h index 037c409d450a..22c686d5d4ad 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/ArmSerialPortParser.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Serial/SerialPortParser.h @@ -1,5 +1,5 @@ /** @file - Arm Serial Port Parser. + Serial Port Parser. Copyright (c) 2021, ARM Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -9,8 +9,8 @@ - linux/Documentation/devicetree/bindings/serial/8250.txt **/ -#ifndef ARM_SERIAL_PORT_PARSER_H_ -#define ARM_SERIAL_PORT_PARSER_H_ +#ifndef SERIAL_PORT_PARSER_H_ +#define SERIAL_PORT_PARSER_H_ /** SerialPort dispatcher. @@ -44,4 +44,4 @@ SerialPortDispatcher ( IN INT32 FdtBranch ); -#endif // ARM_SERIAL_PORT_PARSER_H_ +#endif // SERIAL_PORT_PARSER_H_ From 0ff5483bd97257fcc02604015b781af4fb18bb0a Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 52/56] DynamicTablesPkg: FdtHwInfoParserLib: Move ArmLib.h to ArmGicCParser.c ArmLib.h is required only for building GIC in ARM. So, move it to ARM specific file. Otherwise, FdtHwInfoParserInclude.h being a common header across architectures will have issue on other architectures. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c | 1 + .../Library/FdtHwInfoParserLib/FdtHwInfoParserInclude.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c index cf577b47242e..395521914671 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/Gic/ArmGicCParser.c @@ -11,6 +11,7 @@ - linux/Documentation/devicetree/bindings/arm/pmu.yaml **/ +#include #include "FdtHwInfoParser.h" #include "CmObjectDescUtility.h" #include "Arm/Gic/ArmGicCParser.h" diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserInclude.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserInclude.h index 583f290095d9..60f671eccc3f 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserInclude.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserInclude.h @@ -10,7 +10,6 @@ #include #include -#include #include #include From f55b28827bdba7143be41b696ed20fe151435c97 Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 53/56] DynamicTablesPkg: FdtHwInfoParserLib: Move IRQ map to arch folder The interrupts property in DT is arch specific. Move the current implementation and the way to decode the property to the Arm folder to prepare for other architecture support. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar Reviewed-by: Sunil V L --- .../FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c | 85 +++++++++++++++++++ .../FdtHwInfoParserLib/FdtHwInfoParserLib.inf | 1 + .../Library/FdtHwInfoParserLib/FdtUtility.c | 71 ---------------- 3 files changed, 86 insertions(+), 71 deletions(-) create mode 100644 DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c new file mode 100644 index 000000000000..21b1306e577d --- /dev/null +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c @@ -0,0 +1,85 @@ +/** @file + Flattened device tree utility. + + Copyright (c) 2021, ARM Limited. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - Device tree Specification - Release v0.3 + - linux/Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml + - linux//Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.yaml +**/ + +#include +#include "FdtUtility.h" + +/** Get the interrupt Id of an interrupt described in a fdt. + + Data must describe a GIC interrupt. A GIC interrupt is on at least + 3 UINT32 cells. + This function DOES NOT SUPPORT extended SPI range and extended PPI range. + + @param [in] Data Pointer to the first cell of an "interrupts" property. + + @retval The interrupt id. +**/ +UINT32 +EFIAPI +FdtGetInterruptId ( + UINT32 CONST *Data + ) +{ + UINT32 IrqType; + UINT32 IrqId; + + ASSERT (Data != NULL); + + IrqType = fdt32_to_cpu (Data[IRQ_TYPE_OFFSET]); + IrqId = fdt32_to_cpu (Data[IRQ_NUMBER_OFFSET]); + + switch (IrqType) { + case DT_SPI_IRQ: + IrqId += SPI_OFFSET; + break; + + case DT_PPI_IRQ: + IrqId += PPI_OFFSET; + break; + + default: + ASSERT (0); + IrqId = 0; + } + + return IrqId; +} + +/** Get the ACPI interrupt flags of an interrupt described in a fdt. + + Data must describe a GIC interrupt. A GIC interrupt is on at least + 3 UINT32 cells. + + PPI interrupt cpu mask on bits [15:8] are ignored. + + @param [in] Data Pointer to the first cell of an "interrupts" property. + + @retval The interrupt flags (for ACPI). +**/ +UINT32 +EFIAPI +FdtGetInterruptFlags ( + UINT32 CONST *Data + ) +{ + UINT32 IrqFlags; + UINT32 AcpiIrqFlags; + + ASSERT (Data != NULL); + + IrqFlags = fdt32_to_cpu (Data[IRQ_FLAGS_OFFSET]); + + AcpiIrqFlags = DT_IRQ_IS_EDGE_TRIGGERED (IrqFlags) ? BIT0 : 0; + AcpiIrqFlags |= DT_IRQ_IS_ACTIVE_LOW (IrqFlags) ? BIT1 : 0; + + return AcpiIrqFlags; +} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf index d3010af527c1..c8511ab4dd82 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtHwInfoParserLib.inf @@ -28,6 +28,7 @@ Serial/SerialPortParser.h [Sources.ARM, Sources.AARCH64] + Arm/ArmFdtInterrupt.c Arm/ArmFdtHwInfoParser.c Arm/BootArch/ArmBootArchParser.c Arm/BootArch/ArmBootArchParser.h diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c index 5314cf3808c2..bab228575938 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.c @@ -13,77 +13,6 @@ #include #include "FdtUtility.h" -/** Get the interrupt Id of an interrupt described in a fdt. - - Data must describe a GIC interrupt. A GIC interrupt is on at least - 3 UINT32 cells. - This function DOES NOT SUPPORT extended SPI range and extended PPI range. - - @param [in] Data Pointer to the first cell of an "interrupts" property. - - @retval The interrupt id. -**/ -UINT32 -EFIAPI -FdtGetInterruptId ( - UINT32 CONST *Data - ) -{ - UINT32 IrqType; - UINT32 IrqId; - - ASSERT (Data != NULL); - - IrqType = fdt32_to_cpu (Data[IRQ_TYPE_OFFSET]); - IrqId = fdt32_to_cpu (Data[IRQ_NUMBER_OFFSET]); - - switch (IrqType) { - case DT_SPI_IRQ: - IrqId += SPI_OFFSET; - break; - - case DT_PPI_IRQ: - IrqId += PPI_OFFSET; - break; - - default: - ASSERT (0); - IrqId = 0; - } - - return IrqId; -} - -/** Get the ACPI interrupt flags of an interrupt described in a fdt. - - Data must describe a GIC interrupt. A GIC interrupt is on at least - 3 UINT32 cells. - - PPI interrupt cpu mask on bits [15:8] are ignored. - - @param [in] Data Pointer to the first cell of an "interrupts" property. - - @retval The interrupt flags (for ACPI). -**/ -UINT32 -EFIAPI -FdtGetInterruptFlags ( - UINT32 CONST *Data - ) -{ - UINT32 IrqFlags; - UINT32 AcpiIrqFlags; - - ASSERT (Data != NULL); - - IrqFlags = fdt32_to_cpu (Data[IRQ_FLAGS_OFFSET]); - - AcpiIrqFlags = DT_IRQ_IS_EDGE_TRIGGERED (IrqFlags) ? BIT0 : 0; - AcpiIrqFlags |= DT_IRQ_IS_ACTIVE_LOW (IrqFlags) ? BIT1 : 0; - - return AcpiIrqFlags; -} - /** Check whether a node has the input name. @param [in] Fdt Pointer to a Flattened Device Tree. From 958a68c7198326ed817c96f744b0549174d86d2b Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Mon, 10 Jun 2024 14:00:00 +0200 Subject: [PATCH 54/56] DynamicTablesPkg: FdtHwInfoParserLib: Create wrapper to get INTC addr cells Parent interrupt controller's address cells is arch specific. So, create a wrapper function which can be implemented differently for different archs. Move current implementation to ARM specific file. Suggested-by: Sunil V L Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar Reviewed-by: Sunil V L --- .../AcpiSsdtPcieLib/SsdtPcieGenerator.c | 2 +- .../FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c | 33 +++++++++++++++++++ .../Library/FdtHwInfoParserLib/FdtUtility.h | 30 +++++++++++++++++ .../Pci/PciConfigSpaceParser.c | 2 +- 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c index 2b488016e545..5b6d5515622b 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c @@ -974,7 +974,7 @@ BuildSsdtPciTableEx ( EFI_STATUS Status; CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO *PciInfo; UINT32 PciCount; - UINTN Index; + UINT32 Index; EFI_ACPI_DESCRIPTION_HEADER **TableList; ACPI_PCI_GENERATOR *Generator; UINT32 Uid; diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c index 21b1306e577d..71774fae7113 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/ArmFdtInterrupt.c @@ -83,3 +83,36 @@ FdtGetInterruptFlags ( return AcpiIrqFlags; } + +/** For relevant architectures, get the "#address-cells" and/or "#size-cells" + property of the node. + + According to the Device Tree specification, s2.3.5 "#address-cells and + #size-cells": + "If missing, a client program should assume a default value of 2 for + #address-cells, and a value of 1 for #size-cells." + + @param [in] Fdt Pointer to a Flattened Device Tree. + @param [in] Node Offset of the node having to get the + "#address-cells" and "#size-cells" + properties from. + @param [out] AddressCells If success, number of address-cells. + If the property is not available, + default value is 2. + @param [out] SizeCells If success, number of size-cells. + If the property is not available, + default value is 1. + + @retval EFI_INVALID_PARAMETER Invalid parameter. +**/ +EFI_STATUS +EFIAPI +FdtGetIntcAddressCells ( + IN CONST VOID *Fdt, + IN INT32 Node, + OUT INT32 *AddressCells, OPTIONAL + OUT INT32 *SizeCells OPTIONAL + ) +{ + return FdtGetAddressInfo (Fdt, Node, AddressCells, SizeCells); +} diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.h b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.h index 3f5d131d9ae5..2d7048753b9f 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.h +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/FdtUtility.h @@ -455,4 +455,34 @@ FdtGetParentAddressInfo ( OUT INT32 *SizeCells OPTIONAL ); +/** For relevant architectures, get the "#address-cells" and/or "#size-cells" + property of the node. + + According to the Device Tree specification, s2.3.5 "#address-cells and + #size-cells": + "If missing, a client program should assume a default value of 2 for + #address-cells, and a value of 1 for #size-cells." + + @param [in] Fdt Pointer to a Flattened Device Tree. + @param [in] Node Offset of the node having to get the + "#address-cells" and "#size-cells" + properties from. + @param [out] AddressCells If success, number of address-cells. + If the property is not available, + default value is 2. + @param [out] SizeCells If success, number of size-cells. + If the property is not available, + default value is 1. + + @retval EFI_INVALID_PARAMETER Invalid parameter. +**/ +EFI_STATUS +EFIAPI +FdtGetIntcAddressCells ( + IN CONST VOID *Fdt, + IN INT32 Node, + OUT INT32 *AddressCells, OPTIONAL + OUT INT32 *SizeCells OPTIONAL + ); + #endif // FDT_UTILITY_H_ diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c index 76f9efdf64d5..7f536c0ac63e 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Pci/PciConfigSpaceParser.c @@ -365,7 +365,7 @@ ParseIrqMap ( } // Get the "address-cells" property of the IntcNode. - Status = FdtGetAddressInfo (Fdt, IntcNode, &IntcAddressCells, NULL); + Status = FdtGetIntcAddressCells (Fdt, IntcNode, &IntcAddressCells, NULL); if (EFI_ERROR (Status)) { ASSERT (0); return Status; From 37a2b76c1f839ee0abbec2dd04492ea9342a4f6b Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Wed, 3 Jul 2024 11:53:39 +0200 Subject: [PATCH 55/56] DynamicTablesPkg: Fix conversion compiler warnings Some CM objects fields are wider than the targeted field in ACPI tables. Some assignments are also subject to data loss and trigger the following warnings: - '<': signed/unsigned mismatch - '=': conversion from 'UINTxx' to 'UINTyy', possible loss of data with xx > yy. Add checks/cast to remove the warnings. Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- .../Acpi/Common/AcpiPcctLib/PcctGenerator.c | 15 +++++++++++---- .../SsdtCpuTopologyGenerator.c | 6 ++++-- .../Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c | 15 ++++++++++----- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c index 205c44405785..ef5d8823c223 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c @@ -379,10 +379,12 @@ AddSubspaceStructType1 ( Doorbell = &GenericPccCmObj->DoorbellReg; ChannelTiming = &GenericPccCmObj->ChannelTiming; + ASSERT ((PccCmObj->PlatIrq.Flags & ~MAX_UINT8) == 0); + PccAcpi->Type = GenericPccCmObj->Type; PccAcpi->Length = sizeof (EFI_ACPI_6_4_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS); PccAcpi->PlatformInterrupt = PccCmObj->PlatIrq.Interrupt; - PccAcpi->PlatformInterruptFlags = PccCmObj->PlatIrq.Flags; + PccAcpi->PlatformInterruptFlags = (UINT8)PccCmObj->PlatIrq.Flags; PccAcpi->Reserved = EFI_ACPI_RESERVED_BYTE; PccAcpi->BaseAddress = GenericPccCmObj->BaseAddress; PccAcpi->AddressLength = GenericPccCmObj->AddressLength; @@ -441,10 +443,12 @@ AddSubspaceStructType2 ( PlatIrqAck = &PccCmObj->PlatIrqAckReg; ChannelTiming = &GenericPccCmObj->ChannelTiming; + ASSERT ((PccCmObj->PlatIrq.Flags & ~MAX_UINT8) == 0); + PccAcpi->Type = GenericPccCmObj->Type; PccAcpi->Length = sizeof (EFI_ACPI_6_4_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS); PccAcpi->PlatformInterrupt = PccCmObj->PlatIrq.Interrupt; - PccAcpi->PlatformInterruptFlags = PccCmObj->PlatIrq.Flags; + PccAcpi->PlatformInterruptFlags = (UINT8)PccCmObj->PlatIrq.Flags; PccAcpi->BaseAddress = GenericPccCmObj->BaseAddress; PccAcpi->Reserved = EFI_ACPI_RESERVED_BYTE; PccAcpi->BaseAddress = GenericPccCmObj->BaseAddress; @@ -519,13 +523,16 @@ AddSubspaceStructType34 ( ErrorStatus = &PccCmObj->ErrorStatusReg; ChannelTiming = &GenericPccCmObj->ChannelTiming; + ASSERT ((PccCmObj->PlatIrq.Flags & ~MAX_UINT8) == 0); + ASSERT ((GenericPccCmObj->AddressLength & ~MAX_UINT32) == 0); + PccAcpi->Type = GenericPccCmObj->Type; PccAcpi->Length = sizeof (EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC); PccAcpi->PlatformInterrupt = PccCmObj->PlatIrq.Interrupt; - PccAcpi->PlatformInterruptFlags = PccCmObj->PlatIrq.Flags; + PccAcpi->PlatformInterruptFlags = (UINT8)PccCmObj->PlatIrq.Flags; PccAcpi->Reserved = EFI_ACPI_RESERVED_BYTE; PccAcpi->BaseAddress = GenericPccCmObj->BaseAddress; - PccAcpi->AddressLength = GenericPccCmObj->AddressLength; + PccAcpi->AddressLength = (UINT32)GenericPccCmObj->AddressLength; CopyMem ( &PccAcpi->DoorbellRegister, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c index 74595131935c..9097ac3deba6 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c @@ -1026,7 +1026,8 @@ CreateAmlCpuTopologyTree ( if (Generator->ProcNodeList[Index].OverrideNameUidEnabled) { Name = Generator->ProcNodeList[Index].OverrideName; } else { - Name = CpuIndex; + ASSERT ((CpuIndex & ~MAX_UINT16) == 0); + Name = (UINT16)CpuIndex; } Status = CreateAmlCpuFromProcHierarchy ( @@ -1061,7 +1062,8 @@ CreateAmlCpuTopologyTree ( Name = Generator->ProcNodeList[Index].OverrideName; Uid = Generator->ProcNodeList[Index].OverrideUid; } else { - Name = ProcContainerName; + ASSERT ((ProcContainerName & ~MAX_UINT16) == 0); + Name = (UINT16)ProcContainerName; Uid = *ProcContainerIndex; } diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c index 5b6d5515622b..618056e85a2a 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtPcieLib/SsdtPcieGenerator.c @@ -311,7 +311,7 @@ GeneratePrt ( ) { EFI_STATUS Status; - INT32 Index; + UINT32 Index; AML_OBJECT_NODE_HANDLE PrtNode; CM_ARCH_COMMON_OBJ_REF *RefInfo; UINT32 RefCount; @@ -561,6 +561,11 @@ GeneratePciCrs ( break; case PCI_SS_M32: + ASSERT ((AddrMapInfo->PciAddress & ~MAX_UINT32) == 0); + ASSERT (((AddrMapInfo->PciAddress + AddrMapInfo->AddressSize - 1) & ~MAX_UINT32) == 0); + ASSERT (((Translation ? AddrMapInfo->CpuAddress - AddrMapInfo->PciAddress : 0) & ~MAX_UINT32) == 0); + ASSERT ((AddrMapInfo->AddressSize & ~MAX_UINT32) == 0); + Status = AmlCodeGenRdDWordMemory ( FALSE, IsPosDecode, @@ -569,10 +574,10 @@ GeneratePciCrs ( AmlMemoryCacheable, TRUE, 0, - AddrMapInfo->PciAddress, - AddrMapInfo->PciAddress + AddrMapInfo->AddressSize - 1, - Translation ? AddrMapInfo->CpuAddress - AddrMapInfo->PciAddress : 0, - AddrMapInfo->AddressSize, + (UINT32)(AddrMapInfo->PciAddress), + (UINT32)(AddrMapInfo->PciAddress + AddrMapInfo->AddressSize - 1), + (UINT32)(Translation ? AddrMapInfo->CpuAddress - AddrMapInfo->PciAddress : 0), + (UINT32)(AddrMapInfo->AddressSize), 0, NULL, AmlAddressRangeMemory, From dec4e3a176b52059315a9fa1e628f6d73062878e Mon Sep 17 00:00:00 2001 From: Pierre Gondois Date: Wed, 3 Jul 2024 11:53:40 +0200 Subject: [PATCH 56/56] DynamicTablesPkg: Add EFIAPI to generators hooks For X64 builds, the EFIAPI is replaced by '(__attribute__((ms_abi))'. This might lead to build error for some ACPI tablte generators due to function prototype mismatch. Add the EFIAPI to ACPI table generator hooks: - ACPI_TABLE_GENERATOR_BUILD_TABLEEX - ACPI_TABLE_GENERATOR_FREE_TABLEEX Signed-off-by: Pierre Gondois Reviewed-by: Sami Mujawar --- DynamicTablesPkg/Include/AcpiTableGenerator.h | 8 ++++---- .../Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c | 1 + .../Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c | 1 + .../Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c | 1 + .../Library/Acpi/Common/AcpiSratLib/SratGenerator.c | 1 + .../AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c | 1 + 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/DynamicTablesPkg/Include/AcpiTableGenerator.h b/DynamicTablesPkg/Include/AcpiTableGenerator.h index d0eda011c301..f5c6179be082 100644 --- a/DynamicTablesPkg/Include/AcpiTableGenerator.h +++ b/DynamicTablesPkg/Include/AcpiTableGenerator.h @@ -214,7 +214,7 @@ typedef struct AcpiTableGenerator ACPI_TABLE_GENERATOR; @return EFI_SUCCESS If the table is generated successfully or other failure codes as returned by the generator. **/ -typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_BUILD_TABLE) ( +typedef EFI_STATUS (EFIAPI *ACPI_TABLE_GENERATOR_BUILD_TABLE)( IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, @@ -234,7 +234,7 @@ typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_BUILD_TABLE) ( @return EFI_SUCCESS If freed successfully or other failure codes as returned by the generator. **/ -typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_FREE_TABLE) ( +typedef EFI_STATUS (EFIAPI *ACPI_TABLE_GENERATOR_FREE_TABLE)( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, @@ -257,7 +257,7 @@ typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_FREE_TABLE) ( @return EFI_SUCCESS If the table is generated successfully or other failure codes as returned by the generator. **/ -typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_BUILD_TABLEEX) ( +typedef EFI_STATUS (EFIAPI *ACPI_TABLE_GENERATOR_BUILD_TABLEEX)( IN CONST ACPI_TABLE_GENERATOR *This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, @@ -280,7 +280,7 @@ typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_BUILD_TABLEEX) ( @return EFI_SUCCESS If freed successfully or other failure codes as returned by the generator. **/ -typedef EFI_STATUS (*ACPI_TABLE_GENERATOR_FREE_TABLEEX) ( +typedef EFI_STATUS (EFIAPI *ACPI_TABLE_GENERATOR_FREE_TABLEEX)( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c index 722f9c17d541..40dea304e301 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/McfgGenerator.c @@ -261,6 +261,7 @@ BuildMcfgTable ( **/ STATIC EFI_STATUS +EFIAPI FreeMcfgTableResources ( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c index ef5d8823c223..36e6807023fb 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/PcctGenerator.c @@ -1075,6 +1075,7 @@ BuildPcctTable ( **/ STATIC EFI_STATUS +EFIAPI FreePcctTableResources ( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c index 2b8088a07f44..fd465cbab0e9 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/PpttGenerator.c @@ -1342,6 +1342,7 @@ BuildPpttTable ( **/ STATIC EFI_STATUS +EFIAPI FreePpttTableResources ( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c index dcdacc4e966e..1a9434e6bd08 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/SratGenerator.c @@ -552,6 +552,7 @@ BuildSratTable ( **/ STATIC EFI_STATUS +EFIAPI FreeSratTableResources ( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c index 9097ac3deba6..24b06d01dc4d 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiSsdtCpuTopologyLib/SsdtCpuTopologyGenerator.c @@ -1313,6 +1313,7 @@ BuildSsdtCpuTopologyTable ( **/ STATIC EFI_STATUS +EFIAPI FreeSsdtCpuTopologyTableResources ( IN CONST ACPI_TABLE_GENERATOR *CONST This, IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo,