Revision: 14937
          http://sourceforge.net/p/edk2/code/14937
Author:   oliviermartin
Date:     2013-12-06 16:11:34 +0000 (Fri, 06 Dec 2013)
Log Message:
-----------
ArmPlatformPkg: Fix and Implement ArmPlatformGetPrimaryCoreMpId

- Used correct PCD
- Implement the function for AArch64, BeagleBoard, CTA15A7

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <[email protected]>

Modified Paths:
--------------
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/AArch64/RTSMHelper.S
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
    
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
    trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S
    
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm
    trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S
    trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
    2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.S
    2013-12-06 16:11:34 UTC (rev 14937)
@@ -22,6 +22,7 @@
 GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
 
 ASM_PFX(ArmPlatformPeiBootAction):
   bx    lr
@@ -66,3 +67,23 @@
   movne r0, #0
   bx    lr
 
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
+  // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48
+  // with cpu_id[0:3] and cluster_id[4:7]
+  LoadConstantToReg (ARM_CTA15A7_SCC_CFGREG48, r0)
+  ldr   r0, [r0]
+  lsr   r0, #24
+
+  // Shift the SCC value to get the cluster ID at the offset #8
+  lsl   r1, r0, #4
+  and   r1, r1, #0xF00
+
+  // Keep only the cpu ID from the original SCC
+  and   r0, r0, #0x0F
+  // Add the Cluster ID to the Cpu ID
+  orr   r0, r0, r1
+  bx    lr

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
  2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA15-A7/CTA15-A7Helper.asm
  2013-12-06 16:11:34 UTC (rev 14937)
@@ -21,6 +21,7 @@
   EXPORT  ArmPlatformPeiBootAction
   EXPORT  ArmPlatformGetCorePosition
   EXPORT  ArmPlatformIsPrimaryCore
+  EXPORT  ArmPlatformGetPrimaryCoreMpId
 
   PRESERVE8
   AREA    CTA15A7Helper, CODE, READONLY
@@ -71,4 +72,26 @@
   bx    lr
   ENDFUNC
 
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ArmPlatformGetPrimaryCoreMpId FUNCTION
+  // Extract cpu_id and cluster_id from ARM_SCC_CFGREG48
+  // with cpu_id[0:3] and cluster_id[4:7]
+  LoadConstantToReg (ARM_CTA15A7_SCC_CFGREG48, r0)
+  ldr   r0, [r0]
+  lsr   r0, #24
+
+  // Shift the SCC value to get the cluster ID at the offset #8
+  lsl   r1, r0, #4
+  and   r1, r1, #0xF00
+
+  // Keep only the cpu ID from the original SCC
+  and   r0, r0, #0x0F
+  // Add the Cluster ID to the Cpu ID
+  orr   r0, r0, r1
+  bx    lr
+  ENDFUNC
+
   END

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
        2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.S
        2013-12-06 16:11:34 UTC (rev 14937)
@@ -19,6 +19,7 @@
 
 GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
 
 GCC_ASM_IMPORT(_gPcd_FixedAtBuild_PcdArmPrimaryCore)
@@ -29,7 +30,7 @@
 //  VOID
 //  );
 ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr   r0, [r0]
   bx    lr
 

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
      2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibCTA9x4/CTA9x4Helper.asm
      2013-12-06 16:11:34 UTC (rev 14937)
@@ -33,7 +33,7 @@
 //  VOID
 //  );
 ArmPlatformGetPrimaryCoreMpId FUNCTION
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr     r0, [r0]
   bx     lr
   ENDFUNC

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/AArch64/RTSMHelper.S
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/AArch64/RTSMHelper.S
    2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/AArch64/RTSMHelper.S
    2013-12-06 16:11:34 UTC (rev 14937)
@@ -22,6 +22,7 @@
 
 GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
 GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
 GCC_ASM_EXPORT(ArmGetCpuCountPerCluster)
 
@@ -32,6 +33,15 @@
 ASM_PFX(ArmPlatformPeiBootAction):
   ret
 
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, x0)
+  ldrh   w0, [x0]
+  ret
+
 # IN None
 # OUT x0 = number of cores present in the system
 ASM_PFX(ArmGetCpuCountPerCluster):

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
        2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.S
        2013-12-06 16:11:34 UTC (rev 14937)
@@ -49,7 +49,7 @@
 //  VOID
 //  );
 ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr   r0, [r0]
   bx    lr
 

Modified: 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
      2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/Arm/RTSMHelper.asm
      2013-12-06 16:11:34 UTC (rev 14937)
@@ -52,7 +52,7 @@
 //  VOID
 //  );
 ArmPlatformGetPrimaryCoreMpId FUNCTION
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr   r0, [r0]
   bx    lr
   ENDFUNC

Modified: 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S    
    2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.S    
    2013-12-06 16:11:34 UTC (rev 14937)
@@ -43,7 +43,7 @@
 //  VOID
 //  );
 ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr   r0, [r0]
   bx    lr
 

Modified: 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm
===================================================================
--- 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm  
    2013-12-06 09:24:47 UTC (rev 14936)
+++ 
trunk/edk2/ArmPlatformPkg/Library/ArmPlatformLibNull/Arm/ArmPlatformHelper.asm  
    2013-12-06 16:11:34 UTC (rev 14937)
@@ -47,7 +47,7 @@
 //  VOID
 //  );
 ArmPlatformGetPrimaryCoreMpId FUNCTION
-  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCoreMask, r0)
+  LoadConstantToReg (_gPcd_FixedAtBuild_PcdArmPrimaryCore, r0)
   ldr   r0, [r0]
   bx    lr
   ENDFUNC

Modified: trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S
===================================================================
--- trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S        
2013-12-06 09:24:47 UTC (rev 14936)
+++ trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.S        
2013-12-06 16:11:34 UTC (rev 14937)
@@ -18,8 +18,11 @@
 .align 2
 
 GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
+GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
 GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
 
+GCC_ASM_IMPORT(ArmReadMpidr)
+
 //UINTN
 //ArmPlatformIsPrimaryCore (
 //  IN UINTN MpId
@@ -32,4 +35,13 @@
 ASM_PFX(ArmPlatformPeiBootAction):
   bx    lr
 
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
+  // The BeagleBoard is a uniprocessor platform. The MPIDR of primary core is
+  // always the MPIDR of the calling CPU.
+  b    ASM_PFX(ArmReadMpidr)
+
 ASM_FUNCTION_REMOVE_IF_UNREFERENCED 

Modified: trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm
===================================================================
--- trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm      
2013-12-06 09:24:47 UTC (rev 14936)
+++ trunk/edk2/BeagleBoardPkg/Library/BeagleBoardLib/BeagleBoardHelper.asm      
2013-12-06 16:11:34 UTC (rev 14937)
@@ -20,7 +20,10 @@
 
   EXPORT    ArmPlatformPeiBootAction
   EXPORT    ArmPlatformIsPrimaryCore
+  EXPORT    ArmPlatformGetPrimaryCoreMpId
 
+  IMPORT       ArmReadMpidr
+
   AREA BeagleBoardHelper, CODE, READONLY
 
 //UINTN
@@ -37,4 +40,14 @@
   bx    lr
   ENDFUNC
 
+//UINTN
+//ArmPlatformGetPrimaryCoreMpId (
+//  VOID
+//  );
+ArmPlatformGetPrimaryCoreMpId FUNCTION
+  // The BeagleBoard is a uniprocessor platform. The MPIDR of primary core is
+  // always the MPIDR of the calling CPU.
+  b            ArmReadMpidr
+  ENDFUNC
+
   END

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Sponsored by Intel(R) XDK 
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to