ArmPlatformPkg: Introduce Primary core macros

On MpCore system, the primary core can now be any core of the system.

To identify the primary core, you can use 'gArmTokenSpaceGuid.PcdArmPrimaryCoreMask'
and 'gArmTokenSpaceGuid.PcdArmPrimaryCore'.
These PCDs by default use the ClusterId and CoreId to identify the core. And the
primary core is defined as the ClusetrId=0 and CoreId=0.

The helper macros are: IS_PRIMARY_CORE(MpId), GET_CORE_ID(MpId), GET_CLUSTER_ID(MpId),
GET_CORE_POS(MpId), PRIMARY_CORE_ID.



git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12412 6f19259b-4bc3-4df7-8a09-765794883524
diff --git a/ArmPlatformPkg/PrePi/ModuleEntryPoint.asm b/ArmPlatformPkg/PrePi/ModuleEntryPoint.asm
index 00abcb3..881871d 100644
--- a/ArmPlatformPkg/PrePi/ModuleEntryPoint.asm
+++ b/ArmPlatformPkg/PrePi/ModuleEntryPoint.asm
@@ -19,6 +19,7 @@
   INCLUDE AsmMacroIoLib.inc

   

   IMPORT  CEntryPoint

+  IMPORT  ArmReadMpidr

   EXPORT  _ModuleEntryPoint

 

   PRESERVE8

@@ -27,9 +28,10 @@
 StartupAddr        DCD      CEntryPoint

 

 _ModuleEntryPoint

-  // Identify CPU ID

-  mrc   p15, 0, r0, c0, c0, 5

-  and   r0, #0xf

+  // Get ID of this CPU in Multicore system

+  bl    ArmReadMpidr

+  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)

+  and   r5, r0, r1

 

 _SetSVCMode

   // Enter SVC mode

@@ -94,7 +96,7 @@
   ldr   r2, StartupAddr

 

   // Jump to PrePiCore C code

-  //    r0 = core_id

+  //    r0 = MpId

   //    r1 = UefiMemoryBase

   blx   r2