N1SdpNtFwConfigPei PEIM extracts platform information from NT_FW_CONFIG and provides it to other modules as a PPI and a HOB. PlatformLibMem then consumes these values in the form of a PPI during PEI phase and ConfigurationManagerDxe as a HOB during DXE phase. The previous approach of fetching platform information from a fixed address is also removed in this patch.
Signed-off-by: sahil <sa...@arm.com> --- Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf | 6 +++- Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf | 1 + Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h | 5 ++- Silicon/ARM/NeoverseN1Soc/Include/NeoverseN1Soc.h | 5 --- Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c | 33 +++++++++--------- Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c | 35 +++++++++++++++----- 6 files changed, 55 insertions(+), 30 deletions(-) diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf index 4f8e7f13021a..e4aaed3e9dd5 100644 --- a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf @@ -1,7 +1,7 @@ ## @file # Configuration Manager Dxe # -# Copyright (c) 2021, ARM Limited. All rights reserved.<BR> +# Copyright (c) 2021 - 2024, ARM Limited. All rights reserved.<BR> # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -42,6 +42,7 @@ [LibraryClasses] ArmPlatformLib + HobLib PrintLib UefiBootServicesTableLib UefiDriverEntryPoint @@ -170,5 +171,8 @@ gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieMmio64Translation gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieSegmentNumber +[Guids] + gArmNeoverseN1SocPlatformInfoDescriptorGuid + [Depex] TRUE diff --git a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf index ead7f11ec964..e7af4c711817 100644 --- a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf +++ b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf @@ -64,3 +64,4 @@ [Ppis] gArmMpCoreInfoPpiGuid gArmNeoverseN1SocParameterPpiGuid + gArmNeoverseN1SocPlatformInfoDescriptorPpiGuid diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h index 303c38dcaee9..ea9cb20ba752 100644 --- a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2021, ARM Limited. All rights reserved.<BR> + Copyright (c) 2021-2024, ARM Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -302,6 +302,9 @@ typedef struct PlatformRepositoryInfo { /// Memory Affinity Info CM_ARM_MEMORY_AFFINITY_INFO MemAffInfo[DDR_REGION_COUNT]; + /// N1Sdp Platform Info + NEOVERSEN1SOC_PLAT_INFO *PlatInfo; + } EDKII_PLATFORM_REPOSITORY_INFO; #endif // CONFIGURATION_MANAGER_H_ diff --git a/Silicon/ARM/NeoverseN1Soc/Include/NeoverseN1Soc.h b/Silicon/ARM/NeoverseN1Soc/Include/NeoverseN1Soc.h index 2bddf5007431..5483e7bc5f68 100644 --- a/Silicon/ARM/NeoverseN1Soc/Include/NeoverseN1Soc.h +++ b/Silicon/ARM/NeoverseN1Soc/Include/NeoverseN1Soc.h @@ -41,11 +41,6 @@ #define NEOVERSEN1SOC_EXP_PERIPH_BASE0 0x1C000000 #define NEOVERSEN1SOC_EXP_PERIPH_BASE0_SZ 0x1300000 -// Base address to a structure of type NEOVERSEN1SOC_PLAT_INFO which is -// pre-populated by a earlier boot stage -#define NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE (NEOVERSEN1SOC_NON_SECURE_SRAM_BASE + \ - 0x00008000) - /* * Platform information structure stored in Non-secure SRAM. Platform * information are passed from the trusted firmware with the below structure diff --git a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c index fa6408a7dd1e..966a83294c00 100644 --- a/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c +++ b/Platform/ARM/N1Sdp/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c @@ -1,7 +1,7 @@ /** @file Configuration Manager Dxe - Copyright (c) 2021, ARM Limited. All rights reserved.<BR> + Copyright (c) 2021 - 2024, ARM Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -16,6 +16,7 @@ #include <IndustryStandard/SerialPortConsoleRedirectionTable.h> #include <Library/ArmLib.h> #include <Library/DebugLib.h> +#include <Library/HobLib.h> #include <Library/IoLib.h> #include <Library/PcdLib.h> #include <Library/UefiBootServicesTableLib.h> @@ -1242,19 +1243,27 @@ InitializePlatformRepository ( IN EDKII_PLATFORM_REPOSITORY_INFO * CONST PlatRepoInfo ) { - NEOVERSEN1SOC_PLAT_INFO *PlatInfo; UINT64 Dram2Size; UINT64 RemoteDdrSize; + VOID *PlatInfoHob; + + PlatInfoHob = GetFirstGuidHob (&gArmNeoverseN1SocPlatformInfoDescriptorGuid); + + if (PlatInfoHob == NULL) { + DEBUG ((DEBUG_ERROR, "Platform HOB is NULL\n")); + return EFI_NOT_FOUND; + } + + PlatRepoInfo->PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)GET_GUID_HOB_DATA (PlatInfoHob); RemoteDdrSize = 0; - PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE; - Dram2Size = ((PlatInfo->LocalDdrSize - 2) * SIZE_1GB); + Dram2Size = ((PlatRepoInfo->PlatInfo->LocalDdrSize - 2) * SIZE_1GB); PlatRepoInfo->MemAffInfo[LOCAL_DDR_REGION2].Length = Dram2Size; - if (PlatInfo->MultichipMode == 1) { - RemoteDdrSize = ((UINT64)(PlatInfo->RemoteDdrSize - 2) * SIZE_1GB); + if (PlatRepoInfo->PlatInfo->MultichipMode == 1) { + RemoteDdrSize = ((UINT64)(PlatRepoInfo->PlatInfo->RemoteDdrSize - 2) * SIZE_1GB); // Update Remote DDR Region1 PlatRepoInfo->MemAffInfo[REMOTE_DDR_REGION1].ProximityDomain = 1; @@ -1512,7 +1521,6 @@ GetGicCInfo ( ) { EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; - NEOVERSEN1SOC_PLAT_INFO *PlatInfo; UINT32 TotalObjCount; UINT32 ObjIndex; @@ -1523,9 +1531,8 @@ GetGicCInfo ( } PlatformRepo = This->PlatRepoInfo; - PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE; - if (PlatInfo->MultichipMode == 1) { + if (PlatformRepo->PlatInfo->MultichipMode == 1) { TotalObjCount = PLAT_CPU_COUNT * 2; } else { TotalObjCount = PLAT_CPU_COUNT; @@ -1623,7 +1630,6 @@ GetStandardNameSpaceObject ( { EFI_STATUS Status; EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; - NEOVERSEN1SOC_PLAT_INFO *PlatInfo; UINT32 AcpiTableCount; if ((This == NULL) || (CmObject == NULL)) { @@ -1634,9 +1640,8 @@ GetStandardNameSpaceObject ( Status = EFI_NOT_FOUND; PlatformRepo = This->PlatRepoInfo; - PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE; AcpiTableCount = ARRAY_SIZE (PlatformRepo->CmAcpiTableList); - if (PlatInfo->MultichipMode == 0) + if (PlatformRepo->PlatInfo->MultichipMode == 0) AcpiTableCount -= 1; switch (GET_CM_OBJECT_ID (CmObjectId)) { @@ -1697,7 +1702,6 @@ GetArmNameSpaceObject ( { EFI_STATUS Status; EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; - NEOVERSEN1SOC_PLAT_INFO *PlatInfo; UINT32 GicRedistCount; UINT32 GicCpuCount; UINT32 ProcHierarchyInfoCount; @@ -1719,8 +1723,7 @@ GetArmNameSpaceObject ( PlatformRepo = This->PlatRepoInfo; // Probe for multi chip information - PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE; - if (PlatInfo->MultichipMode == 1) { + if (PlatformRepo->PlatInfo->MultichipMode == 1) { GicRedistCount = 2; GicCpuCount = PLAT_CPU_COUNT * 2; ProcHierarchyInfoCount = PLAT_PROC_HIERARCHY_NODE_COUNT * 2; diff --git a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c index 9e8a1efc557d..80daedb33416 100644 --- a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c +++ b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2018 - 2021, ARM Limited. All rights reserved.<BR> + Copyright (c) 2018 - 2024, ARM Limited. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent @@ -10,6 +10,7 @@ #include <Library/DebugLib.h> #include <Library/HobLib.h> #include <Library/MemoryAllocationLib.h> +#include <Library/PeiServicesLib.h> #include <NeoverseN1Soc.h> // The total number of descriptors, including the final "end-of-table" descriptor. @@ -30,15 +31,33 @@ ArmPlatformGetVirtualMemoryMap ( IN ARM_MEMORY_REGION_DESCRIPTOR **VirtualMemoryMap ) { - UINTN Index; - ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable; - EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes; - NEOVERSEN1SOC_PLAT_INFO *PlatInfo; - UINT64 DramBlock2Size; - UINT64 RemoteDdrSize; + UINTN Index; + ARM_MEMORY_REGION_DESCRIPTOR *VirtualMemoryTable; + EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttributes; + CONST NEOVERSEN1SOC_PLAT_INFO *PlatInfo; + UINT64 DramBlock2Size; + UINT64 RemoteDdrSize; + EFI_STATUS Status; Index = 0; - PlatInfo = (NEOVERSEN1SOC_PLAT_INFO *)NEOVERSEN1SOC_PLAT_INFO_STRUCT_BASE; + + Status = PeiServicesLocatePpi ( + &gArmNeoverseN1SocPlatformInfoDescriptorPpiGuid, + 0, + NULL, + (VOID **)&PlatInfo + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "[%a]: failed to locate gArmNeoverseN1SocPlatformInfoDescriptorPpiGuid - %r\n", + gEfiCallerBaseName, + Status + )); + *VirtualMemoryMap = NULL; + return; + } + DramBlock2Size = ((UINT64)(PlatInfo->LocalDdrSize - NEOVERSEN1SOC_DRAM_BLOCK1_SIZE / SIZE_1GB) * (UINT64)SIZE_1GB); -- 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113167): https://edk2.groups.io/g/devel/message/113167 Mute This Topic: https://groups.io/mt/103521648/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-