]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ArmPlatformPkg/PrePeiCore/PrePeiCore.c
ArmPlatformPkg: Renamed and Invoked earlier ArmPlatformNormalInitialize()
[mirror_edk2.git] / ArmPlatformPkg / PrePeiCore / PrePeiCore.c
index 1927035365cc5a33e6dcf3a30771201f6ca169ec..f1300e0e8c96dd33ae482a615b451ee84eb089bd 100644 (file)
@@ -20,7 +20,6 @@
 #include <Library/SerialPortLib.h>\r
 \r
 #include <Ppi/ArmGlobalVariable.h>\r
-#include <Chipset/ArmV7.h>\r
 \r
 #include "PrePeiCore.h"\r
 \r
@@ -34,12 +33,40 @@ EFI_PEI_PPI_DESCRIPTOR      gCommonPpiTable[] = {
     &mTemporaryRamSupportPpi\r
   },\r
   {\r
-    EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,\r
+    EFI_PEI_PPI_DESCRIPTOR_PPI,\r
     &gArmGlobalVariablePpiGuid,\r
     &mGlobalVariablePpi\r
   }\r
 };\r
 \r
+VOID\r
+CreatePpiList (\r
+  OUT UINTN                   *PpiListSize,\r
+  OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList\r
+  )\r
+{\r
+  EFI_PEI_PPI_DESCRIPTOR *PlatformPpiList;\r
+  UINTN                   PlatformPpiListSize;\r
+  UINTN                   ListBase;\r
+  EFI_PEI_PPI_DESCRIPTOR *LastPpi;\r
+\r
+  // Get the Platform PPIs\r
+  PlatformPpiListSize = 0;\r
+  ArmPlatformGetPlatformPpiList (&PlatformPpiListSize, &PlatformPpiList);\r
+\r
+  // Copy the Common and Platform PPis in Temporrary Memory\r
+  ListBase = PcdGet32 (PcdCPUCoresStackBase);\r
+  CopyMem ((VOID*)ListBase, gCommonPpiTable, sizeof(gCommonPpiTable));\r
+  CopyMem ((VOID*)(ListBase + sizeof(gCommonPpiTable)), PlatformPpiList, PlatformPpiListSize);\r
+\r
+  // Set the Terminate flag on the last PPI entry\r
+  LastPpi = (EFI_PEI_PPI_DESCRIPTOR*)ListBase + ((sizeof(gCommonPpiTable) + PlatformPpiListSize) / sizeof(EFI_PEI_PPI_DESCRIPTOR)) - 1;\r
+  LastPpi->Flags |= EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;\r
+\r
+  *PpiList     = (EFI_PEI_PPI_DESCRIPTOR*)ListBase;\r
+  *PpiListSize = sizeof(gCommonPpiTable) + PlatformPpiListSize;\r
+}\r
+\r
 VOID\r
 CEntryPoint (\r
   IN  UINTN                     MpId,\r
@@ -67,12 +94,15 @@ CEntryPoint (
 \r
   //Note: The MMU will be enabled by MemoryPeim. Only the primary core will have the MMU on.\r
 \r
-  //If not primary Jump to Secondary Main\r
+  // If not primary Jump to Secondary Main\r
   if (IS_PRIMARY_CORE(MpId)) {\r
     // Initialize the Debug Agent for Source Level Debugging\r
     InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, NULL, NULL);\r
     SaveAndSetDebugTimerInterrupt (TRUE);\r
 \r
+    // Initialize the platform specific controllers\r
+    ArmPlatformInitialize (MpId);\r
+\r
     // Goto primary Main.\r
     PrimaryMain (PeiCoreEntryPoint);\r
   } else {\r