]> git.proxmox.com Git - mirror_edk2.git/commitdiff
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 94167d5f174e5e84e73350caba2caeb4f94e6e97..3fbc701dadb78615701cedac392217ddd31f1a20 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 429026e01597026876af16cacdec3976dd53ecf9..246ea554d8e9c079153eb136b4d7bb1e53201463 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 29775915294bda0441d44398dbf0fe6f5e498793..847424fb4b9a6e78cd1676b5de9f4e98639122fe 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 7d00d115dc34bb3adf5eda89dd27aa12ae20d5c4..167762c34e1a47f599bc13181aabf4f15d99d27a 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 b58ddd5d3fa59307ecd8b6b5134d257cfc5d744d..94ad5c176f3e42d64e4776782bf1ce96737ca6e7 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 47bf9c8946c15e4185f3f55d207041ebbce4c5be..e6f2a9e3801ccf83e07b5160a27fd6df5ed36750 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 6d35182a275ccc03c7cf775493f1f14c61f81670..84f1ee35bfe009927c506a80fff5e6e98a03c9be 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