]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/ArmPlatformLib: Added support for ArmPlatformIsPrimaryCore()
authoroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 May 2013 12:41:27 +0000 (12:41 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 10 May 2013 12:41:27 +0000 (12:41 +0000)
Checking if a core if the primary/boot core used to be done with the macro
IS_PRIMARY_CORE().
Some platforms exposes configuration registers to change the primary core.
Replacing the macro IS_PRIMARY_CORE() by ArmPlatformIsPrimaryCore() allows
some flexibility in the way to check the primary core.

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

59 files changed:
ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.c
ArmPkg/Drivers/ArmCpuLib/ArmCortexA15Lib/ArmCortexA15Lib.inf
ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.c
ArmPkg/Drivers/ArmCpuLib/ArmCortexA9Lib/ArmCortexA9Lib.inf
ArmPkg/Drivers/PL390Gic/PL390GicSec.c
ArmPkg/Drivers/PL390Gic/PL390GicSecLib.inf
ArmPkg/Include/AsmMacroIoLib.h
ArmPkg/Include/AsmMacroIoLib.inc
ArmPkg/Include/Library/ArmLib.h
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEb.c
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.S [new file with mode: 0644]
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.asm [new file with mode: 0644]
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbLib.inf
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbLibSec.inf
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbSecLibRTSM/ArmRealViewEbSec.c
ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbSecLibRTSM/ArmRealViewEbSecLib.inf
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/ArmVExpressLib.inf
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7.c
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/ArmVExpressLib.inf
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/ArmVExpressLibSec.inf
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4.c
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S [new file with mode: 0644]
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm [new file with mode: 0644]
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/RTSM.c
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibCTA9x4/CTA9x4Sec.c
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.S [deleted file]
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.asm [deleted file]
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/ArmVExpressSecLib.inf
ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/RTSMSec.c
ArmPlatformPkg/Include/Library/ArmPlatformLib.h
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S
ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm
ArmPlatformPkg/Library/ArmPlatformLibNull/ArmPlatformLibNull.c
ArmPlatformPkg/Library/ArmPlatformSecLibNull/ArmPlatformLibNullSec.c
ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.c
ArmPlatformPkg/Library/DebugSecExtraActionLib/DebugSecExtraActionLib.inf
ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.S
ArmPlatformPkg/PrePeiCore/Arm/PrePeiCoreEntryPoint.asm
ArmPlatformPkg/PrePeiCore/PrePeiCore.c
ArmPlatformPkg/PrePeiCore/PrePeiCoreMPCore.inf
ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
ArmPlatformPkg/PrePi/Arm/ModuleEntryPoint.S
ArmPlatformPkg/PrePi/Arm/ModuleEntryPoint.asm
ArmPlatformPkg/PrePi/PeiMPCore.inf
ArmPlatformPkg/PrePi/PeiUniCore.inf
ArmPlatformPkg/PrePi/PrePi.c
ArmPlatformPkg/Sec/Arm/Helper.S
ArmPlatformPkg/Sec/Arm/SecEntryPoint.S
ArmPlatformPkg/Sec/Arm/SecEntryPoint.asm
ArmPlatformPkg/Sec/Sec.c
ArmPlatformPkg/Sec/Sec.inf
ArmPlatformPkg/Sec/SecInternal.h
BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S [new file with mode: 0644]
BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm [new file with mode: 0644]
BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardLib.inf

index 95ab073e18b35232eec32edb1976a7c2874dadf4..b15597893a8f03672d7c130eefcc5564ae56a741 100644 (file)
@@ -55,7 +55,7 @@ ArmCpuSetupSmpNonSecure (
   )\r
 {\r
   /*// Make the SCU accessible in Non Secure world\r
-  if (IS_PRIMARY_CORE(MpId)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId)) {\r
     ScuBase = ArmGetScuBaseAddress();\r
 \r
     // Allow NS access to SCU register\r
index bcf7f6bfba49f24a09b30bee125fd45ddc7422f4..3ddd4c5704612a9529e93a69655cc5e1ba384267 100644 (file)
 [Sources.common]\r
   ArmCortexA15Lib.c\r
 \r
-[FeaturePcd]\r
-\r
 [FixedPcd]\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
-\r
   gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz\r
index 8d9530cee218fa9cf068fd2512c7a48ecbe414bb..4fc6a08b9a942e8fa33d7525fbcd56a04e4a11fa 100644 (file)
@@ -15,6 +15,7 @@
 #include <Base.h>\r
 #include <Library/ArmLib.h>\r
 #include <Library/ArmCpuLib.h>\r
+#include <Library/ArmPlatformLib.h>\r
 #include <Library/IoLib.h>\r
 #include <Library/PcdLib.h>\r
 \r
@@ -64,7 +65,7 @@ ArmCpuSetupSmpNonSecure (
   INTN          ScuBase;\r
 \r
   // Make the SCU accessible in Non Secure world\r
-  if (IS_PRIMARY_CORE(MpId)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId)) {\r
     ScuBase = ArmGetScuBaseAddress();\r
 \r
     // Allow NS access to SCU register\r
index 866736f6ff14060e713b886b527dd74079c9b16e..a84501dea4f87cb775e808a7c72d3344631d685a 100644 (file)
@@ -1,5 +1,5 @@
 #/* @file\r
-#  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 #  \r
 #  This program and the accompanying materials                          \r
 #  are licensed and made available under the terms and conditions of the BSD License         \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
   ArmPkg/ArmPkg.dec\r
+  ArmPlatformPkg/ArmPlatformPkg.dec\r
 \r
 [LibraryClasses]\r
   ArmLib\r
+  ArmPlatformLib\r
   IoLib\r
   PcdLib\r
 \r
@@ -33,8 +35,3 @@
   ArmCortexA9Helper.asm     | RVCT\r
   ArmCortexA9Helper.S       | GCC\r
 \r
-[FeaturePcd]\r
-\r
-[FixedPcd]\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
index 6244575772bf67d25d15e7f1afa1c9dc1321a537..bae76e441ba34c4a2f83d262bd57883efd3d5bbd 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 *\r
-*  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+*  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 *  \r
 *  This program and the accompanying materials                          \r
 *  are licensed and made available under the terms and conditions of the BSD License         \r
@@ -14,6 +14,7 @@
 \r
 #include <Base.h>\r
 #include <Library/ArmLib.h>\r
+#include <Library/ArmPlatformLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/IoLib.h>\r
 #include <Library/ArmGicLib.h>\r
@@ -51,7 +52,7 @@ ArmGicSetupNonSecure (
   }\r
 \r
   // Only the primary core should set the Non Secure bit to the SPIs (Shared Peripheral Interrupt).\r
-  if (IS_PRIMARY_CORE(MpId)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId)) {\r
     // Ensure all GIC interrupts are Non-Secure\r
     for (Index = 0; Index < (ArmGicGetMaxNumInterrupts (GicDistributorBase) / 32); Index++) {\r
       MmioWrite32 (GicDistributorBase + ARM_GIC_ICDISR + (Index * 4), 0xffffffff);\r
index 73faa39b6683533289cf944579fa4a2459582df3..205e503427d090d5468610e9945cf3d4f76962b7 100644 (file)
 \r
 [Packages]\r
   ArmPkg/ArmPkg.dec\r
+  ArmPlatformPkg/ArmPlatformPkg.dec\r
   MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
 \r
 [LibraryClasses]\r
   ArmLib\r
+  ArmPlatformLib\r
   DebugLib\r
   IoLib\r
   PcdLib\r
 \r
-[FixedPcd.common]\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
index c8692fcfd71e7cd70f3677ea17fee105d32cc3f7..c5073297417568a7ced154547a70fbb4cf31ffc0 100644 (file)
 \r
 // Convert the (ClusterId,CoreId) into a Core Position\r
 // We assume there are 4 cores per cluster\r
-#define GetCorePositionFromMpId(Pos, MpId, Tmp) \\r
-  lsr   Pos, MpId, #6 ;                        \\r
-  and   Tmp, MpId, #3 ;                        \\r
+// Note: 0xFFFF is the magic value for ARM_CORE_MASK | ARM_CLUSTER_MASK\r
+#define GetCorePositionFromMpId(Pos, MpId, Tmp)  \\r
+  ldr   Tmp, =0xFFFF                             \\r
+  and   MpId, Tmp                                \\r
+  lsr   Pos, MpId, #6 ;                          \\r
+  and   Tmp, MpId, #3 ;                          \\r
   add   Pos, Pos, Tmp\r
 \r
 // Reserve a region at the top of the Primary Core stack\r
@@ -207,10 +210,15 @@ _InitializePrimaryStackEnd:
 \r
 #define LoadConstantToReg(Data, Reg) \\r
   ldr  Reg, =Data\r
-  \r
-#define GetCorePositionFromMpId(Pos, MpId, Tmp) \\r
-  lsr   Pos, MpId, #6 ;                        \\r
-  and   Tmp, MpId, #3 ;                        \\r
+\r
+// Convert the (ClusterId,CoreId) into a Core Position\r
+// We assume there are 4 cores per cluster\r
+// Note: 0xFFFF is the magic value for ARM_CORE_MASK | ARM_CLUSTER_MASK\r
+#define GetCorePositionFromMpId(Pos, MpId, Tmp)    \\r
+  ldr   Tmp, =0xFFFF ;                             \\r
+  and   MpId, Tmp ;                                \\r
+  lsr   Pos, MpId, #6 ;                            \\r
+  and   Tmp, MpId, #3 ;                            \\r
   add   Pos, Pos, Tmp\r
 \r
 #define SetPrimaryStack(StackTop, GlobalSize, Tmp)  \\r
index 1ca99fdd1d9ab99bb87c53c8b905205ea6ba9182..5796adcb12970fad235326ad42a0d86c0a224b90 100644 (file)
   \r
   MACRO\r
   GetCorePositionFromMpId $Pos, $MpId, $Tmp\r
+  ;Note: The ARM macro does not support the pre-processing. 0xFF and (0xFF << 8) are the values of\r
+  ;      ARM_CORE_MASK and ARM_CLUSTER_MASK \r
+  mov   $Tmp, #(0xFF :OR: (0xFF << 8))\r
+  and   $MpId, $Tmp\r
   lsr   $Pos, $MpId, #6\r
   and   $Tmp, $MpId, #3\r
   add   $Pos, $Pos, $Tmp\r
index b12be1424e0bbfce17e1fd4849ab15ecf168ceed..75f775536280b44248ba37acf263adf1f05ff842 100644 (file)
@@ -112,7 +112,6 @@ typedef enum {
 //\r
 // ARM MP Core IDs\r
 //\r
-#define IS_PRIMARY_CORE(MpId) (((MpId) & PcdGet32(PcdArmPrimaryCoreMask)) == PcdGet32(PcdArmPrimaryCore))\r
 #define ARM_CORE_MASK         0xFF\r
 #define ARM_CLUSTER_MASK      (0xFF << 8)\r
 #define GET_CORE_ID(MpId)     ((MpId) & ARM_CORE_MASK)\r
index 77d48acce1c2cac7e747b28fb08fd5d99277e916..8351b43d80e40256fd9a20d2fdc4fcef73e90444 100644 (file)
@@ -74,7 +74,7 @@ ArmPlatformInitialize (
   IN  UINTN                     MpId\r
   )\r
 {\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.S b/ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.S
new file mode 100644 (file)
index 0000000..847509f
--- /dev/null
@@ -0,0 +1,49 @@
+//\r
+//  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+//\r
+//  This program and the accompanying materials\r
+//  are licensed and made available under the terms and conditions of the BSD License\r
+//  which accompanies this distribution.  The full text of the license may be found at\r
+//  http://opensource.org/licenses/bsd-license.php\r
+//\r
+//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+//\r
+\r
+#include <AsmMacroIoLib.h>\r
+#include <Library/ArmLib.h>\r
+\r
+.text \r
+.align 3\r
+\r
+GCC_ASM_EXPORT(ArmPlatformGetCorePosition)\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
+\r
+//UINTN\r
+//ArmPlatformGetCorePosition (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformGetCorePosition):\r
+  and  r1, r0, #ARM_CORE_MASK\r
+  and  r0, r0, #ARM_CLUSTER_MASK\r
+  add  r0, r1, r0, LSR #7\r
+  bx   lr\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.asm b/ArmPlatformPkg/ArmRealViewEbPkg/Library/ArmRealViewEbLibRTSM/ArmRealViewEbHelper.asm
new file mode 100644 (file)
index 0000000..6d35182
--- /dev/null
@@ -0,0 +1,56 @@
+//\r
+//  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+//\r
+//  This program and the accompanying materials\r
+//  are licensed and made available under the terms and conditions of the BSD License\r
+//  which accompanies this distribution.  The full text of the license may be found at\r
+//  http://opensource.org/licenses/bsd-license.php\r
+//\r
+//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+//\r
+//\r
+\r
+#include <AsmMacroIoLib.h>\r
+#include <Library/ArmLib.h>\r
+\r
+  INCLUDE AsmMacroIoLib.inc\r
+\r
+  EXPORT  ArmPlatformGetCorePosition\r
+  EXPORT  ArmPlatformIsPrimaryCore\r
+\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
+  \r
+  PRESERVE8\r
+  AREA    ArmPlatformNullHelper, CODE, READONLY\r
+\r
+//UINTN\r
+//ArmPlatformGetCorePosition (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformGetCorePosition FUNCTION\r
+  and  r1, r0, #ARM_CORE_MASK\r
+  and  r0, r0, #ARM_CLUSTER_MASK\r
+  add  r0, r1, r0, LSR #7\r
+  bx   lr\r
+  ENDFUNC\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+  ENDFUNC\r
+\r
+  END\r
+\r
index 6c45d35d80851258f922620ffd1fda21d7fb0d9a..a8fe3b4ce34be05f84cd29efd276fe310b74911c 100644 (file)
@@ -34,6 +34,8 @@
 [Sources.common]\r
   ArmRealViewEb.c\r
   ArmRealViewEbMem.c\r
+  ArmRealViewEbHelper.asm | RVCT\r
+  ArmRealViewEbHelper.S   | GCC\r
 \r
 [FeaturePcd]\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable\r
index 652211d9916ee8073c4f1bb50b997f1ad789da01..9be6a3755d4bc521cc8dd27e265212571126352b 100644 (file)
@@ -32,6 +32,8 @@
 \r
 [Sources.common]\r
   ArmRealViewEb.c\r
+  ArmRealViewEbHelper.asm | RVCT\r
+  ArmRealViewEbHelper.S   | GCC\r
 \r
 [FeaturePcd]\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable\r
index 033c9d7ea082376e144a8c9dfb2b30d25ab0a574..1d3233ec4a238f20c8bc55dab52f2aca39aad28c 100644 (file)
@@ -14,6 +14,7 @@
 \r
 #include <Library/IoLib.h>\r
 #include <Library/ArmLib.h>\r
+#include <Library/ArmPlatformLib.h>\r
 #include <Library/ArmPlatformSecLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/PcdLib.h>\r
@@ -51,7 +52,7 @@ ArmPlatformSecInitialize (
   )\r
 {\r
   // If it is not the primary core then there is nothing to do\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index b6971bc7688e13a17f5e08b56bc13baf69fe43c1..d4e383aceb252d4f479ce113a273dae93a507c13 100644 (file)
@@ -29,6 +29,7 @@
 [LibraryClasses]\r
   IoLib\r
   ArmLib\r
+  ArmPlatformLib\r
 \r
 [Sources.common]\r
   ArmRealViewEbSec.c\r
@@ -41,5 +42,3 @@
 [FixedPcd]\r
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
 \r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
index 6ec75dc0d2ea5008fc9b9069e78ef2ba1176b50a..373a8e9e988d2f9822b2f17e4b5849ccd4fd1aec 100644 (file)
@@ -51,6 +51,3 @@
   gArmTokenSpaceGuid.PcdSystemMemoryBase\r
   gArmTokenSpaceGuid.PcdSystemMemorySize\r
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
-\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
index 87f41c7ae0c985a4bfe07ec05915eb7620a5204e..32ce23dff772f68631699088d7c303c4a776d40a 100644 (file)
@@ -140,7 +140,7 @@ ArmPlatformInitialize (
   IN  UINTN                     MpId\r
   )\r
 {\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index 286327956a3f223753f5c0b3dcf991dea09fccbc..09cfc827a175323e26f118fddbe086c12888a382 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2012-2013, ARM Limited. All rights reserved.\r
 //\r
 //  This program and the accompanying materials\r
 //  are licensed and made available under the terms and conditions of the BSD License\r
 //\r
 //\r
 \r
+#include <AsmMacroIoLib.h>\r
 #include <Library/ArmLib.h>\r
 \r
+#include <ArmPlatform.h>\r
+\r
 .text \r
 .align 3\r
 \r
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
 \r
 //UINTN\r
 //ArmPlatformGetCorePosition (\r
@@ -28,3 +32,33 @@ ASM_PFX(ArmPlatformGetCorePosition):
   add  r0, r1, r0, LSR #7\r
   bx   lr\r
 \r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48\r
+  // with cpu_id[0:3] and cluster_id[4:7]\r
+  LoadConstantToReg (ARM_CTA15A7_SCC_CFGREG48, r1)\r
+  ldr   r1, [r1]\r
+  lsr   r1, #24\r
+\r
+  // Shift the SCC value to get the cluster ID at the offset #8\r
+  lsl   r2, r1, #4\r
+  and   r2, r2, #0xF00\r
+\r
+  // Keep only the cpu ID from the original SCC\r
+  and   r1, r1, #0x0F\r
+  // Add the Cluster ID to the Cpu ID\r
+  orr   r1, r1, r2\r
+\r
+  // Keep the Cluster ID and Core ID from the MPID\r
+  LoadConstantToReg (ARM_CLUSTER_MASK | ARM_CORE_MASK, r2)\r
+  and   r0, r0, r2\r
+\r
+  // Compare mpid and boot cpu from ARM_SCC_CFGREG48\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+\r
index 73b3d97d6654ca90a909cdc86a8d0d7930c74f88..1b5474b5f243db20caf0e1310417cbb0d5345b19 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2012-2013, ARM Limited. All rights reserved.\r
 //\r
 //  This program and the accompanying materials\r
 //  are licensed and made available under the terms and conditions of the BSD License\r
 //\r
 //\r
 \r
+#include <AsmMacroIoLib.h>\r
 #include <Library/ArmLib.h>\r
 \r
+#include <ArmPlatform.h>\r
+\r
   INCLUDE AsmMacroIoLib.inc\r
 \r
   EXPORT  ArmPlatformGetCorePosition\r
+  EXPORT  ArmPlatformIsPrimaryCore\r
 \r
   PRESERVE8\r
   AREA    CTA15A7Helper, CODE, READONLY\r
@@ -31,4 +35,35 @@ ArmPlatformGetCorePosition FUNCTION
   bx   lr\r
   ENDFUNC\r
 \r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48\r
+  // with cpu_id[0:3] and cluster_id[4:7]\r
+  LoadConstantToReg (ARM_CTA15A7_SCC_CFGREG48, r1)\r
+  ldr   r1, [r1]\r
+  lsr   r1, #24\r
+\r
+  // Shift the SCC value to get the cluster ID at the offset #8\r
+  lsl   r2, r1, #4\r
+  and   r2, r2, #0xF00\r
+\r
+  // Keep only the cpu ID from the original SCC\r
+  and   r1, r1, #0x0F\r
+  // Add the Cluster ID to the Cpu ID\r
+  orr   r1, r1, r2\r
+\r
+  // Keep the Cluster ID and Core ID from the MPID\r
+  LoadConstantToReg (ARM_CLUSTER_MASK | ARM_CORE_MASK, r2)\r
+  and   r0, r0, r2\r
+\r
+  // Compare mpid and boot cpu from ARM_SCC_CFGREG48\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+  ENDFUNC\r
+\r
   END\r
index a255c40b3e255a607e799a892749a95c54885021..5a44eb5f70fa4f47d17ddd056153a4768bb8ae33 100644 (file)
@@ -39,6 +39,8 @@
 [Sources.common]\r
   CTA9x4.c\r
   CTA9x4Mem.c\r
+  CTA9x4Helper.S   | GCC\r
+  CTA9x4Helper.asm | RVCT\r
 \r
 [FeaturePcd]\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable\r
index 36784c0b4901ff0e11c8a40ffd66833d5d0e0c79..4d9699d4a3fd74edeff8cbab170163df0d05edd8 100644 (file)
@@ -36,6 +36,8 @@
 \r
 [Sources.common]\r
   CTA9x4.c\r
+  CTA9x4Helper.S   | GCC\r
+  CTA9x4Helper.asm | RVCT\r
 \r
 [FeaturePcd]\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable\r
index 862a51aaf10f928e98c99f90184ef6f9ccde2d0b..55b611190ad820eb52471cf33d4fa60115a31144 100644 (file)
@@ -136,7 +136,7 @@ ArmPlatformInitialize (
   IN  UINTN                     MpId\r
   )\r
 {\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
new file mode 100644 (file)
index 0000000..94167d5
--- /dev/null
@@ -0,0 +1,39 @@
+#\r
+#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
+#  \r
+#  This program and the accompanying materials                          \r
+#  are licensed and made available under the terms and conditions of the BSD License         \r
+#  which accompanies this distribution.  The full text of the license may be found at        \r
+#  http://opensource.org/licenses/bsd-license.php\r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+#\r
+#\r
+\r
+#include <AsmMacroIoLib.h>\r
+\r
+.text\r
+.align 2\r
+\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+\r
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED\r
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
new file mode 100644 (file)
index 0000000..429026e
--- /dev/null
@@ -0,0 +1,43 @@
+//\r
+//  Copyright (c) 2013, ARM Limited. All rights reserved.\r
+//  \r
+//  This program and the accompanying materials                          \r
+//  are licensed and made available under the terms and conditions of the BSD License         \r
+//  which accompanies this distribution.  The full text of the license may be found at        \r
+//  http://opensource.org/licenses/bsd-license.php                                            \r
+//\r
+//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+//\r
+//\r
+\r
+#include <AsmMacroIoLib.h>\r
+\r
+#include <AutoGen.h>\r
+\r
+  INCLUDE AsmMacroIoLib.inc\r
+\r
+  EXPORT  ArmPlatformIsPrimaryCore\r
+\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
+\r
+  AREA CTA9x4Helper, CODE, READONLY\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+  ENDFUNC\r
+\r
+  END\r
index 949e7a3014d356b60ce57e15613394bd2c752d69..29775915294bda0441d44398dbf0fe6f5e498793 100644 (file)
@@ -1,10 +1,10 @@
 #\r
-#  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 #  \r
 #  This program and the accompanying materials                          \r
 #  are licensed and made available under the terms and conditions of the BSD License         \r
 #  which accompanies this distribution.  The full text of the license may be found at        \r
-#  http:#opensource.org/licenses/bsd-license.php                                            \r
+#  http://opensource.org/licenses/bsd-license.php\r
 #\r
 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
@@ -15,7 +15,6 @@
 #include <Base.h>\r
 #include <Library/PcdLib.h>\r
 #include <AutoGen.h>\r
-#.include AsmMacroIoLib.inc\r
 \r
 #include <Chipset/ArmCortexA9.h>\r
 \r
 .align 2\r
 \r
 GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
 \r
 # IN None\r
 # OUT r0 = SCU Base Address\r
@@ -68,4 +71,19 @@ _Return:
   ldmfd SP!, {r1-r2}\r
   bx lr\r
 \r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx   lr\r
+\r
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED \r
index 7326237bc731ee519fdf72f165b69072ac9c2299..7d00d115dc34bb3adf5eda89dd27aa12ae20d5c4 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
 //  \r
 //  This program and the accompanying materials                          \r
 //  are licensed and made available under the terms and conditions of the BSD License         \r
   INCLUDE AsmMacroIoLib.inc\r
 \r
   EXPORT    ArmGetCpuCountPerCluster\r
-    \r
+  EXPORT    ArmPlatformIsPrimaryCore\r
+\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
+\r
   AREA RTSMHelper, CODE, READONLY\r
 \r
 // IN None\r
 // OUT r0 = SCU Base Address\r
-ArmGetScuBaseAddress\r
+ArmGetScuBaseAddress FUNCTION\r
   // Read Configuration Base Address Register. ArmCBar cannot be called to get\r
   // the Configuration BAR as a stack is not necessary setup. The SCU is at the\r
   // offset 0x0000 from the Private Memory Region.\r
   mrc   p15, 4, r0, c15, c0, 0\r
   bx  lr\r
+  ENDFUNC\r
 \r
 // IN None\r
 // OUT r0 = number of cores present in the system\r
-ArmGetCpuCountPerCluster\r
+ArmGetCpuCountPerCluster FUNCTION\r
   stmfd SP!, {r1-r2}\r
 \r
   // Read CP15 MIDR\r
@@ -69,5 +74,22 @@ _Return
   add   r0, r0, #1\r
   ldmfd SP!, {r1-r2}\r
   bx lr\r
+  ENDFUNC\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx   lr\r
+  ENDFUNC\r
 \r
   END\r
index f055608abc90173f2e32e9c196fb19330cb98726..5cafda8365c95ba3df4dcea65ea98654c02d6387 100644 (file)
@@ -97,7 +97,7 @@ ArmPlatformInitialize (
   IN  UINTN                     MpId\r
   )\r
 {\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index 228a0fb0f830c2a06d34a3dc90fe63787d37dcaf..a671f130f21686c8b91313829b9ffb39981dfb0c 100644 (file)
@@ -36,7 +36,7 @@ ArmPlatformSecTrustzoneInit (
   )\r
 {\r
   // Nothing to do\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return;\r
   }\r
 \r
@@ -120,7 +120,7 @@ ArmPlatformSecInitialize (
   )\r
 {\r
   // If it is not the primary core then there is nothing to do\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.S b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.S
deleted file mode 100644 (file)
index f47a531..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#\r
-#  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
-#  \r
-#  This program and the accompanying materials                          \r
-#  are licensed and made available under the terms and conditions of the BSD License         \r
-#  which accompanies this distribution.  The full text of the license may be found at        \r
-#  http:#opensource.org/licenses/bsd-license.php                                            \r
-#\r
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-#\r
-#\r
-\r
-#include <AsmMacroIoLib.h>\r
-#include <Base.h>\r
-#include <Library/PcdLib.h>\r
-#include <AutoGen.h>\r
-#.include AsmMacroIoLib.inc\r
-\r
-#include <Chipset/ArmCortexA9.h>\r
-\r
-.text\r
-.align 2\r
-\r
-GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)\r
-\r
-# IN None\r
-# OUT r0 = SCU Base Address\r
-ASM_PFX(ArmGetScuBaseAddress):\r
-  # Read Configuration Base Address Register. ArmCBar cannot be called to get\r
-  # the Configuration BAR as a stack is not necessary setup. The SCU is at the\r
-  # offset 0x0000 from the Private Memory Region.\r
-  mrc   p15, 4, r0, c15, c0, 0\r
-  bx  lr\r
-\r
-# IN None\r
-# OUT r0 = number of cores present in the system\r
-ASM_PFX(ArmGetCpuCountPerCluster):\r
-  stmfd SP!, {r1-r2}\r
-\r
-  # Read CP15 MIDR\r
-  mrc   p15, 0, r1, c0, c0, 0\r
-\r
-  # Check if the CPU is A15\r
-  mov   r1, r1, LSR #4\r
-  LoadConstantToReg (ARM_CPU_TYPE_MASK, r0)\r
-  and   r1, r1, r0\r
-\r
-  LoadConstantToReg (ARM_CPU_TYPE_A15, r0)\r
-  cmp   r1, r0\r
-  beq   _Read_cp15_reg\r
-\r
-_CPU_is_not_A15:\r
-  mov   r2, lr                           @ Save link register\r
-  bl    ArmGetScuBaseAddress             @ Read SCU Base Address\r
-  mov   lr, r2                           @ Restore link register val\r
-  ldr   r0, [r0, #A9_SCU_CONFIG_OFFSET]     @ Read SCU Config reg to get CPU count\r
-  b     _Return\r
-\r
-_Read_cp15_reg:\r
-  mrc   p15, 1, r0, c9, c0, 2            @ Read C9 register of CP15 to get CPU count\r
-  lsr   r0, #24\r
-\r
-_Return:\r
-  and   r0, r0, #3\r
-  # Add '1' to the number of CPU on the Cluster\r
-  add   r0, r0, #1\r
-  ldmfd SP!, {r1-r2}\r
-  bx lr\r
-\r
-ASM_FUNCTION_REMOVE_IF_UNREFERENCED \r
diff --git a/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.asm b/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressSecLibRTSM/Arm/RTSMHelper.asm
deleted file mode 100644 (file)
index 402db58..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-//\r
-//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
-//  \r
-//  This program and the accompanying materials                          \r
-//  are licensed and made available under the terms and conditions of the BSD License         \r
-//  which accompanies this distribution.  The full text of the license may be found at        \r
-//  http://opensource.org/licenses/bsd-license.php                                            \r
-//\r
-//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-//\r
-//\r
-\r
-#include <AsmMacroIoLib.h>\r
-#include <Base.h>\r
-#include <Library/PcdLib.h>\r
-\r
-#include <Chipset/ArmCortexA9.h>\r
-\r
-#include <AutoGen.h>\r
-\r
-  INCLUDE AsmMacroIoLib.inc\r
-\r
-  EXPORT    ArmGetCpuCountPerCluster\r
-    \r
-  AREA RTSMHelper, CODE, READONLY\r
-\r
-// IN None\r
-// OUT r0 = SCU Base Address\r
-ArmGetScuBaseAddress\r
-  // Read Configuration Base Address Register. ArmCBar cannot be called to get\r
-  // the Configuration BAR as a stack is not necessary setup. The SCU is at the\r
-  // offset 0x0000 from the Private Memory Region.\r
-  mrc   p15, 4, r0, c15, c0, 0\r
-  bx  lr\r
-\r
-// IN None\r
-// OUT r0 = number of cores present in the system\r
-ArmGetCpuCountPerCluster\r
-  stmfd SP!, {r1-r2}\r
-\r
-  // Read CP15 MIDR\r
-  mrc   p15, 0, r1, c0, c0, 0\r
-\r
-  // Check if the CPU is A15\r
-  mov   r1, r1, LSR #4\r
-  mov   r0, #ARM_CPU_TYPE_MASK\r
-  and   r1, r1, r0\r
-\r
-  mov   r0, #ARM_CPU_TYPE_A15\r
-  cmp   r1, r0\r
-  beq   _Read_cp15_reg\r
-\r
-_CPU_is_not_A15\r
-  mov   r2, lr                              ; Save link register\r
-  bl    ArmGetScuBaseAddress                ; Read SCU Base Address\r
-  mov   lr, r2                              ; Restore link register val\r
-  ldr   r0, [r0, #A9_SCU_CONFIG_OFFSET]     ; Read SCU Config reg to get CPU count\r
-  b     _Return\r
-\r
-_Read_cp15_reg\r
-  mrc   p15, 1, r0, c9, c0, 2            ; Read C9 register of CP15 to get CPU count\r
-  lsr   r0, #24\r
-\r
-\r
-_Return\r
-  and   r0, r0, #3\r
-  // Add '1' to the number of CPU on the Cluster\r
-  add   r0, r0, #1\r
-  ldmfd SP!, {r1-r2}\r
-  bx lr\r
-\r
-  END\r
index ff8476718f3b24fc1d1226b3ca8d6b3ec7b1956e..f1e29ff01b6efcc0dbfa42cd1b682f86b3fad2fc 100644 (file)
@@ -37,8 +37,6 @@
 [Sources.ARM]\r
   Arm/RTSMBoot.asm     | RVCT\r
   Arm/RTSMBoot.S       | GCC\r
-  Arm/RTSMHelper.asm   | RVCT\r
-  Arm/RTSMHelper.S     | GCC\r
 \r
 [FeaturePcd]\r
   gEmbeddedTokenSpaceGuid.PcdCacheEnable\r
index 92df56cd575040874faf116864df694d71a2174b..bce834eea93f501d211387fb6986f1c033c1f8df 100644 (file)
@@ -50,7 +50,7 @@ ArmPlatformSecInitialize (
   )\r
 {\r
   // If it is not the primary core then there is nothing to do\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index 4ea1445e18f99ca785d86278ef4c2f5767731d4b..b58ddd5d3fa59307ecd8b6b5134d257cfc5d744d 100644 (file)
@@ -40,11 +40,35 @@ typedef struct {
   UINT64                       NumberOfBytes;\r
 } ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR;\r
 \r
+/**\r
+  Return the core position from the value of its MpId register\r
+\r
+  This function returns the core position from the position 0 in the processor.\r
+  This function might be called from assembler before any stack is set.\r
+\r
+  @return   Return the core position\r
+\r
+**/\r
 UINTN\r
 ArmPlatformGetCorePosition (\r
   IN UINTN MpId\r
   );\r
 \r
+/**\r
+  Return a non-zero value if the callee is the primary core\r
+\r
+  This function returns a non-zero value if the callee is the primary core.\r
+  The primary core is the core responsible to initialize the hardware and run UEFI.\r
+  This function might be called from assembler before any stack is set.\r
+\r
+  @return   Return a non-zero value if the callee is the primary core.\r
+\r
+**/\r
+UINTN\r
+ArmPlatformIsPrimaryCore (\r
+  IN UINTN MpId\r
+  );\r
+\r
 /**\r
   Return the current Boot Mode\r
 \r
index 286327956a3f223753f5c0b3dcf991dea09fccbc..47bf9c8946c15e4185f3f55d207041ebbce4c5be 100644 (file)
 //\r
 //\r
 \r
+#include <AsmMacroIoLib.h>\r
 #include <Library/ArmLib.h>\r
 \r
 .text \r
 .align 3\r
 \r
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)\r
+GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask)\r
 \r
 //UINTN\r
 //ArmPlatformGetCorePosition (\r
@@ -28,3 +33,18 @@ ASM_PFX(ArmPlatformGetCorePosition):
   add  r0, r1, r0, LSR #7\r
   bx   lr\r
 \r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
index 620562136ed6a20c8ed5b9ff02ec919d5fdc4c10..6d35182a275ccc03c7cf775493f1f14c61f81670 100644 (file)
   INCLUDE AsmMacroIoLib.inc\r
 \r
   EXPORT  ArmPlatformGetCorePosition\r
+  EXPORT  ArmPlatformIsPrimaryCore\r
 \r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCore\r
+  IMPORT  _gPcd_FixedAtBuild_PcdArmPrimaryCoreMask\r
+  \r
   PRESERVE8\r
   AREA    ArmPlatformNullHelper, CODE, READONLY\r
 \r
@@ -32,5 +36,21 @@ ArmPlatformGetCorePosition FUNCTION
   bx   lr\r
   ENDFUNC\r
 \r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r1)\r
+  ldr   r1, [r1]\r
+  and   r0, r0, r1\r
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r1)\r
+  ldr   r1, [r1]\r
+  cmp   r0, r1\r
+  moveq r0, #1\r
+  movne r0, #0\r
+  bx    lr\r
+  ENDFUNC\r
+\r
   END\r
 \r
index f3a7efcae0abde10c2fa74d85edd4537d3f31bd8..b45c11b4e142a362a4e09106799a4fdeb3fcba4d 100644 (file)
@@ -97,7 +97,7 @@ ArmPlatformInitialize (
   IN  UINTN                     MpId\r
   )\r
 {\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index 1a83882030f900ed1772a2edf8744cfb83d99203..41f4f74085081512ab2e341ce79c512443d65706 100644 (file)
@@ -29,7 +29,7 @@ ArmPlatformSecTrustzoneInit (
   )\r
 {\r
   // Secondary cores might have to set the Secure SGIs into the GICD_IGROUPR0\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return;\r
   }\r
 \r
@@ -49,7 +49,7 @@ ArmPlatformSecInitialize (
   )\r
 {\r
   // If it is not the primary core then there is nothing to do\r
-  if (!IS_PRIMARY_CORE(MpId)) {\r
+  if (!ArmPlatformIsPrimaryCore (MpId)) {\r
     return RETURN_SUCCESS;\r
   }\r
 \r
index 9e78d7eadfefa8cb1151a133b979a4fe77c497cb..f7c3ab214c14930df07a6fe810610c82c161bdd6 100755 (executable)
@@ -16,6 +16,7 @@
 \r
 #include <Library/ArmLib.h>\r
 #include <Library/ArmGicLib.h>\r
+#include <Library/ArmPlatformLib.h>\r
 #include <Library/ArmPlatformSecLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/PcdLib.h>\r
@@ -70,7 +71,7 @@ ArmPlatformSecExtraAction (
     // Warning: This code assumes the DRAM has already been initialized by ArmPlatformSecLib\r
     //\r
 \r
-    if (IS_PRIMARY_CORE(MpId)) {\r
+    if (ArmPlatformIsPrimaryCore (MpId)) {\r
       UINTN*   StartAddress = (UINTN*)PcdGet32(PcdFvBaseAddress);\r
 \r
       // Patch the DRAM to make an infinite loop at the start address\r
@@ -96,7 +97,7 @@ ArmPlatformSecExtraAction (
     // Warning: This code assumes the DRAM has already been initialized by ArmPlatformSecLib\r
     //\r
 \r
-    if (IS_PRIMARY_CORE(MpId)) {\r
+    if (ArmPlatformIsPrimaryCore (MpId)) {\r
       // Signal the secondary cores they can jump to PEI phase\r
       ArmGicSendSgiTo (PcdGet32(PcdGicDistributorBase), ARM_GIC_ICDSGIR_FILTER_EVERYONEELSE, 0x0E, PcdGet32 (PcdGicSgiIntId));\r
 \r
index 26afb34b23e266fbe196ae500d3b74da380f00f6..5a2d28876a6de1cef24efad427506473e49a5386 100755 (executable)
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
   ArmPkg/ArmPkg.dec\r
   ArmPlatformPkg/ArmPlatformPkg.dec\r
 \r
 [LibraryClasses]\r
+  ArmPlatformLib\r
   DebugLib\r
   PcdLib\r
   ArmGicLib\r
@@ -46,9 +48,6 @@
 \r
 [FixedPcd]\r
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
-  \r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
 \r
   gArmTokenSpaceGuid.PcdGicDistributorBase\r
   gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase\r
index f902a251c22c57f69183bbbfd5ee6936d9d1a9c7..1fb8570eb397c9399dabe037243de03118f54545 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 //  \r
 //  This program and the accompanying materials                          \r
 //  are licensed and made available under the terms and conditions of the BSD License         \r
@@ -20,6 +20,7 @@
 .align 3\r
 \r
 GCC_ASM_IMPORT(CEntryPoint)\r
+GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)\r
 GCC_ASM_IMPORT(ArmReadMpidr)\r
 GCC_ASM_EXPORT(_ModuleEntryPoint)\r
 \r
@@ -28,18 +29,19 @@ StartupAddr: .word    CEntryPoint
 ASM_PFX(_ModuleEntryPoint):\r
   // Identify CPU ID\r
   bl    ASM_PFX(ArmReadMpidr)\r
-  // Get ID of this CPU in Multicore system\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r5, r0, r1\r
-  \r
+  // Keep a copy of the MpId register value\r
+  mov   r5, r0\r
+\r
+  // Is it the Primary Core ?\r
+  bl    ASM_PFX(ArmPlatformIsPrimaryCore)\r
+\r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCoresStackBase), r1)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), r2)\r
   add   r1, r1, r2\r
 \r
-  // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r3)\r
-  cmp   r5, r3\r
+  // r0 is equal to 1 if I am the primary core\r
+  cmp   r0, #1\r
   beq   _SetupPrimaryCoreStack\r
 \r
 _SetupSecondaryCoreStack:\r
index a3dd1fb2c6e92e465bd3e7d4195db7d8e4dc83c8..3b756b492a565d21f185237954ad2dc1a2828749 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2011, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 //  \r
 //  This program and the accompanying materials                          \r
 //  are licensed and made available under the terms and conditions of the BSD License         \r
@@ -19,6 +19,7 @@
   INCLUDE AsmMacroIoLib.inc\r
   \r
   IMPORT  CEntryPoint\r
+  IMPORT  ArmPlatformIsPrimaryCore\r
   IMPORT  ArmReadMpidr\r
   EXPORT  _ModuleEntryPoint\r
   \r
@@ -30,18 +31,19 @@ StartupAddr        DCD      CEntryPoint
 _ModuleEntryPoint\r
   // Identify CPU ID\r
   bl    ArmReadMpidr\r
-  // Get ID of this CPU in Multicore system\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r5, r0, r1\r
+  // Keep a copy of the MpId register value\r
+  mov   r5, r0\r
   \r
+  // Is it the Primary Core ?\r
+  bl   ArmPlatformIsPrimaryCore\r
+\r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCoresStackBase), r1)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCorePrimaryStackSize), r2)\r
   add   r1, r1, r2\r
 \r
-  // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r3)\r
-  cmp   r5, r3\r
+  // r0 is equal to 1 if I am the primary core\r
+  cmp   r0, #1\r
   beq   _SetupPrimaryCoreStack\r
 \r
 _SetupSecondaryCoreStack\r
index fdd8697edfffaa407458dc7e1c838dc441afc47e..ececd4c763ab73ff8ec6a1b9baf8154e27ec4bd0 100644 (file)
@@ -93,7 +93,7 @@ CEntryPoint (
   //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 (IS_PRIMARY_CORE(MpId)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId)) {\r
     // Initialize the Debug Agent for Source Level Debugging\r
     InitializeDebugAgent (DEBUG_AGENT_INIT_POSTMEM_SEC, NULL, NULL);\r
     SaveAndSetDebugTimerInterrupt (TRUE);\r
index 91f9b3a784e2a60ab64bd227efb50d04da2e3c21..46584863367a90b67028aab148179e1e8fc9e715 100644 (file)
@@ -62,7 +62,6 @@
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
   gArmTokenSpaceGuid.PcdFvSize\r
 \r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
   gArmTokenSpaceGuid.PcdArmPrimaryCore\r
   gArmTokenSpaceGuid.PcdGicPrimaryCoreId\r
 \r
index bf590dbac068d5620de131555ffed0c98ab1f06b..13f86902b6792a464de53ae8768658f84c657964 100644 (file)
@@ -60,9 +60,6 @@
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
   gArmTokenSpaceGuid.PcdFvSize\r
 \r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
-\r
   gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase\r
   gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize\r
   gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize\r
index c0c20a920645f2603bcf8f1d5a3d50c4e915523d..da654c7a35c486839bdf766b419e78a2617094d2 100644 (file)
@@ -22,6 +22,7 @@
 .align 3\r
 \r
 GCC_ASM_IMPORT(CEntryPoint)\r
+GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)\r
 GCC_ASM_IMPORT(ArmReadMpidr)\r
 GCC_ASM_IMPORT(ArmPlatformStackSet)\r
 GCC_ASM_EXPORT(_ModuleEntryPoint)\r
@@ -32,8 +33,8 @@ StartupAddr: .word    CEntryPoint
 ASM_PFX(_ModuleEntryPoint):\r
   // Get ID of this CPU in Multicore system\r
   bl    ASM_PFX(ArmReadMpidr)\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r6, r0, r1\r
+  // Keep a copy of the MpId register value\r
+  mov   r6, r0\r
 \r
 _SetSVCMode:\r
   // Enter SVC mode, Disable FIQ and IRQ\r
@@ -118,8 +119,9 @@ _GetStackBase:
   bl   ASM_PFX(ArmPlatformStackSet)\r
 \r
   // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r4)\r
-  cmp   r6, r4\r
+  mov   r0, r6\r
+  bl    ASM_PFX(ArmPlatformIsPrimaryCore)\r
+  cmp   r0, #1\r
   bne   _PrepareArguments\r
 \r
 _ReserveGlobalVariable:\r
index 5efdb532af5beb1d423915d8ee443e1894c9c120..b78729fbc271d10dee7ce43b2ece85b60da77415 100644 (file)
@@ -21,6 +21,7 @@
   INCLUDE AsmMacroIoLib.inc\r
   \r
   IMPORT  CEntryPoint\r
+  IMPORT  ArmPlatformIsPrimaryCore\r
   IMPORT  ArmReadMpidr\r
   IMPORT  ArmPlatformStackSet\r
   \r
@@ -34,8 +35,8 @@ StartupAddr        DCD      CEntryPoint
 _ModuleEntryPoint\r
   // Get ID of this CPU in Multicore system\r
   bl    ArmReadMpidr\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r6, r0, r1\r
+  // Keep a copy of the MpId register value\r
+  mov   r6, r0\r
 \r
 _SetSVCMode\r
   // Enter SVC mode, Disable FIQ and IRQ\r
@@ -120,8 +121,9 @@ _GetStackBase
   bl   ArmPlatformStackSet\r
 \r
   // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r4)\r
-  cmp   r6, r4\r
+  mov   r0, r6\r
+  bl    ArmPlatformIsPrimaryCore\r
+  cmp   r0, #1\r
   bne   _PrepareArguments\r
 \r
 _ReserveGlobalVariable\r
index 3a3614192a70dc0c8c4d490bd72a3aeaaf9c71a3..359e7717ef1454f7f0b25a95ee674270d483ec3f 100755 (executable)
@@ -95,7 +95,6 @@
   \r
   gArmPlatformTokenSpaceGuid.PcdCoreCount\r
   gArmPlatformTokenSpaceGuid.PcdClusterCount\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
   gArmTokenSpaceGuid.PcdArmPrimaryCore\r
   gArmTokenSpaceGuid.PcdGicPrimaryCoreId\r
 \r
index 823a956074ffad5ea4525df15dffb8af5f01c519..dd6b82ed38db6ab7cea6947199fcf81844fb6c63 100755 (executable)
@@ -90,8 +90,6 @@
   \r
   gArmPlatformTokenSpaceGuid.PcdCoreCount\r
   gArmPlatformTokenSpaceGuid.PcdClusterCount\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
 \r
   gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize\r
   gEmbeddedTokenSpaceGuid.PcdPrePiCpuIoSize\r
index bdeb60d84c75420dd62261bb36fa760f2e017bb6..238b0989ab44ea50d58e20d77b429b215a4d4601 100755 (executable)
@@ -217,7 +217,7 @@ CEntryPoint (
   // Initialize the platform specific controllers\r
   ArmPlatformInitialize (MpId);\r
 \r
-  if (IS_PRIMARY_CORE(MpId) && PerformanceMeasurementEnabled ()) {\r
+  if (ArmPlatformIsPrimaryCore (MpId) && PerformanceMeasurementEnabled ()) {\r
     // Initialize the Timer Library to setup the Timer HW controller\r
     TimerConstructor ();\r
     // We cannot call yet the PerformanceLib because the HOB List has not been initialized\r
@@ -240,7 +240,7 @@ CEntryPoint (
 \r
   // Define the Global Variable region when we are not running in XIP\r
   if (!IS_XIP()) {\r
-    if (IS_PRIMARY_CORE(MpId)) {\r
+    if (ArmPlatformIsPrimaryCore (MpId)) {\r
       mGlobalVariableBase = GlobalVariableBase;\r
       if (ArmIsMpCore()) {\r
         // Signal the Global Variable Region is defined (event: ARM_CPU_EVENT_DEFAULT)\r
@@ -253,7 +253,7 @@ CEntryPoint (
   }\r
   \r
   // If not primary Jump to Secondary Main\r
-  if (IS_PRIMARY_CORE(MpId)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId)) {\r
     // Goto primary Main.\r
     PrimaryMain (UefiMemoryBase, StacksBase, GlobalVariableBase, StartTimeStamp);\r
   } else {\r
index 4eede5faba6ba517caefa3057c55f31e4b5d3faf..c99987d3a1c2ee557dede0c0ce7827480a54cfb2 100644 (file)
@@ -1,10 +1,10 @@
 #========================================================================================\r
-#  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 #  \r
 #  This program and the accompanying materials                          \r
 #  are licensed and made available under the terms and conditions of the BSD License         \r
 #  which accompanies this distribution.  The full text of the license may be found at        \r
-#  http:#opensource.org/licenses/bsd-license.php                                            \r
+#  http://opensource.org/licenses/bsd-license.php\r
 #\r
 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
index 92035a1ffe1bea7ad0342423f3ecf4c3119a7593..07fb71fdcc95b12d9c02b5bd23bb130e5d474cd8 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 //  \r
 //  This program and the accompanying materials                          \r
 //  are licensed and made available under the terms and conditions of the BSD License         \r
@@ -19,6 +19,7 @@
 .align 3\r
 \r
 GCC_ASM_IMPORT(CEntryPoint)\r
+GCC_ASM_IMPORT(ArmPlatformIsPrimaryCore)\r
 GCC_ASM_IMPORT(ArmPlatformSecBootAction)\r
 GCC_ASM_IMPORT(ArmPlatformSecBootMemoryInit)\r
 GCC_ASM_IMPORT(ArmDisableInterrupts)\r
@@ -45,13 +46,12 @@ ASM_PFX(_ModuleEntryPoint):
 _IdentifyCpu:\r
   // Identify CPU ID\r
   bl    ASM_PFX(ArmReadMpidr)\r
-  // Get ID of this CPU in Multicore system\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r5, r0, r1\r
+  // Keep a copy of the MpId register value\r
+  mov   r9, r0\r
   \r
   // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r3)\r
-  cmp   r5, r3\r
+  bl   ASM_PFX(ArmPlatformIsPrimaryCore)\r
+  cmp   r0, #1\r
   // Only the primary core initialize the memory (SMC)\r
   beq   _InitMem\r
   \r
@@ -74,9 +74,6 @@ _InitMem:
   // Initialize Init Boot Memory\r
   bl    ASM_PFX(ArmPlatformSecBootMemoryInit)\r
   \r
-  // Only Primary CPU could run this line (the secondary cores have jumped from _IdentifyCpu to _SetupStack)\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r5)\r
-\r
 _SetupPrimaryCoreStack:\r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)\r
@@ -97,7 +94,7 @@ _SetupSecondaryCoreStack:
   add   r1, r1, r2\r
 \r
   // Get the Core Position (ClusterId * 4) + CoreId\r
-  GetCorePositionFromMpId(r0, r5, r2)\r
+  GetCorePositionFromMpId(r0, r9, r2)\r
   // The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack\r
   add   r0, r0, #1\r
 \r
@@ -115,7 +112,7 @@ _PrepareArguments:
   // Jump to SEC C code\r
   //    r0 = mp_id\r
   //    r1 = Boot Mode\r
-  mov   r0, r5\r
+  mov   r0, r9\r
   mov   r1, r10\r
   blx   r3\r
   \r
index 9305e8e5291e59f10c343a23a892861ca96713aa..f89aefd2d6ec91c0227d2802f400a414ebf28b86 100644 (file)
@@ -1,5 +1,5 @@
 //\r
-//  Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
+//  Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
 //  \r
 //  This program and the accompanying materials                          \r
 //  are licensed and made available under the terms and conditions of the BSD License         \r
@@ -18,6 +18,7 @@
   INCLUDE AsmMacroIoLib.inc\r
   \r
   IMPORT  CEntryPoint\r
+  IMPORT  ArmPlatformIsPrimaryCore\r
   IMPORT  ArmPlatformSecBootAction\r
   IMPORT  ArmPlatformSecBootMemoryInit\r
   IMPORT  ArmDisableInterrupts\r
@@ -47,13 +48,12 @@ _ModuleEntryPoint FUNCTION
 _IdentifyCpu \r
   // Identify CPU ID\r
   bl    ArmReadMpidr\r
-  // Get ID of this CPU in Multicore system\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCoreMask), r1)\r
-  and   r5, r0, r1\r
+  // Keep a copy of the MpId register value\r
+  mov   r9, r0\r
   \r
   // Is it the Primary Core ?\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r3)\r
-  cmp   r5, r3\r
+  bl   ArmPlatformIsPrimaryCore\r
+  cmp   r0, #1\r
   // Only the primary core initialize the memory (SMC)\r
   beq   _InitMem\r
   \r
@@ -76,9 +76,6 @@ _InitMem
   // Initialize Init Boot Memory\r
   bl    ArmPlatformSecBootMemoryInit\r
   \r
-  // Only Primary CPU could run this line (the secondary cores have jumped from _IdentifyCpu to _SetupStack)\r
-  LoadConstantToReg (FixedPcdGet32(PcdArmPrimaryCore), r5)\r
-\r
 _SetupPrimaryCoreStack\r
   // Get the top of the primary stacks (and the base of the secondary stacks)\r
   LoadConstantToReg (FixedPcdGet32(PcdCPUCoresSecStackBase), r1)\r
@@ -99,7 +96,7 @@ _SetupSecondaryCoreStack
   add   r1, r1, r2\r
 \r
   // Get the Core Position (ClusterId * 4) + CoreId\r
-  GetCorePositionFromMpId(r0, r5, r2)\r
+  GetCorePositionFromMpId(r0, r9, r2)\r
   // The stack starts at the top of the stack region. Add '1' to the Core Position to get the top of the stack\r
   add   r0, r0, #1\r
 \r
@@ -117,7 +114,7 @@ _PrepareArguments
   // Jump to SEC C code\r
   //    r0 = mp_id\r
   //    r1 = Boot Mode\r
-  mov   r0, r5\r
+  mov   r0, r9\r
   mov   r1, r10\r
   blx   r3\r
   ENDFUNC\r
index 52fa53a6475ac28cef14194a4348078639a753cd..5282d68ec7d7daf05e60ddb52114aa06a1e98636 100644 (file)
@@ -56,7 +56,7 @@ CEntryPoint (
   ArmPlatformSecInitialize (MpId);\r
 \r
   // Primary CPU clears out the SCU tag RAMs, secondaries wait\r
-  if (IS_PRIMARY_CORE(MpId) && (SecBootMode == ARM_SEC_COLD_BOOT)) {\r
+  if (ArmPlatformIsPrimaryCore (MpId) && (SecBootMode == ARM_SEC_COLD_BOOT)) {\r
     if (ArmIsMpCore()) {\r
       // Signal for the initial memory is configured (event: BOOT_MEM_INIT)\r
       ArmCallSEV ();\r
@@ -108,7 +108,7 @@ CEntryPoint (
     // Enter Monitor Mode\r
     enter_monitor_mode ((UINTN)TrustedWorldInitialization, MpId, SecBootMode, (VOID*)(PcdGet32(PcdCPUCoresSecMonStackBase) + (PcdGet32(PcdCPUCoreSecMonStackSize) * (GET_CORE_POS(MpId) + 1))));\r
   } else {\r
-    if (IS_PRIMARY_CORE(MpId)) {\r
+    if (ArmPlatformIsPrimaryCore (MpId)) {\r
       SerialPrint ("Trust Zone Configuration is disabled\n\r");\r
     }\r
 \r
@@ -147,7 +147,7 @@ TrustedWorldInitialization (
 \r
   // Setup the Trustzone Chipsets\r
   if (SecBootMode == ARM_SEC_COLD_BOOT) {\r
-    if (IS_PRIMARY_CORE(MpId)) {\r
+    if (ArmPlatformIsPrimaryCore (MpId)) {\r
       if (ArmIsMpCore()) {\r
         // Signal the secondary core the Security settings is done (event: EVENT_SECURE_INIT)\r
         ArmCallSEV ();\r
index 3cf9f339e0abc8ef0e5d93c96a656ae3b6e3cf37..8e64a73142f4de223642e3a420909d76b3c0628a 100644 (file)
@@ -38,6 +38,7 @@
 [LibraryClasses]\r
   ArmCpuLib\r
   ArmLib\r
+  ArmPlatformLib\r
   ArmPlatformSecLib\r
   ArmTrustedMonitorLib\r
   BaseLib\r
   gArmTokenSpaceGuid.PcdArmNsacr\r
   gArmTokenSpaceGuid.PcdArmNonSecModeTransition\r
   \r
-  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask\r
-  gArmTokenSpaceGuid.PcdArmPrimaryCore\r
-  \r
   gArmTokenSpaceGuid.PcdSecureFvBaseAddress\r
   gArmTokenSpaceGuid.PcdSecureFvSize\r
   \r
   gArmTokenSpaceGuid.PcdFvBaseAddress\r
-  \r
+\r
   gArmPlatformTokenSpaceGuid.PcdCPUCoresSecStackBase\r
   gArmPlatformTokenSpaceGuid.PcdCPUCoreSecPrimaryStackSize\r
   gArmPlatformTokenSpaceGuid.PcdCPUCoreSecSecondaryStackSize\r
index eeaf40c0c893101248f6d4b47d4f87bf308e2742..255059af5fa171b1288855d8fa05c33842a814a3 100644 (file)
@@ -19,6 +19,7 @@
 #include <Base.h>\r
 #include <Library/ArmLib.h>\r
 #include <Library/ArmCpuLib.h>\r
+#include <Library/ArmPlatformLib.h>\r
 #include <Library/ArmPlatformSecLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/DebugLib.h>\r
diff --git a/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S b/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S
new file mode 100644 (file)
index 0000000..29c4b5e
--- /dev/null
@@ -0,0 +1,31 @@
+#\r
+#  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+#  \r
+#  This program and the accompanying materials                          \r
+#  are licensed and made available under the terms and conditions of the BSD License         \r
+#  which accompanies this distribution.  The full text of the license may be found at        \r
+#  http://opensource.org/licenses/bsd-license.php\r
+#\r
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+#\r
+#\r
+\r
+#include <AsmMacroIoLib.h>\r
+#include <AutoGen.h>\r
+\r
+.text\r
+.align 2\r
+\r
+GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ASM_PFX(ArmPlatformIsPrimaryCore):\r
+  // BeagleBoard has a single core. We must always return 1.\r
+  mov  r0, #1\r
+  bx   lr\r
+\r
+ASM_FUNCTION_REMOVE_IF_UNREFERENCED \r
diff --git a/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm b/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm
new file mode 100644 (file)
index 0000000..35115d0
--- /dev/null
@@ -0,0 +1,36 @@
+//\r
+//  Copyright (c) 2012, ARM Limited. All rights reserved.\r
+//  \r
+//  This program and the accompanying materials                          \r
+//  are licensed and made available under the terms and conditions of the BSD License         \r
+//  which accompanies this distribution.  The full text of the license may be found at        \r
+//  http://opensource.org/licenses/bsd-license.php                                            \r
+//\r
+//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+//\r
+//\r
+\r
+#include <AsmMacroIoLib.h>\r
+#include <Base.h>\r
+\r
+#include <AutoGen.h>\r
+\r
+  INCLUDE AsmMacroIoLib.inc\r
+\r
+  EXPORT    ArmPlatformIsPrimaryCore\r
+\r
+  AREA BeagleBoardHelper, CODE, READONLY\r
+\r
+//UINTN\r
+//ArmPlatformIsPrimaryCore (\r
+//  IN UINTN MpId\r
+//  );\r
+ArmPlatformIsPrimaryCore FUNCTION\r
+  // BeagleBoard has a single core. We must always return 1.\r
+  mov  r0, #1\r
+  bx   lr\r
+  ENDFUNC\r
+\r
+  END\r
+\r
index 7ca98c2bbb1260f90c850c336429b9f0a08be7fa..48fab7c66a413d19a127329f94210eca13e54e1c 100755 (executable)
@@ -39,6 +39,8 @@
   BeagleBoardMem.c\r
   PadConfiguration.c\r
   Clock.c\r
+  BeagleBoardHelper.S    | GCC\r
+  BeagleBoardHelper.asm  | RVCT\r
 \r
 [Protocols]\r
 \r