From 0dbbacdf1842e41c6bc7675a92015d7e28840b3f Mon Sep 17 00:00:00 2001 From: oliviermartin Date: Wed, 4 Jul 2012 20:17:46 +0000 Subject: [PATCH] ArmPlatformPkg/PrePi: Declared the ARM MP Core Info Registered the gArmMpCoreInfoGuid Data Hob. Signed-off-by: Olivier Martin git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13497 6f19259b-4bc3-4df7-8a09-765794883524 --- ArmPlatformPkg/PrePi/MainMPCore.c | 35 +-------------- ArmPlatformPkg/PrePi/PeiMPCore.inf | 1 + ArmPlatformPkg/PrePi/PeiUniCore.inf | 5 ++- ArmPlatformPkg/PrePi/PrePi.c | 44 +++++++++++++++++++ ArmPlatformPkg/PrePi/PrePi.h | 6 +++ .../Library/BeagleBoardLib/BeagleBoard.c | 10 +++++ 6 files changed, 65 insertions(+), 36 deletions(-) diff --git a/ArmPlatformPkg/PrePi/MainMPCore.c b/ArmPlatformPkg/PrePi/MainMPCore.c index 2c18f9f3c3..998a7763f4 100644 --- a/ArmPlatformPkg/PrePi/MainMPCore.c +++ b/ArmPlatformPkg/PrePi/MainMPCore.c @@ -18,30 +18,6 @@ #include -EFI_STATUS -GetPlatformPpi ( - IN EFI_GUID *PpiGuid, - OUT VOID **Ppi - ) -{ - UINTN PpiListSize; - UINTN PpiListCount; - EFI_PEI_PPI_DESCRIPTOR *PpiList; - UINTN Index; - - PpiListSize = 0; - ArmPlatformGetPlatformPpiList (&PpiListSize, &PpiList); - PpiListCount = PpiListSize / sizeof(EFI_PEI_PPI_DESCRIPTOR); - for (Index = 0; Index < PpiListCount; Index++, PpiList++) { - if (CompareGuid (PpiList->Guid, PpiGuid) == TRUE) { - *Ppi = PpiList->Ppi; - return EFI_SUCCESS; - } - } - - return EFI_NOT_FOUND; -} - VOID PrimaryMain ( IN UINTN UefiMemoryBase, @@ -50,15 +26,6 @@ PrimaryMain ( IN UINT64 StartTimeStamp ) { - // On MP Core Platform we must implement the ARM MP Core Info PPI (gArmMpCoreInfoPpiGuid) - DEBUG_CODE_BEGIN(); - EFI_STATUS Status; - ARM_MP_CORE_INFO_PPI *ArmMpCoreInfoPpi; - - Status = GetPlatformPpi (&gArmMpCoreInfoPpiGuid, (VOID**)&ArmMpCoreInfoPpi); - ASSERT_EFI_ERROR (Status); - DEBUG_CODE_END(); - // Check PcdGicPrimaryCoreId has been set in case the Primary Core is not the core 0 of Cluster 0 DEBUG_CODE_BEGIN(); if ((PcdGet32(PcdArmPrimaryCore) != 0) && (PcdGet32 (PcdGicPrimaryCoreId) == 0)) { @@ -69,7 +36,7 @@ PrimaryMain ( // Enable the GIC Distributor ArmGicEnableDistributor(PcdGet32(PcdGicDistributorBase)); - // In some cases, the secondary cores are waiting for an SGI from the next stage boot loader toresume their initialization + // In some cases, the secondary cores are waiting for an SGI from the next stage boot loader to resume their initialization if (!FixedPcdGet32(PcdSendSgiToBringUpSecondaryCores)) { // Sending SGI to all the Secondary CPU interfaces ArmGicSendSgiTo (PcdGet32(PcdGicDistributorBase), ARM_GIC_ICDSGIR_FILTER_EVERYONEELSE, 0x0E, PcdGet32 (PcdGicSgiIntId)); diff --git a/ArmPlatformPkg/PrePi/PeiMPCore.inf b/ArmPlatformPkg/PrePi/PeiMPCore.inf index 2fedb27a48..df89dfd3a7 100755 --- a/ArmPlatformPkg/PrePi/PeiMPCore.inf +++ b/ArmPlatformPkg/PrePi/PeiMPCore.inf @@ -61,6 +61,7 @@ [Guids] gArmGlobalVariableGuid + gArmMpCoreInfoGuid [FeaturePcd] gEmbeddedTokenSpaceGuid.PcdCacheEnable diff --git a/ArmPlatformPkg/PrePi/PeiUniCore.inf b/ArmPlatformPkg/PrePi/PeiUniCore.inf index cfd40bc155..1a59fdc086 100755 --- a/ArmPlatformPkg/PrePi/PeiUniCore.inf +++ b/ArmPlatformPkg/PrePi/PeiUniCore.inf @@ -55,11 +55,12 @@ PlatformPeiLib MemoryInitPeiLib -[Guids] - gArmGlobalVariableGuid +[Ppis] + gArmMpCoreInfoPpiGuid [Guids] gArmGlobalVariableGuid + gArmMpCoreInfoGuid [FeaturePcd] gEmbeddedTokenSpaceGuid.PcdCacheEnable diff --git a/ArmPlatformPkg/PrePi/PrePi.c b/ArmPlatformPkg/PrePi/PrePi.c index 5090c25123..c393812439 100755 --- a/ArmPlatformPkg/PrePi/PrePi.c +++ b/ArmPlatformPkg/PrePi/PrePi.c @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -70,6 +71,30 @@ BuildGlobalVariableHob ( Hob->GlobalVariableSize = GlobalVariableSize; } +EFI_STATUS +GetPlatformPpi ( + IN EFI_GUID *PpiGuid, + OUT VOID **Ppi + ) +{ + UINTN PpiListSize; + UINTN PpiListCount; + EFI_PEI_PPI_DESCRIPTOR *PpiList; + UINTN Index; + + PpiListSize = 0; + ArmPlatformGetPlatformPpiList (&PpiListSize, &PpiList); + PpiListCount = PpiListSize / sizeof(EFI_PEI_PPI_DESCRIPTOR); + for (Index = 0; Index < PpiListCount; Index++, PpiList++) { + if (CompareGuid (PpiList->Guid, PpiGuid) == TRUE) { + *Ppi = PpiList->Ppi; + return EFI_SUCCESS; + } + } + + return EFI_NOT_FOUND; +} + VOID PrePiMain ( IN UINTN UefiMemoryBase, @@ -79,6 +104,9 @@ PrePiMain ( ) { EFI_HOB_HANDOFF_INFO_TABLE* HobList; + ARM_MP_CORE_INFO_PPI* ArmMpCoreInfoPpi; + UINTN ArmCoreCount; + ARM_CORE_INFO* ArmCoreInfoTable; EFI_STATUS Status; CHAR8 Buffer[100]; UINTN CharCount; @@ -133,6 +161,22 @@ PrePiMain ( //TODO: Call CpuPei as a library BuildCpuHob (PcdGet8 (PcdPrePiCpuMemorySize), PcdGet8 (PcdPrePiCpuIoSize)); + if (ArmIsMpCore ()) { + // Only MP Core platform need to produce gArmMpCoreInfoPpiGuid + Status = GetPlatformPpi (&gArmMpCoreInfoPpiGuid, (VOID**)&ArmMpCoreInfoPpi); + + // On MP Core Platform we must implement the ARM MP Core Info PPI (gArmMpCoreInfoPpiGuid) + ASSERT_EFI_ERROR (Status); + + // Build the MP Core Info Table + ArmCoreCount = 0; + Status = ArmMpCoreInfoPpi->GetMpCoreInfo (&ArmCoreCount, &ArmCoreInfoTable); + if (!EFI_ERROR(Status) && (ArmCoreCount > 0)) { + // Build MPCore Info HOB + BuildGuidDataHob (&gArmMpCoreInfoGuid, ArmCoreInfoTable, sizeof (ARM_CORE_INFO) * ArmCoreCount); + } + } + // Set the Boot Mode SetBootMode (ArmPlatformGetBootMode ()); diff --git a/ArmPlatformPkg/PrePi/PrePi.h b/ArmPlatformPkg/PrePi/PrePi.h index e13900dbd4..3e976fadfb 100644 --- a/ArmPlatformPkg/PrePi/PrePi.h +++ b/ArmPlatformPkg/PrePi/PrePi.h @@ -81,4 +81,10 @@ BuildMemoryTypeInformationHob ( VOID ); +EFI_STATUS +GetPlatformPpi ( + IN EFI_GUID *PpiGuid, + OUT VOID **Ppi + ); + #endif /* _PREPI_H_ */ diff --git a/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoard.c b/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoard.c index 951873d3ff..8f2ab557be 100755 --- a/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoard.c +++ b/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoard.c @@ -114,3 +114,13 @@ ArmPlatformInitializeSystemMemory ( { // We do not need to initialize the System Memory on RTSM } + +VOID +ArmPlatformGetPlatformPpiList ( + OUT UINTN *PpiListSize, + OUT EFI_PEI_PPI_DESCRIPTOR **PpiList + ) +{ + *PpiListSize = 0; + *PpiList = NULL; +}