ArmPlatformPkg/ArmPlatformLib: Added ArmPlatformGetPrimaryCoreMpId()
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 May 2013 12:44:30 +0000 (12:44 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 May 2013 12:44:30 +0000 (12:44 +0000)
ArmPlatformGetPrimaryCoreMpId returns the MPID of the primary core.
The primary core might not be known at build time (eg: the platform allows
the boot CPU to be changed through board config).

This function is used during the secondary core stack initialization to know
the position of the secondary core in the SoC.
A secondary core that is at the position N, with N greater than the primary
core position, will be at the position N-1 in the list of secondary stacks
(the primary core has its own separate bigger stack).

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <olivier.martin@arm.com>
Acked-by: Ryan Harkin <ryan.harkin@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14345 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
ArmPlatformPkg/Include/Library/ArmPlatformLib.h
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm

index 94167d5..3fbc701 100644 (file)
 .align 2\r
 \r
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)\r
 \r
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr   r0, [r0]\r
+  bx    lr\r
+\r
 //UINTN\r
 //ArmPlatformIsPrimaryCore (\r
 //  IN UINTN MpId\r
index 429026e..246ea55 100644 (file)
   INCLUDE AsmMacroIoLib.inc\r
 \r
   EXPORT  ArmPlatformIsPrimaryCore\r
+  EXPORT  ArmPlatformGetPrimaryCoreMpId\r
 \r
   IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
   IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
 \r
   AREA CTA9x4Helper, CODE, READONLY\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ArmPlatformGetPrimaryCoreMpId FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr     r0, [r0]\r
+  bx     lr\r
+  ENDFUNC\r
+\r
 //UINTN\r
 //ArmPlatformIsPrimaryCore (\r
 //  IN UINTN MpId\r
index 2977591..847424f 100644 (file)
@@ -23,6 +23,7 @@
 \r
 GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)\r
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)\r
 \r
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
@@ -36,6 +37,15 @@ ASM_PFX(ArmGetScuBaseAddress):
   mrc   p15, 4, r0, c15, c0, 0\r
   bx  lr\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr   r0, [r0]\r
+  bx    lr\r
+\r
 # IN None\r
 # OUT r0 = number of cores present in the system\r
 ASM_PFX(ArmGetCpuCountPerCluster):\r
index 7d00d11..167762c 100644 (file)
@@ -23,6 +23,7 @@
 \r
   EXPORT    ArmGetCpuCountPerCluster\r
   EXPORT    ArmPlatformIsPrimaryCore\r
+  EXPORT    ArmPlatformGetPrimaryCoreMpId\r
 \r
   IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
   IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
@@ -39,6 +40,16 @@ ArmGetScuBaseAddress FUNCTION
   bx  lr\r
   ENDFUNC\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ArmPlatformGetPrimaryCoreMpId FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr   r0, [r0]\r
+  bx    lr\r
+  ENDFUNC\r
+\r
 // IN None\r
 // OUT r0 = number of cores present in the system\r
 ArmGetCpuCountPerCluster FUNCTION\r
index b58ddd5..94ad5c1 100644 (file)
@@ -69,6 +69,20 @@ ArmPlatformIsPrimaryCore (
   IN UINTN MpId\r
   );\r
 \r
+/**\r
+  Return the MpId of the primary core\r
+\r
+  This function returns the MpId of the primary core.\r
+  This function might be called from assembler before any stack is set.\r
+\r
+  @return   Return the MpId of the primary core\r
+\r
+**/\r
+UINTN\r
+ArmPlatformGetPrimaryCoreMpId (\r
+  VOID\r
+  );\r
+\r
 /**\r
   Return the current Boot Mode\r
 \r
index 47bf9c8..e6f2a9e 100644 (file)
@@ -18,6 +18,7 @@
 .align 3\r
 \r
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)\r
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)\r
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
 \r
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
@@ -33,6 +34,14 @@ ASM_PFX(ArmPlatformGetCorePosition):
   add  r0, r1, r0, LSR #7\r
   bx   lr\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr   r0, [r0]\r
+  bx    lr\r
 \r
 //UINTN\r
 //ArmPlatformIsPrimaryCore (\r
index 6d35182..84f1ee3 100644 (file)
@@ -17,6 +17,7 @@
   INCLUDE AsmMacroIoLib.inc\r
 \r
   EXPORT  ArmPlatformGetCorePosition\r
+  EXPORT  ArmPlatformGetPrimaryCoreMpId\r
   EXPORT  ArmPlatformIsPrimaryCore\r
 \r
   IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
@@ -36,6 +37,16 @@ ArmPlatformGetCorePosition FUNCTION
   bx   lr\r
   ENDFUNC\r
 \r
+//UINTN\r
+//ArmPlatformGetPrimaryCoreMpId (\r
+//  VOID\r
+//  );\r
+ArmPlatformGetPrimaryCoreMpId FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)\r
+  ldr   r0, [r0]\r
+  bx    lr\r
+  ENDFUNC\r
+\r
 //UINTN\r
 //ArmPlatformIsPrimaryCore (\r
 //  IN UINTN MpId\r