From b3783de91ef9e3463fb3040d3ddb831082bee4e6 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 14:38:38 -0700 Subject: [PATCH 01/14] Add platform dependent entries to HMAT --- MdePkg/Include/IndustryStandard/Acpi64.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MdePkg/Include/IndustryStandard/Acpi64.h b/MdePkg/Include/IndustryStandard/Acpi64.h index 295ec9db7261..4b0353b44ffe 100644 --- a/MdePkg/Include/IndustryStandard/Acpi64.h +++ b/MdePkg/Include/IndustryStandard/Acpi64.h @@ -2205,6 +2205,7 @@ typedef struct { UINT32 NumberOfTargetProximityDomains; UINT8 Reserved2[4]; UINT64 EntryBaseUnit; + UINT32 LatBwInfo[]; } EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO; /// @@ -2231,6 +2232,7 @@ typedef struct { EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES CacheAttributes; UINT8 Reserved2[2]; UINT16 NumberOfSmbiosHandles; + UINT16 SmbiosHandles[]; } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO; /// From afb27034c3aac5e4f12c596c3e7a720c8941b450 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 02/14] Add ACPI HMAT implmentation. --- DynamicTablesPkg/DynamicTables.dsc.inc | 2 + DynamicTablesPkg/Include/AcpiTableGenerator.h | 3 + .../Include/ArmNameSpaceObjects.h | 57 ++ DynamicTablesPkg/Include/TableGenerator.h | 1 + .../Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf | 36 ++ .../Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c | 523 ++++++++++++++++++ DynamicTablesPkg/Readme.md | 1 + 7 files changed, 623 insertions(+) create mode 100644 DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf create mode 100644 DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc index 7b76d64abcec..7ad7339997ea 100644 --- a/DynamicTablesPkg/DynamicTables.dsc.inc +++ b/DynamicTablesPkg/DynamicTables.dsc.inc @@ -90,6 +90,7 @@ # Generators (Arm specific) # DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf + DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLib/AcpiHmatLib.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf @@ -114,6 +115,7 @@ NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiTpm2Lib/AcpiTpm2Lib.inf # Arm specific + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLib/AcpiHmatLib.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf diff --git a/DynamicTablesPkg/Include/AcpiTableGenerator.h b/DynamicTablesPkg/Include/AcpiTableGenerator.h index 90aa534750f9..977b80268b81 100755 --- a/DynamicTablesPkg/Include/AcpiTableGenerator.h +++ b/DynamicTablesPkg/Include/AcpiTableGenerator.h @@ -41,6 +41,8 @@ The Dynamic Tables Framework implements the following ACPI table generators: is in the way the ACPI Table Data is generated from an AML file. - FADT : The FADT generator collates the required platform information from the Configuration Manager and builds the FADT table. + - HMAT : The HMAT generator collates the required platform information from + the Configuration Manager and builds the HMAT table. - MADT : The MADT generator collates the GIC information from the Configuration Manager and builds the MADT table. - GTDT : The GTDT generator collates the Timer information from the @@ -95,6 +97,7 @@ typedef enum StdAcpiTableId { EStdAcpiTableIdDsdt = EStdAcpiTableIdRaw, ///< DSDT Generator EStdAcpiTableIdSsdt = EStdAcpiTableIdRaw, ///< SSDT Generator EStdAcpiTableIdFadt, ///< FADT Generator + EStdAcpiTableIdHmat, ///< HMAT Generator EStdAcpiTableIdMadt, ///< MADT Generator EStdAcpiTableIdGtdt, ///< GTDT Generator EStdAcpiTableIdDbg2, ///< DBG2 Generator diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 958c3dc93cd3..e98ee0571388 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -52,6 +52,10 @@ typedef enum ArmObjectID { EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor EArmObjEtInfo, ///< 23 - Embedded Trace Extension/Module Info + EArmObjMemoryInitTargetInfo, ///< 24 - Memory Initiator and Target Info + EArmObjMemoryProxDomainAttrInfo, ///< 25 - Memory Proximity Attribute Info + EArmObjMemoryLatBwInfo, ///< 26 - Memory Latency and Bandwidth Info + EArmObjMemoryCacheInfo, ///< 27 - Memory Cache Info EArmObjMax } EARM_OBJECT_ID; @@ -723,6 +727,59 @@ typedef struct CmArmEtInfo { ARM_ET_TYPE EtType; } CM_ARM_ET_INFO; +/** A structure that describes the Memory Initiator and Target number. + + ID: EArmObjMemoryInitTargetInfo +*/ + +typedef struct CmArmMemoryInitTargetInfo { + UINT32 NumInitiator; + UINT32 NumTarget; +} CM_ARM_MEMORY_INIT_TARGET_INFO; + +/** A structure that describes the Memory Proximity Domain Attribute. + + ID: EArmObjMemoryProxDomainAttrInfo +*/ + +typedef struct CmArmMemoryProxDomainAttrInfo { + UINT16 Type; + UINT16 Flags; + UINT32 ProcessorProximityDomain; + UINT32 MemoryProximityDomain; +} CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO; + +/** A structure that describes the Memory Latency Bandwidth Info. + + ID: EArmObjMemoryLatBwInfo +*/ + +typedef struct CmArmMemoryLatBwInfo { + UINT16 Type; + UINT8 Flags; + UINT8 DataType; + UINT8 MinTransferSize; + UINT32 InitiatorProximityDomainsNumber; + UINT32 TargetProximityDomainsNumber; + UINT64 EntryBaseUnit; + UINT32 InitiatorProximityDomainList[8]; + UINT32 TargetProximityDomainList[8]; + UINT16 RelativeDistanceEntry[64]; +} CM_ARM_MEMORY_LAT_BW_INFO; + +/** A structure that describes the Memory Cache Info. + + ID: EArmObjMemoryCacheInfo +*/ + +typedef struct CmArmMemoryCacheInfo { + UINT16 Type; + UINT32 MemoryProximityDomain; + UINT64 MemorySideCacheSize; + UINT32 CacheAttributes; + UINT16 NumSmbiosHandles; + UINT16 SmbiosHandles [8]; +} CM_ARM_MEMORY_CACHE_INFO; #pragma pack() #endif // ARM_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/TableGenerator.h b/DynamicTablesPkg/Include/TableGenerator.h index f28204d3742e..5cf7c96b5d6a 100644 --- a/DynamicTablesPkg/Include/TableGenerator.h +++ b/DynamicTablesPkg/Include/TableGenerator.h @@ -56,6 +56,7 @@ _______________________________________________________________________________ 8 - SPCR 9 - MCFG 10 - PPTT + 11 - HMAT Standard SMBIOS Table IDs: 0 - Reserved diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf new file mode 100644 index 000000000000..842f9db5890e --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf @@ -0,0 +1,36 @@ +## @file +# HMAT Table Generator +# +# Copyright (c) 2025, Arm Limited. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = AcpiHmatLibArm + FILE_GUID = 1724d37a-fb05-4fe6-bb13-c04a46efe0ac + VERSION_STRING = 1.0 + MODULE_TYPE = DXE_DRIVER + LIBRARY_CLASS = NULL|DXE_DRIVER + CONSTRUCTOR = AcpiHmatLibConstructor + DESTRUCTOR = AcpiHmatLibDestructor + +[Sources] + HmatGenerator.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + EmbeddedPkg/EmbeddedPkg.dec + DynamicTablesPkg/DynamicTablesPkg.dec + +[LibraryClasses] + BaseLib + +[Pcd] + +[Protocols] + +[Guids] + diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c new file mode 100644 index 000000000000..23e94ab005b7 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c @@ -0,0 +1,523 @@ +/** @file + HMAT Table Generator + + Copyright (c) 2025, Google 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 + +/** ARM standard HMAT Table Generator + + Constructs the HMAT table. + +*/ + +/** Add the MemProxDomainAttr Information + to the HMAT Table. + + @param [in] MemProxDomainAttrInfo Pointer to EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES. + @param [in] CmMemProxDomainAttrInfo Pointer to CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO in CM. + @param [in] MemProxDomainAttrCount Counts of MemProxDomainAttrInfo +**/ +STATIC +VOID +AddMemProxDomainAttrInfo ( + IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *MemProxDomainAttrInfo, + IN CONST CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *CmMemProxDomainAttrInfo, + IN UINT32 MemProxDomainAttrCount + ) +{ + ASSERT (MemProxDomainAttrInfo != NULL); + ASSERT (CmMemProxDomainAttrInfo != NULL); + + while (MemProxDomainAttrCount-- != 0) { + MemProxDomainAttrInfo->Type = CmMemProxDomainAttrInfo->Type; + MemProxDomainAttrInfo->Length = sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES); + CopyMem(&MemProxDomainAttrInfo->Flags, &CmMemProxDomainAttrInfo->Flags, sizeof(UINT16)); + MemProxDomainAttrInfo->InitiatorProximityDomain = CmMemProxDomainAttrInfo->ProcessorProximityDomain; + MemProxDomainAttrInfo->MemoryProximityDomain = CmMemProxDomainAttrInfo->MemoryProximityDomain; + MemProxDomainAttrInfo++; + CmMemProxDomainAttrInfo++; + } +} + +/** Add the MemLatBwInfo Information + to the HMAT Table. + + @param [in, out] MemLatBwInfo Pointer to EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO. + @param [in] CmMemLatBwInfo Pointer to CM_ARM_MEMORY_LAT_BW_INFO in CM. + @param [in] CmMemInitTargetInfo Pointer to CM_ARM_MEMORY_INIT_TARGET_INFO. + @param [in] MemLatBwInfoLength Length of Memort Latency BW info. +**/ +STATIC +VOID +AddMemLatBwInfo ( + IN OUT EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO *MemLatBwInfo, + IN CONST CM_ARM_MEMORY_LAT_BW_INFO *CmMemLatBwInfo, + IN CONST CM_ARM_MEMORY_INIT_TARGET_INFO *CmMemInitTargetInfo, + IN CONST UINT32 MemLatBwInfoLength + ) +{ + ASSERT (MemLatBwInfo != NULL); + ASSERT (CmMemLatBwInfo != NULL); + ASSERT (CmMemInitTargetInfo != NULL); + + MemLatBwInfo->Type = CmMemLatBwInfo->Type; + MemLatBwInfo->Length = MemLatBwInfoLength; + CopyMem(&MemLatBwInfo->Flags, &CmMemLatBwInfo->Flags, sizeof(UINT8)); + MemLatBwInfo->DataType = CmMemLatBwInfo->DataType; + MemLatBwInfo->MinTransferSize = CmMemLatBwInfo->MinTransferSize; + MemLatBwInfo->NumberOfInitiatorProximityDomains = CmMemLatBwInfo->InitiatorProximityDomainsNumber; + MemLatBwInfo->NumberOfTargetProximityDomains = CmMemLatBwInfo->TargetProximityDomainsNumber; + MemLatBwInfo->EntryBaseUnit = CmMemLatBwInfo->EntryBaseUnit; + + void *MemLatBwInfoLocal = (void*) MemLatBwInfo; + + MemLatBwInfoLocal += sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO); + + CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->InitiatorProximityDomainList, sizeof(UINT32) * CmMemInitTargetInfo->NumInitiator); + MemLatBwInfoLocal += sizeof(UINT32) * CmMemInitTargetInfo->NumInitiator; + CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->TargetProximityDomainList, sizeof(UINT32) * CmMemInitTargetInfo->NumTarget); + MemLatBwInfoLocal += sizeof(UINT32) * CmMemInitTargetInfo->NumTarget; + CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->RelativeDistanceEntry, sizeof(UINT16) * CmMemInitTargetInfo->NumTarget * CmMemInitTargetInfo->NumInitiator); +} + +/** Add the MemCache Information + to the HMAT Table. + + @param [in] MemCacheInfo Pointer to EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO. + @param [in] CmMemCacheInfo Pointer to CM_ARM_MEMORY_CACHE_INFO in CM. + @param [in] MemCacheLength Length of MemCacheInfo. +**/ +STATIC +VOID +AddMemCacheInfo ( + IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *MemCacheInfo, + IN CONST CM_ARM_MEMORY_CACHE_INFO *CmMemCacheInfo, + IN CONST UINT32 MemCacheLength + ) +{ + ASSERT (MemCacheInfo != NULL); + ASSERT (CmMemCacheInfo != NULL); + + MemCacheInfo->Type = CmMemCacheInfo->Type; + MemCacheInfo->Length = MemCacheLength; + MemCacheInfo->MemoryProximityDomain = CmMemCacheInfo->MemoryProximityDomain; + MemCacheInfo->MemorySideCacheSize = CmMemCacheInfo->MemorySideCacheSize; + CopyMem(&MemCacheInfo->CacheAttributes, &CmMemCacheInfo->CacheAttributes, sizeof(UINT32)); + MemCacheInfo->NumberOfSmbiosHandles = CmMemCacheInfo->NumSmbiosHandles; + + void *MemCacheInfoLocal = (void*)MemCacheInfo; + MemCacheInfoLocal += sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO); + CopyMem(MemCacheInfoLocal, CmMemCacheInfo->SmbiosHandles, sizeof(UINT16) * CmMemCacheInfo->NumSmbiosHandles); +} + +/** This macro expands to a function that retrieves the Memory + Proximity Domain Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjMemoryInitTargetInfo, + CM_ARM_MEMORY_INIT_TARGET_INFO + ); + + +/** This macro expands to a function that retrieves the Memory + Proximity Domain Attribute Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjMemoryProxDomainAttrInfo, + CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO + ); + +/** This macro expands to a function that retrieves the Memory + Latency and Bandwidth Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjMemoryLatBwInfo, + CM_ARM_MEMORY_LAT_BW_INFO + ); + +/** This macro expands to a function that retrieves the Memory + Cache Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjMemoryCacheInfo, + CM_ARM_MEMORY_CACHE_INFO + ); + + +/** Free any resources allocated for constructing the table. + + @param [in] This Pointer to the ACPI table generator. + @param [in] AcpiTableInfo Pointer to the ACPI Table Info. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in, out] Table Pointer to ACPI Table. + + @retval EFI_SUCCESS The resources were freed successfully. + @retval EFI_INVALID_PARAMETER The table pointer is NULL or invalid. +**/ +STATIC +EFI_STATUS +EFIAPI +FreeHmatTable ( + 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, + IN OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table + ) +{ + ASSERT (This != NULL); + ASSERT (AcpiTableInfo != NULL); + ASSERT (CfgMgrProtocol != NULL); + ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID); + ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature); + + if ((Table == NULL) || (*Table == NULL)) { + DEBUG ((DEBUG_ERROR, "ERROR: HMAT: Invalid Table Pointer\n")); + ASSERT ((Table != NULL) && (*Table != NULL)); + return EFI_INVALID_PARAMETER; + } + + if (*Table != NULL) { + FreePool (*Table); + *Table = NULL; + } + return EFI_SUCCESS; +} + +/** Construct the HMAT ACPI table. + + This function invokes the Configuration Manager protocol interface + to get the required hardware information for generating the ACPI + table. + + If this function allocates any resources then they must be freed + in the FreeXXXXTableResourcesEx function. + + @param [in] This Pointer to the ACPI table generator. + @param [in] AcpiTableInfo Pointer to the ACPI table information. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol interface. + @param [out] Table Pointer to the generated ACPI table. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for + the requested object. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND Could not find information. + @retval EFI_OUT_OF_RESOURCES Could not allocate memory. + @retval EFI_UNSUPPORTED Unsupported configuration. +**/ +STATIC +EFI_STATUS +EFIAPI +BuildHmatTable ( + IN CONST ACPI_TABLE_GENERATOR *This, + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table + ) +{ + EFI_STATUS Status; + UINT32 TableSize; + UINT32 MemInitTargetCount; + UINT32 MemProxDomainAttrCount; + UINT32 MemLatBwCount; + UINT32 MemCacheCount; + UINT32 MemLatBwInfoLength; + UINT32 MemCacheLength; + CM_ARM_MEMORY_INIT_TARGET_INFO *MemInitTargetInfo; + CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *MemProxDomainAttrInfo; + CM_ARM_MEMORY_LAT_BW_INFO *MemLatBwInfo; + CM_ARM_MEMORY_CACHE_INFO *MemCacheInfo; + UINT32 MemProxDomainAttrOffset; + UINT32 MemLatBwOffset; + UINT32 MemCacheOffset; + + ASSERT (This != NULL); + ASSERT (AcpiTableInfo != NULL); + ASSERT (CfgMgrProtocol != NULL); + ASSERT (Table != NULL); + ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID); + ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature); + + *Table = NULL; + EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER *Hmat; + + Status = GetEArmObjMemoryInitTargetInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemInitTargetInfo, + &MemInitTargetCount + ); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemInitTarget Info. Status = %r\n", + Status + )); + goto error_handler; + } + + Status = GetEArmObjMemoryProxDomainAttrInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemProxDomainAttrInfo, + &MemProxDomainAttrCount + ); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemProxDomain Info. Status = %r\n", + Status + )); + goto error_handler; + } + + if (MemProxDomainAttrCount == 0) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: MemProxDomain information not provided.\n" + )); + ASSERT (MemProxDomainAttrCount != 0); + Status = EFI_INVALID_PARAMETER; + goto error_handler; + } + + Status = GetEArmObjMemoryLatBwInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemLatBwInfo, + &MemLatBwCount + ); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemLatBwInfo. Status = %r\n", + Status + )); + goto error_handler; + } + + if (MemLatBwCount == 0) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: MemLatBwCount information not provided.\n" + )); + ASSERT (MemLatBwCount != 0); + Status = EFI_INVALID_PARAMETER; + goto error_handler; + } + + Status = GetEArmObjMemoryCacheInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemCacheInfo, + &MemCacheCount + ); + + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemoryCache Info. Status = %r\n", + Status + )); + goto error_handler; + } + + if (MemCacheCount == 0) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: MemCacheCount information not provided.\n" + )); + ASSERT (MemCacheCount != 0); + Status = EFI_INVALID_PARAMETER; + goto error_handler; + } + + TableSize = sizeof (EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER); + + MemProxDomainAttrOffset = TableSize; + TableSize += (sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES) * MemProxDomainAttrCount); + + MemLatBwOffset = TableSize; + + MemLatBwInfoLength = sizeof(UINT32) * MemInitTargetInfo->NumInitiator + + sizeof(UINT32) * MemInitTargetInfo->NumTarget + + sizeof(UINT16) * MemInitTargetInfo->NumInitiator * MemInitTargetInfo->NumTarget + + sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO); + TableSize += MemLatBwInfoLength * MemLatBwCount; + + MemCacheOffset = TableSize; + MemCacheLength = sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO) + sizeof(UINT16) * MemCacheInfo->NumSmbiosHandles; + TableSize += MemCacheLength * MemCacheCount; + + // Allocate the Buffer for HMAT table + *Table = (EFI_ACPI_DESCRIPTION_HEADER *)AllocateZeroPool (TableSize); + + if (*Table == NULL) { + Status = EFI_OUT_OF_RESOURCES; + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to allocate memory for HMAT Table, Size = %d," \ + " Status = %r\n", + TableSize, + Status + )); + goto error_handler; + } + + Hmat = (EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER *)*Table; + + // Build HMAT table. + Status = AddAcpiHeader ( + CfgMgrProtocol, + This, + &Hmat->Header, + AcpiTableInfo, + TableSize + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: HMAT: Failed to add ACPI header. Status = %r\n", + Status + )); + goto error_handler; + } + + AddMemProxDomainAttrInfo ( + (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *)((UINT8 *)Hmat + MemProxDomainAttrOffset), + MemProxDomainAttrInfo, + MemProxDomainAttrCount + ); + + AddMemLatBwInfo ( + (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO *)((UINT8 *)Hmat + MemLatBwOffset), + MemLatBwInfo, + MemInitTargetInfo, + MemLatBwInfoLength + ); + + AddMemCacheInfo ( + (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *)((UINT8 *)Hmat + MemCacheOffset), + MemCacheInfo, + MemCacheLength + ); + + return Status; + +error_handler: + if (*Table != NULL) { + FreePool (*Table); + *Table = NULL; + } + + return Status; +} + +/** This macro defines the HMAT Table Generator revision. +*/ +#define HMAT_GENERATOR_REVISION CREATE_REVISION (1, 0) + +/** The interface for the HMAT Table Generator. +*/ +STATIC +CONST +ACPI_TABLE_GENERATOR HmatGenerator = { + // Generator ID + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdHmat), + // Generator Description + L"ACPI.STD.HMAT.GENERATOR", + // ACPI Table Signature + EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE, + // ACPI Table Revision supported by this Generator + EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION, + // Minimum supported ACPI Table Revision + EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION, + // Creator ID + TABLE_GENERATOR_CREATOR_ID_ARM, + // Creator Revision + HMAT_GENERATOR_REVISION, + // Build table function. Use the extended version instead. + BuildHmatTable, + // Free table function. Use the extended version instead. + FreeHmatTable, + // Extended Build table function. + NULL, + // Extended free function. + NULL +}; + +/** Register the Generator with the ACPI Table Factory. + + @param [in] ImageHandle The handle to the image. + @param [in] SystemTable Pointer to the System Table. + + @retval EFI_SUCCESS The Generator is registered. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_ALREADY_STARTED The Generator for the Table ID + is already registered. +**/ +EFI_STATUS +EFIAPI +AcpiHmatLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status = RegisterAcpiTableGenerator (&HmatGenerator); + DEBUG ((DEBUG_INFO, "HMAT: Register Generator. Status = %r\n", Status)); + ASSERT_EFI_ERROR (Status); + return Status; +} + +/** Deregister the Generator from the ACPI Table Factory. + + @param [in] ImageHandle The handle to the image. + @param [in] SystemTable Pointer to the System Table. + + @retval EFI_SUCCESS The Generator is deregistered. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The Generator is not registered. +**/ +EFI_STATUS +EFIAPI +AcpiHmatLibDestructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status = DeregisterAcpiTableGenerator (&HmatGenerator); + DEBUG ((DEBUG_INFO, "HMAT: Deregister Generator. Status = %r\n", Status)); + ASSERT_EFI_ERROR (Status); + return Status; +} diff --git a/DynamicTablesPkg/Readme.md b/DynamicTablesPkg/Readme.md index f52099c1c00e..810d2830fc2a 100644 --- a/DynamicTablesPkg/Readme.md +++ b/DynamicTablesPkg/Readme.md @@ -48,6 +48,7 @@ The framework currently supports the following table generators for ARM: * DSDT - Differentiated system description table. This is essentially a RAW table generator. * FADT - Fixed ACPI Description Table +* HMAT - Heterogeneous Memory Attribute Table * GTDT - Generic Timer Description Table * IORT - IO Remapping Table * MADT - Multiple APIC Description Table From d767cfb2c33f6ae97341243e7cc4ed61c0dc2804 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 03/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf index 842f9db5890e..8b1e68a78918 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf @@ -21,16 +21,5 @@ [Packages] MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec EmbeddedPkg/EmbeddedPkg.dec DynamicTablesPkg/DynamicTablesPkg.dec - -[LibraryClasses] - BaseLib - -[Pcd] - -[Protocols] - -[Guids] - From 8ed854502fef98a6a8f749f0b0c5420fbbd0440b Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 04/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- MdePkg/Include/IndustryStandard/Acpi64.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MdePkg/Include/IndustryStandard/Acpi64.h b/MdePkg/Include/IndustryStandard/Acpi64.h index 4b0353b44ffe..b58d6847ffe7 100644 --- a/MdePkg/Include/IndustryStandard/Acpi64.h +++ b/MdePkg/Include/IndustryStandard/Acpi64.h @@ -2205,7 +2205,10 @@ typedef struct { UINT32 NumberOfTargetProximityDomains; UINT8 Reserved2[4]; UINT64 EntryBaseUnit; - UINT32 LatBwInfo[]; + // UINT32 InitiatorProximityDomainList[]; + // UINT32 TargetProximityDomainList[]; + // UINT16 LatencyEntry[][]; + UINT8 LatBwInfo[]; } EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO; /// @@ -2232,7 +2235,7 @@ typedef struct { EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES CacheAttributes; UINT8 Reserved2[2]; UINT16 NumberOfSmbiosHandles; - UINT16 SmbiosHandles[]; + UINT8 SmbiosHandles[]; } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO; /// From 16430800fb223beefc22058ba69658328b542347 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 05/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index e98ee0571388..3df40ac7f76e 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -743,9 +743,8 @@ typedef struct CmArmMemoryInitTargetInfo { */ typedef struct CmArmMemoryProxDomainAttrInfo { - UINT16 Type; UINT16 Flags; - UINT32 ProcessorProximityDomain; + UINT32 InitiatorProximityDomain; UINT32 MemoryProximityDomain; } CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO; @@ -755,7 +754,6 @@ typedef struct CmArmMemoryProxDomainAttrInfo { */ typedef struct CmArmMemoryLatBwInfo { - UINT16 Type; UINT8 Flags; UINT8 DataType; UINT8 MinTransferSize; @@ -773,7 +771,6 @@ typedef struct CmArmMemoryLatBwInfo { */ typedef struct CmArmMemoryCacheInfo { - UINT16 Type; UINT32 MemoryProximityDomain; UINT64 MemorySideCacheSize; UINT32 CacheAttributes; From 90a1e22af49fe37deae6d14b914dcefa7d155150 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 06/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- MdePkg/Include/IndustryStandard/Acpi64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MdePkg/Include/IndustryStandard/Acpi64.h b/MdePkg/Include/IndustryStandard/Acpi64.h index b58d6847ffe7..a8fb5168da7e 100644 --- a/MdePkg/Include/IndustryStandard/Acpi64.h +++ b/MdePkg/Include/IndustryStandard/Acpi64.h @@ -2235,7 +2235,7 @@ typedef struct { EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES CacheAttributes; UINT8 Reserved2[2]; UINT16 NumberOfSmbiosHandles; - UINT8 SmbiosHandles[]; + UINT16 SmbiosHandles[]; } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO; /// From f80d3977b436308a878cedf607985b3f744f7a08 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 07/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Include/ArchCommonNameSpaceObjects.h | 4 ++ .../Include/ArmNameSpaceObjects.h | 47 +++++++++++++------ 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 300f5919748a..500b48bb9bb5 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -267,6 +267,10 @@ typedef struct CmArchCommonMemoryAffinityInfo { /// Flags UINT32 Flags; + + /// Optional field: Reference Token for target domain list. + /// Token identifying a CM_ARM_TARGET_DOMAIN_LIST structure. + CM_OBJECT_TOKEN TargetProximityDomainListToken; } CM_ARCH_COMMON_MEMORY_AFFINITY_INFO; /** A structure that describes the ACPI Device Handle (Type 0) in the diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 3df40ac7f76e..1649e7cf07e8 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -194,6 +194,11 @@ typedef struct CmArmGicCInfo { i.e. a token referencing a CM_ARCH_COMMON_PSD_INFO object. */ CM_OBJECT_TOKEN PsdToken; + + /** Optional field: Reference Token for the Initiator Proximity Domain info of this processor. + i.e. a token referencing a CM_ARM_INITIATOR_DOMAIN_LIST object. + */ + CM_OBJECT_TOKEN InitiatorProximityDomainListToken; } CM_ARM_GICC_INFO; /** A structure that describes the @@ -727,16 +732,6 @@ typedef struct CmArmEtInfo { ARM_ET_TYPE EtType; } CM_ARM_ET_INFO; -/** A structure that describes the Memory Initiator and Target number. - - ID: EArmObjMemoryInitTargetInfo -*/ - -typedef struct CmArmMemoryInitTargetInfo { - UINT32 NumInitiator; - UINT32 NumTarget; -} CM_ARM_MEMORY_INIT_TARGET_INFO; - /** A structure that describes the Memory Proximity Domain Attribute. ID: EArmObjMemoryProxDomainAttrInfo @@ -760,11 +755,32 @@ typedef struct CmArmMemoryLatBwInfo { UINT32 InitiatorProximityDomainsNumber; UINT32 TargetProximityDomainsNumber; UINT64 EntryBaseUnit; - UINT32 InitiatorProximityDomainList[8]; - UINT32 TargetProximityDomainList[8]; - UINT16 RelativeDistanceEntry[64]; } CM_ARM_MEMORY_LAT_BW_INFO; +/** A structure that describes the Initiator Proximity Domain List Info. + + ID: EArmObjInitiatorDomainList +*/ +typedef struct CmArmInitiatorProximityDomainList { + UINT32 InitiatorProximityDomainList; +} CM_ARM_INITIATOR_DOMAIN_LIST; + +/** A structure that describes the Target Proximity Domain List Info. + + ID: EArmObjTargetDomainList +*/ +typedef struct CmArmTargetProximityDomainList { + UINT32 TargetProximityDomainList; +} CM_ARM_TARGET_DOMAIN_LIST; + +/** A structure that describes the Relative Distance Entry Info. + + ID: EArmObjRelativeDistanceEntry +*/ +typedef struct CmArmRelativeDistanceEntry + UINT16 RelativeDistanceEntry; +} CM_ARM_RELATIVE_DISTANCE_ENTRY; + /** A structure that describes the Memory Cache Info. ID: EArmObjMemoryCacheInfo @@ -775,8 +791,11 @@ typedef struct CmArmMemoryCacheInfo { UINT64 MemorySideCacheSize; UINT32 CacheAttributes; UINT16 NumSmbiosHandles; - UINT16 SmbiosHandles [8]; } CM_ARM_MEMORY_CACHE_INFO; + +typedef struct CmArmSmbioHandles { + UINT16 SmbiosHandles; +} CM_ARM_SMBIOS_HANDLES; #pragma pack() #endif // ARM_NAMESPACE_OBJECTS_H_ From e52bffeadbfa40106d712ef783009de023a60748 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 08/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- DynamicTablesPkg/DynamicTables.dsc.inc | 5 +- .../Include/ArchCommonNameSpaceObjects.h | 60 +++++++++++++++++ .../Include/ArmNameSpaceObjects.h | 64 ------------------- .../AcpiHmatLibArm/AcpiHmatLibArm.inf | 0 .../AcpiHmatLibArm/HmatGenerator.c | 0 5 files changed, 63 insertions(+), 66 deletions(-) rename DynamicTablesPkg/Library/Acpi/{Arm => Common}/AcpiHmatLibArm/AcpiHmatLibArm.inf (100%) rename DynamicTablesPkg/Library/Acpi/{Arm => Common}/AcpiHmatLibArm/HmatGenerator.c (100%) diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc index 7ad7339997ea..e2a77d288209 100644 --- a/DynamicTablesPkg/DynamicTables.dsc.inc +++ b/DynamicTablesPkg/DynamicTables.dsc.inc @@ -32,6 +32,7 @@ # DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf + DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.inf DynamicTablesPkg/Library/Acpi/Common/AcpiMcfgLib/AcpiMcfgLib.inf DynamicTablesPkg/Library/Acpi/Common/AcpiPcctLib/AcpiPcctLib.inf DynamicTablesPkg/Library/Acpi/Common/AcpiPpttLib/AcpiPpttLib.inf @@ -71,6 +72,7 @@ # Generators # Common NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.inf NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSpmiLib/AcpiSpmiLib.inf # X64 specific @@ -90,7 +92,6 @@ # Generators (Arm specific) # DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf - DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLib/AcpiHmatLib.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf @@ -106,6 +107,7 @@ # Common NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiDbg2Lib/AcpiDbg2Lib.inf NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf + NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.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 @@ -115,7 +117,6 @@ NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiSratLib/AcpiSratLib.inf NULL|DynamicTablesPkg/Library/Acpi/Common/AcpiTpm2Lib/AcpiTpm2Lib.inf # Arm specific - NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLib/AcpiHmatLib.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiIortLibArm/AcpiIortLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 500b48bb9bb5..16367978fda0 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -816,6 +816,66 @@ typedef struct CmArchCommonStaInfo { UINT32 DeviceStatus; } CM_ARCH_COMMON_STA_INFO; +/** A structure that describes the Memory Latency Bandwidth Info. + + ID: EArchCommonObjMemoryLatBwInfo +*/ + +typedef struct CmArchCommonMemoryLatBwInfo { + UINT8 Flags; + UINT8 DataType; + UINT8 MinTransferSize; + UINT32 InitiatorProximityDomainsNumber; + UINT32 TargetProximityDomainsNumber; + UINT64 EntryBaseUnit; +} CM_ARCH_COMMON_MEMORY_LAT_BW_INFO; + +/** A structure that describes the Initiator Proximity Domain List Info. + + ID: EArchCommonObjInitiatorDomainList +*/ +typedef struct CmArchCommonInitiatorProximityDomainList { + UINT32 InitiatorProximityDomainList; +} CM_ARCH_COMMON_INITIATOR_DOMAIN_LIST; + +/** A structure that describes the Target Proximity Domain List Info. + + ID: EArchCommonObjTargetDomainList +*/ +typedef struct CmArchCommonTargetProximityDomainList { + UINT32 TargetProximityDomainList; +} CM_ARCH_COMMON_TARGET_DOMAIN_LIST; + +/** A structure that describes the Relative Distance Entry Info. + + ID: EArchCommonObjRelativeDistanceEntry +*/ +typedef struct CmArchCommonRelativeDistanceEntry + UINT16 RelativeDistanceEntry; +} CM_ARCH_COMMON_RELATIVE_DISTANCE_ENTRY; + +/** A structure that describes Memory Cache Info. + + ID: EArchCommonObjMemoryCacheInfo +*/ + +typedef struct CmArchCommonMemoryCacheInfo { + UINT32 MemoryProximityDomain; + UINT64 MemorySideCacheSize; + UINT32 CacheAttributes; + UINT16 NumSmbiosHandles; +} CM_ARCH_COMMON_MEMORY_CACHE_INFO; + +/** A structure that describes Smbio Handles. + + ID: EArchCommonObjSmbiosHandle +*/ + +typedef struct CmArchCommonSmbioHandles { + UINT16 SmbiosHandles; +} CM_ARCH_COMMON_SMBIOS_HANDLES; + + #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 1649e7cf07e8..eab54a5981d1 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -732,70 +732,6 @@ typedef struct CmArmEtInfo { ARM_ET_TYPE EtType; } CM_ARM_ET_INFO; -/** A structure that describes the Memory Proximity Domain Attribute. - - ID: EArmObjMemoryProxDomainAttrInfo -*/ - -typedef struct CmArmMemoryProxDomainAttrInfo { - UINT16 Flags; - UINT32 InitiatorProximityDomain; - UINT32 MemoryProximityDomain; -} CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO; - -/** A structure that describes the Memory Latency Bandwidth Info. - - ID: EArmObjMemoryLatBwInfo -*/ - -typedef struct CmArmMemoryLatBwInfo { - UINT8 Flags; - UINT8 DataType; - UINT8 MinTransferSize; - UINT32 InitiatorProximityDomainsNumber; - UINT32 TargetProximityDomainsNumber; - UINT64 EntryBaseUnit; -} CM_ARM_MEMORY_LAT_BW_INFO; - -/** A structure that describes the Initiator Proximity Domain List Info. - - ID: EArmObjInitiatorDomainList -*/ -typedef struct CmArmInitiatorProximityDomainList { - UINT32 InitiatorProximityDomainList; -} CM_ARM_INITIATOR_DOMAIN_LIST; - -/** A structure that describes the Target Proximity Domain List Info. - - ID: EArmObjTargetDomainList -*/ -typedef struct CmArmTargetProximityDomainList { - UINT32 TargetProximityDomainList; -} CM_ARM_TARGET_DOMAIN_LIST; - -/** A structure that describes the Relative Distance Entry Info. - - ID: EArmObjRelativeDistanceEntry -*/ -typedef struct CmArmRelativeDistanceEntry - UINT16 RelativeDistanceEntry; -} CM_ARM_RELATIVE_DISTANCE_ENTRY; - -/** A structure that describes the Memory Cache Info. - - ID: EArmObjMemoryCacheInfo -*/ - -typedef struct CmArmMemoryCacheInfo { - UINT32 MemoryProximityDomain; - UINT64 MemorySideCacheSize; - UINT32 CacheAttributes; - UINT16 NumSmbiosHandles; -} CM_ARM_MEMORY_CACHE_INFO; - -typedef struct CmArmSmbioHandles { - UINT16 SmbiosHandles; -} CM_ARM_SMBIOS_HANDLES; #pragma pack() #endif // ARM_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/AcpiHmatLibArm.inf similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/AcpiHmatLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/AcpiHmatLibArm.inf diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/HmatGenerator.c similarity index 100% rename from DynamicTablesPkg/Library/Acpi/Arm/AcpiHmatLibArm/HmatGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/HmatGenerator.c From cf4f60c45da295ccfffdf7950fa0bb2d53254404 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 09/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Include/ArchCommonNameSpaceObjects.h | 27 ++++++++++++++++--- .../Include/ArmNameSpaceObjects.h | 5 ---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 16367978fda0..3ad05f5117f1 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -145,6 +145,21 @@ typedef struct CmArchCommonObjRef { CM_OBJECT_TOKEN ReferenceToken; } CM_ARCH_COMMON_OBJ_REF; +/** 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: EArchCommonWord +*/ +struct CmArchCommonWord { + UINT16 Value; +} CM_ARCH_COMMON_WORD; + /** A structure that describes the PCI Configuration Space information for the Platform. @@ -267,10 +282,6 @@ typedef struct CmArchCommonMemoryAffinityInfo { /// Flags UINT32 Flags; - - /// Optional field: Reference Token for target domain list. - /// Token identifying a CM_ARM_TARGET_DOMAIN_LIST structure. - CM_OBJECT_TOKEN TargetProximityDomainListToken; } CM_ARCH_COMMON_MEMORY_AFFINITY_INFO; /** A structure that describes the ACPI Device Handle (Type 0) in the @@ -828,6 +839,12 @@ typedef struct CmArchCommonMemoryLatBwInfo { UINT32 InitiatorProximityDomainsNumber; UINT32 TargetProximityDomainsNumber; UINT64 EntryBaseUnit; + // Token referencing a CM_ARCH_COMMON_OBJ_REF + CM_OBJECT_TOKEN InitiatorProximityDomainList; + // Token referencing a CM_ARCH_COMMON_OBJ_REF + CM_OBJECT_TOKEN TargetProximityDomainList; + // Token referencing a CM_ARCH_COMMON_WORD + CM_OBJECT_TOKEN RelativeDistanceEntry; } CM_ARCH_COMMON_MEMORY_LAT_BW_INFO; /** A structure that describes the Initiator Proximity Domain List Info. @@ -864,6 +881,8 @@ typedef struct CmArchCommonMemoryCacheInfo { UINT64 MemorySideCacheSize; UINT32 CacheAttributes; UINT16 NumSmbiosHandles; + // Token referencing a CM_ARCH_COMMON_OBJ_REF + CM_OBJECT_TOKEN SmbiosHandles; } CM_ARCH_COMMON_MEMORY_CACHE_INFO; /** A structure that describes Smbio Handles. diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index eab54a5981d1..856f7dfc8d2b 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -194,11 +194,6 @@ typedef struct CmArmGicCInfo { i.e. a token referencing a CM_ARCH_COMMON_PSD_INFO object. */ CM_OBJECT_TOKEN PsdToken; - - /** Optional field: Reference Token for the Initiator Proximity Domain info of this processor. - i.e. a token referencing a CM_ARM_INITIATOR_DOMAIN_LIST object. - */ - CM_OBJECT_TOKEN InitiatorProximityDomainListToken; } CM_ARM_GICC_INFO; /** A structure that describes the From 8f15a0b176b9f827220d6e0be9f2792e48234d07 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 10/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Include/ArchCommonNameSpaceObjects.h | 20 +++++++++++++++++++ .../Include/ArmNameSpaceObjects.h | 4 ---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 3ad05f5117f1..fed7c9de0942 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -59,6 +59,13 @@ typedef enum ArchCommonObjectID { EArchCommonObjPssInfo, ///< 32 - P-State status (PSS) Info EArchCommonObjPpcInfo, ///< 33 - P-State control (PPC) Info EArchCommonObjStaInfo, ///< 34 - _STA (Device Status) Info + EArchCommonObjMemoryProxDomainAttrInfo, ///< 35 - Memory Proximity Attribute Info + EArchCommonObjMemoryLatBwInfo, ///< 36 - Memory Latency and Bandwidth Info + EArchCommonObjInitiatorDomainList, ///< 37 - Memory Initiator Domain List + EArchCommonObjTargetDomainList, ///< 38 - Memory Target Domain List + EArchCommonObjRelativeDistanceEntry, ///< 39 - Memory Relative Distance Entry + EArchCommonObjMemoryCacheInfo, ///< 40 - Memory Cache Info + EArchCommonObjSmbiosHandle, ///< 41 - Smbios Handles EArchCommonObjMax } EARCH_COMMON_OBJECT_ID; @@ -827,6 +834,19 @@ typedef struct CmArchCommonStaInfo { UINT32 DeviceStatus; } CM_ARCH_COMMON_STA_INFO; +/** A structure that describes the Memory Proximity Domain Attribute. + + ID: EArchCommonObjMemoryProxDomainAttrInfo +*/ + +typedef struct CmArchCommonMemoryProxDomainAttrInfo { + UINT16 Type; + UINT16 Flags; + UINT32 ProcessorProximityDomain; + UINT32 MemoryProximityDomain; +} CM_ARCH_COMMON_MEMORY_PROX_DOMAIN_ATTR_INFO; + + /** A structure that describes the Memory Latency Bandwidth Info. ID: EArchCommonObjMemoryLatBwInfo diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h index 856f7dfc8d2b..958c3dc93cd3 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -52,10 +52,6 @@ typedef enum ArmObjectID { EArmObjRmr, ///< 21 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 22 - Memory Range Descriptor EArmObjEtInfo, ///< 23 - Embedded Trace Extension/Module Info - EArmObjMemoryInitTargetInfo, ///< 24 - Memory Initiator and Target Info - EArmObjMemoryProxDomainAttrInfo, ///< 25 - Memory Proximity Attribute Info - EArmObjMemoryLatBwInfo, ///< 26 - Memory Latency and Bandwidth Info - EArmObjMemoryCacheInfo, ///< 27 - Memory Cache Info EArmObjMax } EARM_OBJECT_ID; From b74507a1e75247211c6c9cef588e57f1fd93c8e3 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 11/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Include/ArchCommonNameSpaceObjects.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index fed7c9de0942..44180b0c41ef 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -859,12 +859,12 @@ typedef struct CmArchCommonMemoryLatBwInfo { UINT32 InitiatorProximityDomainsNumber; UINT32 TargetProximityDomainsNumber; UINT64 EntryBaseUnit; - // Token referencing a CM_ARCH_COMMON_OBJ_REF - CM_OBJECT_TOKEN InitiatorProximityDomainList; - // Token referencing a CM_ARCH_COMMON_OBJ_REF - CM_OBJECT_TOKEN TargetProximityDomainList; - // Token referencing a CM_ARCH_COMMON_WORD - CM_OBJECT_TOKEN RelativeDistanceEntry; + // Token referencing CM_ARCH_COMMON_INITIATOR_DOMAIN_LIST + CM_OBJECT_TOKEN InitiatorProximityDomainListToken; + // Token referencing CM_ARCH_COMMON_TARGET_DOMAIN_LIST + CM_OBJECT_TOKEN TargetProximityDomainListToken; + // Token referencing CM_ARCH_COMMON_RELATIVE_DISTANCE_ENTRY + CM_ARCH_COMMON_WORD RelativeDistanceEntryToken; } CM_ARCH_COMMON_MEMORY_LAT_BW_INFO; /** A structure that describes the Initiator Proximity Domain List Info. @@ -901,8 +901,8 @@ typedef struct CmArchCommonMemoryCacheInfo { UINT64 MemorySideCacheSize; UINT32 CacheAttributes; UINT16 NumSmbiosHandles; - // Token referencing a CM_ARCH_COMMON_OBJ_REF - CM_OBJECT_TOKEN SmbiosHandles; + // Token referencing CM_ARCH_COMMON_SMBIOS_HANDLES + CM_ARCH_COMMON_WORD SmbiosHandlesToken; } CM_ARCH_COMMON_MEMORY_CACHE_INFO; /** A structure that describes Smbio Handles. From 78283ca71a302e0eccdb5b88325788485c90ebef Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 12/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h index 44180b0c41ef..304f375a03b7 100755 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -163,7 +163,7 @@ typedef struct CmArchCommonObjRef { ID: EArchCommonWord */ -struct CmArchCommonWord { +typedef struct CmArchCommonWord { UINT16 Value; } CM_ARCH_COMMON_WORD; From 6de61f81da73399253a4bfc68d7068d1bd4fee2d Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 13/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../AcpiHmatLib.inf} | 2 +- .../HmatGenerator.c | 332 +++++++++--------- 2 files changed, 175 insertions(+), 159 deletions(-) rename DynamicTablesPkg/Library/Acpi/Common/{AcpiHmatLibArm/AcpiHmatLibArm.inf => AcpiHmatLib/AcpiHmatLib.inf} (90%) rename DynamicTablesPkg/Library/Acpi/Common/{AcpiHmatLibArm => AcpiHmatLib}/HmatGenerator.c (55%) diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/AcpiHmatLibArm.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.inf similarity index 90% rename from DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/AcpiHmatLibArm.inf rename to DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.inf index 8b1e68a78918..da6bf9aeda2b 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/AcpiHmatLibArm.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/AcpiHmatLib.inf @@ -8,7 +8,7 @@ [Defines] INF_VERSION = 0x00010019 - BASE_NAME = AcpiHmatLibArm + BASE_NAME = AcpiHmatLib FILE_GUID = 1724d37a-fb05-4fe6-bb13-c04a46efe0ac VERSION_STRING = 1.0 MODULE_TYPE = DXE_DRIVER diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/HmatGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c similarity index 55% rename from DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/HmatGenerator.c rename to DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c index 23e94ab005b7..d5969ab6dc4e 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLibArm/HmatGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c @@ -13,7 +13,6 @@ #include #include - // Module specific include files. #include #include @@ -37,20 +36,20 @@ STATIC VOID AddMemProxDomainAttrInfo ( - IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *MemProxDomainAttrInfo, - IN CONST CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *CmMemProxDomainAttrInfo, - IN UINT32 MemProxDomainAttrCount + IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *MemProxDomainAttrInfo, + IN CONST CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *CmMemProxDomainAttrInfo, + IN UINT32 MemProxDomainAttrCount ) { ASSERT (MemProxDomainAttrInfo != NULL); ASSERT (CmMemProxDomainAttrInfo != NULL); while (MemProxDomainAttrCount-- != 0) { - MemProxDomainAttrInfo->Type = CmMemProxDomainAttrInfo->Type; - MemProxDomainAttrInfo->Length = sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES); - CopyMem(&MemProxDomainAttrInfo->Flags, &CmMemProxDomainAttrInfo->Flags, sizeof(UINT16)); + MemProxDomainAttrInfo->Type = CmMemProxDomainAttrInfo->Type; + MemProxDomainAttrInfo->Length = sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES); + CopyMem (&MemProxDomainAttrInfo->Flags, &CmMemProxDomainAttrInfo->Flags, sizeof (UINT16)); MemProxDomainAttrInfo->InitiatorProximityDomain = CmMemProxDomainAttrInfo->ProcessorProximityDomain; - MemProxDomainAttrInfo->MemoryProximityDomain = CmMemProxDomainAttrInfo->MemoryProximityDomain; + MemProxDomainAttrInfo->MemoryProximityDomain = CmMemProxDomainAttrInfo->MemoryProximityDomain; MemProxDomainAttrInfo++; CmMemProxDomainAttrInfo++; } @@ -77,24 +76,24 @@ AddMemLatBwInfo ( ASSERT (CmMemLatBwInfo != NULL); ASSERT (CmMemInitTargetInfo != NULL); - MemLatBwInfo->Type = CmMemLatBwInfo->Type; + MemLatBwInfo->Type = CmMemLatBwInfo->Type; MemLatBwInfo->Length = MemLatBwInfoLength; - CopyMem(&MemLatBwInfo->Flags, &CmMemLatBwInfo->Flags, sizeof(UINT8)); - MemLatBwInfo->DataType = CmMemLatBwInfo->DataType; - MemLatBwInfo->MinTransferSize = CmMemLatBwInfo->MinTransferSize; + CopyMem (&MemLatBwInfo->Flags, &CmMemLatBwInfo->Flags, sizeof (UINT8)); + MemLatBwInfo->DataType = CmMemLatBwInfo->DataType; + MemLatBwInfo->MinTransferSize = CmMemLatBwInfo->MinTransferSize; MemLatBwInfo->NumberOfInitiatorProximityDomains = CmMemLatBwInfo->InitiatorProximityDomainsNumber; - MemLatBwInfo->NumberOfTargetProximityDomains = CmMemLatBwInfo->TargetProximityDomainsNumber; - MemLatBwInfo->EntryBaseUnit = CmMemLatBwInfo->EntryBaseUnit; + MemLatBwInfo->NumberOfTargetProximityDomains = CmMemLatBwInfo->TargetProximityDomainsNumber; + MemLatBwInfo->EntryBaseUnit = CmMemLatBwInfo->EntryBaseUnit; - void *MemLatBwInfoLocal = (void*) MemLatBwInfo; + void *MemLatBwInfoLocal = (void *)MemLatBwInfo; - MemLatBwInfoLocal += sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO); + MemLatBwInfoLocal += sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO); - CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->InitiatorProximityDomainList, sizeof(UINT32) * CmMemInitTargetInfo->NumInitiator); - MemLatBwInfoLocal += sizeof(UINT32) * CmMemInitTargetInfo->NumInitiator; - CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->TargetProximityDomainList, sizeof(UINT32) * CmMemInitTargetInfo->NumTarget); - MemLatBwInfoLocal += sizeof(UINT32) * CmMemInitTargetInfo->NumTarget; - CopyMem(MemLatBwInfoLocal, CmMemLatBwInfo->RelativeDistanceEntry, sizeof(UINT16) * CmMemInitTargetInfo->NumTarget * CmMemInitTargetInfo->NumInitiator); + CopyMem (MemLatBwInfoLocal, CmMemLatBwInfo->InitiatorProximityDomainList, sizeof (UINT32) * CmMemInitTargetInfo->NumInitiator); + MemLatBwInfoLocal += sizeof (UINT32) * CmMemInitTargetInfo->NumInitiator; + CopyMem (MemLatBwInfoLocal, CmMemLatBwInfo->TargetProximityDomainList, sizeof (UINT32) * CmMemInitTargetInfo->NumTarget); + MemLatBwInfoLocal += sizeof (UINT32) * CmMemInitTargetInfo->NumTarget; + CopyMem (MemLatBwInfoLocal, CmMemLatBwInfo->RelativeDistanceEntry, sizeof (UINT16) * CmMemInitTargetInfo->NumTarget * CmMemInitTargetInfo->NumInitiator); } /** Add the MemCache Information @@ -107,63 +106,61 @@ AddMemLatBwInfo ( STATIC VOID AddMemCacheInfo ( - IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *MemCacheInfo, - IN CONST CM_ARM_MEMORY_CACHE_INFO *CmMemCacheInfo, - IN CONST UINT32 MemCacheLength + IN EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *MemCacheInfo, + IN CONST CM_ARM_MEMORY_CACHE_INFO *CmMemCacheInfo, + IN CONST UINT32 MemCacheLength ) { ASSERT (MemCacheInfo != NULL); ASSERT (CmMemCacheInfo != NULL); - MemCacheInfo->Type = CmMemCacheInfo->Type; - MemCacheInfo->Length = MemCacheLength; + MemCacheInfo->Type = CmMemCacheInfo->Type; + MemCacheInfo->Length = MemCacheLength; MemCacheInfo->MemoryProximityDomain = CmMemCacheInfo->MemoryProximityDomain; - MemCacheInfo->MemorySideCacheSize = CmMemCacheInfo->MemorySideCacheSize; - CopyMem(&MemCacheInfo->CacheAttributes, &CmMemCacheInfo->CacheAttributes, sizeof(UINT32)); + MemCacheInfo->MemorySideCacheSize = CmMemCacheInfo->MemorySideCacheSize; + CopyMem (&MemCacheInfo->CacheAttributes, &CmMemCacheInfo->CacheAttributes, sizeof (UINT32)); MemCacheInfo->NumberOfSmbiosHandles = CmMemCacheInfo->NumSmbiosHandles; - void *MemCacheInfoLocal = (void*)MemCacheInfo; - MemCacheInfoLocal += sizeof(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO); - CopyMem(MemCacheInfoLocal, CmMemCacheInfo->SmbiosHandles, sizeof(UINT16) * CmMemCacheInfo->NumSmbiosHandles); + void *MemCacheInfoLocal = (void *)MemCacheInfo; + MemCacheInfoLocal += sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO); + CopyMem (MemCacheInfoLocal, CmMemCacheInfo->SmbiosHandles, sizeof (UINT16) * CmMemCacheInfo->NumSmbiosHandles); } /** This macro expands to a function that retrieves the Memory Proximity Domain Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryInitTargetInfo, - CM_ARM_MEMORY_INIT_TARGET_INFO - ); - + EObjNameSpaceArm, + EArmObjMemoryInitTargetInfo, + CM_ARM_MEMORY_INIT_TARGET_INFO + ); /** This macro expands to a function that retrieves the Memory Proximity Domain Attribute Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryProxDomainAttrInfo, - CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO - ); + EObjNameSpaceArm, + EArmObjMemoryProxDomainAttrInfo, + CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO + ); /** This macro expands to a function that retrieves the Memory Latency and Bandwidth Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryLatBwInfo, - CM_ARM_MEMORY_LAT_BW_INFO - ); + EObjNameSpaceArm, + EArmObjMemoryLatBwInfo, + CM_ARM_MEMORY_LAT_BW_INFO + ); /** This macro expands to a function that retrieves the Memory Cache Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryCacheInfo, - CM_ARM_MEMORY_CACHE_INFO - ); - + EObjNameSpaceArm, + EArmObjMemoryCacheInfo, + CM_ARM_MEMORY_CACHE_INFO + ); /** Free any resources allocated for constructing the table. @@ -202,6 +199,7 @@ FreeHmatTable ( FreePool (*Table); *Table = NULL; } + return EFI_SUCCESS; } @@ -233,27 +231,27 @@ STATIC EFI_STATUS EFIAPI BuildHmatTable ( - IN CONST ACPI_TABLE_GENERATOR *This, - IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CONST ACPI_TABLE_GENERATOR *This, + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table ) { - EFI_STATUS Status; - UINT32 TableSize; - UINT32 MemInitTargetCount; - UINT32 MemProxDomainAttrCount; - UINT32 MemLatBwCount; - UINT32 MemCacheCount; - UINT32 MemLatBwInfoLength; - UINT32 MemCacheLength; - CM_ARM_MEMORY_INIT_TARGET_INFO *MemInitTargetInfo; - CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *MemProxDomainAttrInfo; - CM_ARM_MEMORY_LAT_BW_INFO *MemLatBwInfo; - CM_ARM_MEMORY_CACHE_INFO *MemCacheInfo; - UINT32 MemProxDomainAttrOffset; - UINT32 MemLatBwOffset; - UINT32 MemCacheOffset; + EFI_STATUS Status; + UINT32 TableSize; + UINT32 MemInitTargetCount; + UINT32 MemProxDomainAttrCount; + UINT32 MemLatBwCount; + UINT32 MemCacheCount; + UINT32 MemLatBwInfoLength; + UINT32 MemCacheLength; + CM_ARM_MEMORY_INIT_TARGET_INFO *MemInitTargetInfo; + CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO *MemProxDomainAttrInfo; + CM_ARM_MEMORY_LAT_BW_INFO *MemLatBwInfo; + CM_ARM_MEMORY_CACHE_INFO *MemCacheInfo; + UINT32 MemProxDomainAttrOffset; + UINT32 MemLatBwOffset; + UINT32 MemCacheOffset; ASSERT (This != NULL); ASSERT (AcpiTableInfo != NULL); @@ -263,97 +261,111 @@ BuildHmatTable ( ASSERT (AcpiTableInfo->AcpiTableSignature == This->AcpiTableSignature); *Table = NULL; - EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER *Hmat; + EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER *Hmat; Status = GetEArmObjMemoryInitTargetInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &MemInitTargetInfo, - &MemInitTargetCount - ); + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemInitTargetInfo, + &MemInitTargetCount + ); if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to get MemInitTarget Info. Status = %r\n", - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemInitTarget Info. Status = %r\n", + Status + ) + ); goto error_handler; } Status = GetEArmObjMemoryProxDomainAttrInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &MemProxDomainAttrInfo, - &MemProxDomainAttrCount - ); - + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemProxDomainAttrInfo, + &MemProxDomainAttrCount + ); + if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to get MemProxDomain Info. Status = %r\n", - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemProxDomain Info. Status = %r\n", + Status + ) + ); goto error_handler; } if (MemProxDomainAttrCount == 0) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: MemProxDomain information not provided.\n" - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: MemProxDomain information not provided.\n" + ) + ); ASSERT (MemProxDomainAttrCount != 0); Status = EFI_INVALID_PARAMETER; goto error_handler; } Status = GetEArmObjMemoryLatBwInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &MemLatBwInfo, - &MemLatBwCount - ); + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemLatBwInfo, + &MemLatBwCount + ); if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to get MemLatBwInfo. Status = %r\n", - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemLatBwInfo. Status = %r\n", + Status + ) + ); goto error_handler; } if (MemLatBwCount == 0) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: MemLatBwCount information not provided.\n" - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: MemLatBwCount information not provided.\n" + ) + ); ASSERT (MemLatBwCount != 0); Status = EFI_INVALID_PARAMETER; goto error_handler; } Status = GetEArmObjMemoryCacheInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &MemCacheInfo, - &MemCacheCount - ); + CfgMgrProtocol, + CM_NULL_TOKEN, + &MemCacheInfo, + &MemCacheCount + ); if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to get MemoryCache Info. Status = %r\n", - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to get MemoryCache Info. Status = %r\n", + Status + ) + ); goto error_handler; } if (MemCacheCount == 0) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: MemCacheCount information not provided.\n" - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: MemCacheCount information not provided.\n" + ) + ); ASSERT (MemCacheCount != 0); Status = EFI_INVALID_PARAMETER; goto error_handler; @@ -362,32 +374,34 @@ BuildHmatTable ( TableSize = sizeof (EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER); MemProxDomainAttrOffset = TableSize; - TableSize += (sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES) * MemProxDomainAttrCount); + TableSize += (sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES) * MemProxDomainAttrCount); MemLatBwOffset = TableSize; - MemLatBwInfoLength = sizeof(UINT32) * MemInitTargetInfo->NumInitiator + - sizeof(UINT32) * MemInitTargetInfo->NumTarget + - sizeof(UINT16) * MemInitTargetInfo->NumInitiator * MemInitTargetInfo->NumTarget + + MemLatBwInfoLength = sizeof (UINT32) * MemInitTargetInfo->NumInitiator + + sizeof (UINT32) * MemInitTargetInfo->NumTarget + + sizeof (UINT16) * MemInitTargetInfo->NumInitiator * MemInitTargetInfo->NumTarget + sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO); TableSize += MemLatBwInfoLength * MemLatBwCount; MemCacheOffset = TableSize; - MemCacheLength = sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO) + sizeof(UINT16) * MemCacheInfo->NumSmbiosHandles; - TableSize += MemCacheLength * MemCacheCount; + MemCacheLength = sizeof (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO) + sizeof (UINT16) * MemCacheInfo->NumSmbiosHandles; + TableSize += MemCacheLength * MemCacheCount; // Allocate the Buffer for HMAT table *Table = (EFI_ACPI_DESCRIPTION_HEADER *)AllocateZeroPool (TableSize); if (*Table == NULL) { Status = EFI_OUT_OF_RESOURCES; - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to allocate memory for HMAT Table, Size = %d," \ - " Status = %r\n", - TableSize, - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to allocate memory for HMAT Table, Size = %d," \ + " Status = %r\n", + TableSize, + Status + ) + ); goto error_handler; } @@ -395,39 +409,41 @@ BuildHmatTable ( // Build HMAT table. Status = AddAcpiHeader ( - CfgMgrProtocol, - This, - &Hmat->Header, - AcpiTableInfo, - TableSize - ); + CfgMgrProtocol, + This, + &Hmat->Header, + AcpiTableInfo, + TableSize + ); if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: HMAT: Failed to add ACPI header. Status = %r\n", - Status - )); + DEBUG ( + ( + DEBUG_ERROR, + "ERROR: HMAT: Failed to add ACPI header. Status = %r\n", + Status + ) + ); goto error_handler; } AddMemProxDomainAttrInfo ( - (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *)((UINT8 *)Hmat + MemProxDomainAttrOffset), - MemProxDomainAttrInfo, - MemProxDomainAttrCount - ); + (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES *)((UINT8 *)Hmat + MemProxDomainAttrOffset), + MemProxDomainAttrInfo, + MemProxDomainAttrCount + ); AddMemLatBwInfo ( - (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO *)((UINT8 *)Hmat + MemLatBwOffset), - MemLatBwInfo, - MemInitTargetInfo, - MemLatBwInfoLength - ); + (EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO *)((UINT8 *)Hmat + MemLatBwOffset), + MemLatBwInfo, + MemInitTargetInfo, + MemLatBwInfoLength + ); AddMemCacheInfo ( - (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *)((UINT8 *)Hmat + MemCacheOffset), - MemCacheInfo, - MemCacheLength - ); + (EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO *)((UINT8 *)Hmat + MemCacheOffset), + MemCacheInfo, + MemCacheLength + ); return Status; From f7c455245203b6e3736fab0274e49c33574191e1 Mon Sep 17 00:00:00 2001 From: Sophia Wang Date: Wed, 2 Apr 2025 15:08:50 -0700 Subject: [PATCH 14/14] DynamicTablesPkg: Add ACPI HMAT implmentation. Add HMAT ACPI table generator. Signed-off-by: Sophia Wang --- .../Include/ArchCommonNameSpaceObjects.h | 52 +++++++------------ .../Acpi/Common/AcpiHmatLib/HmatGenerator.c | 24 ++++----- 2 files changed, 30 insertions(+), 46 deletions(-) mode change 100755 => 100644 DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h diff --git a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h old mode 100755 new mode 100644 index 304f375a03b7..a5365165e000 --- a/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArchCommonNameSpaceObjects.h @@ -152,21 +152,6 @@ typedef struct CmArchCommonObjRef { CM_OBJECT_TOKEN ReferenceToken; } CM_ARCH_COMMON_OBJ_REF; -/** 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: EArchCommonWord -*/ -typedef struct CmArchCommonWord { - UINT16 Value; -} CM_ARCH_COMMON_WORD; - /** A structure that describes the PCI Configuration Space information for the Platform. @@ -840,31 +825,30 @@ typedef struct CmArchCommonStaInfo { */ typedef struct CmArchCommonMemoryProxDomainAttrInfo { - UINT16 Type; - UINT16 Flags; - UINT32 ProcessorProximityDomain; - UINT32 MemoryProximityDomain; + UINT16 Type; + UINT16 Flags; + UINT32 ProcessorProximityDomain; + UINT32 MemoryProximityDomain; } CM_ARCH_COMMON_MEMORY_PROX_DOMAIN_ATTR_INFO; - /** A structure that describes the Memory Latency Bandwidth Info. ID: EArchCommonObjMemoryLatBwInfo */ typedef struct CmArchCommonMemoryLatBwInfo { - UINT8 Flags; - UINT8 DataType; - UINT8 MinTransferSize; - UINT32 InitiatorProximityDomainsNumber; - UINT32 TargetProximityDomainsNumber; - UINT64 EntryBaseUnit; + UINT8 Flags; + UINT8 DataType; + UINT8 MinTransferSize; + UINT32 InitiatorProximityDomainsNumber; + UINT32 TargetProximityDomainsNumber; + UINT64 EntryBaseUnit; // Token referencing CM_ARCH_COMMON_INITIATOR_DOMAIN_LIST - CM_OBJECT_TOKEN InitiatorProximityDomainListToken; + CM_ARCH_COMMON_OBJ_REF InitiatorProximityDomainListToken; // Token referencing CM_ARCH_COMMON_TARGET_DOMAIN_LIST - CM_OBJECT_TOKEN TargetProximityDomainListToken; + CM_ARCH_COMMON_OBJ_REF TargetProximityDomainListToken; // Token referencing CM_ARCH_COMMON_RELATIVE_DISTANCE_ENTRY - CM_ARCH_COMMON_WORD RelativeDistanceEntryToken; + CM_ARCH_COMMON_OBJ_REF RelativeDistanceEntryToken; } CM_ARCH_COMMON_MEMORY_LAT_BW_INFO; /** A structure that describes the Initiator Proximity Domain List Info. @@ -872,7 +856,7 @@ typedef struct CmArchCommonMemoryLatBwInfo { ID: EArchCommonObjInitiatorDomainList */ typedef struct CmArchCommonInitiatorProximityDomainList { - UINT32 InitiatorProximityDomainList; + UINT32 InitiatorProximityDomainList; } CM_ARCH_COMMON_INITIATOR_DOMAIN_LIST; /** A structure that describes the Target Proximity Domain List Info. @@ -880,7 +864,7 @@ typedef struct CmArchCommonInitiatorProximityDomainList { ID: EArchCommonObjTargetDomainList */ typedef struct CmArchCommonTargetProximityDomainList { - UINT32 TargetProximityDomainList; + UINT32 TargetProximityDomainList; } CM_ARCH_COMMON_TARGET_DOMAIN_LIST; /** A structure that describes the Relative Distance Entry Info. @@ -889,7 +873,8 @@ typedef struct CmArchCommonTargetProximityDomainList { */ typedef struct CmArchCommonRelativeDistanceEntry UINT16 RelativeDistanceEntry; -} CM_ARCH_COMMON_RELATIVE_DISTANCE_ENTRY; +} +CM_ARCH_COMMON_RELATIVE_DISTANCE_ENTRY; /** A structure that describes Memory Cache Info. @@ -902,7 +887,7 @@ typedef struct CmArchCommonMemoryCacheInfo { UINT32 CacheAttributes; UINT16 NumSmbiosHandles; // Token referencing CM_ARCH_COMMON_SMBIOS_HANDLES - CM_ARCH_COMMON_WORD SmbiosHandlesToken; + CM_ARCH_COMMON_OBJ_REF SmbiosHandlesToken; } CM_ARCH_COMMON_MEMORY_CACHE_INFO; /** A structure that describes Smbio Handles. @@ -914,7 +899,6 @@ typedef struct CmArchCommonSmbioHandles { UINT16 SmbiosHandles; } CM_ARCH_COMMON_SMBIOS_HANDLES; - #pragma pack() #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c index d5969ab6dc4e..15b778581161 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiHmatLib/HmatGenerator.c @@ -130,8 +130,8 @@ AddMemCacheInfo ( Proximity Domain Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryInitTargetInfo, + EObjNameSpaceArchCommon, + EArchCommonObjMemoryInitTargetInfo, CM_ARM_MEMORY_INIT_TARGET_INFO ); @@ -139,8 +139,8 @@ GET_OBJECT_LIST ( Proximity Domain Attribute Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryProxDomainAttrInfo, + EObjNameSpaceArchCommon, + EArchCommonObjMemoryProxDomainAttrInfo, CM_ARM_MEMORY_PROX_DOMAIN_ATTR_INFO ); @@ -148,8 +148,8 @@ GET_OBJECT_LIST ( Latency and Bandwidth Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryLatBwInfo, + EObjNameSpaceArchCommon, + EArchCommonObjMemoryLatBwInfo, CM_ARM_MEMORY_LAT_BW_INFO ); @@ -157,8 +157,8 @@ GET_OBJECT_LIST ( Cache Information from the Configuration Manager. */ GET_OBJECT_LIST ( - EObjNameSpaceArm, - EArmObjMemoryCacheInfo, + EObjNameSpaceArchCommon, + EArchCommonObjMemoryCacheInfo, CM_ARM_MEMORY_CACHE_INFO ); @@ -263,7 +263,7 @@ BuildHmatTable ( *Table = NULL; EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER *Hmat; - Status = GetEArmObjMemoryInitTargetInfo ( + Status = GetEArchCommonObjMemoryInitTargetInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &MemInitTargetInfo, @@ -281,7 +281,7 @@ BuildHmatTable ( goto error_handler; } - Status = GetEArmObjMemoryProxDomainAttrInfo ( + Status = GetEArchCommonObjMemoryProxDomainAttrInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &MemProxDomainAttrInfo, @@ -311,7 +311,7 @@ BuildHmatTable ( goto error_handler; } - Status = GetEArmObjMemoryLatBwInfo ( + Status = GetEArchCommonObjMemoryLatBwInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &MemLatBwInfo, @@ -341,7 +341,7 @@ BuildHmatTable ( goto error_handler; } - Status = GetEArmObjMemoryCacheInfo ( + Status = GetEArchCommonObjMemoryCacheInfo ( CfgMgrProtocol, CM_NULL_TOKEN, &MemCacheInfo,