Home | History | Annotate | Download | only in AArch64
      1 #/**
      2 #
      3 #  Copyright (c) 2011-2013, ARM Limited. All rights reserved.<BR>
      4 #  Copyright (c) 2014 - 2016, AMD Inc. All rights reserved.<BR>
      5 #
      6 #  This program and the accompanying materials
      7 #  are licensed and made available under the terms and conditions of the BSD License
      8 #  which accompanies this distribution.  The full text of the license may be found at
      9 #  http://opensource.org/licenses/bsd-license.php
     10 #
     11 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 #
     14 #**/
     15 #/**
     16 #  Derived from:
     17 #   ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/RTSMHelper.S
     18 #
     19 #**/
     20 #include <AsmMacroIoLibV8.h>
     21 #include <Library/ArmLib.h>
     22 
     23 PrimaryCoreMpid:  .word    0x0
     24 PrimaryCoreBoot:  .word    0x0
     25 
     26 //VOID
     27 //ArmPlatformPeiBootAction (
     28 //  VOID
     29 //  );
     30 ASM_FUNC(ArmPlatformPeiBootAction)
     31   ldr  w0, PrimaryCoreBoot
     32   cbnz w0, 1f
     33 
     34   // Save the primary CPU MPID
     35   mrs  x0, mpidr_el1
     36   adr  x2, PrimaryCoreMpid
     37   mov  w1, #1
     38   stp  w0, w1, [x2]
     39 1:
     40   ret
     41 
     42 //UINTN
     43 //ArmPlatformGetPrimaryCoreMpId (
     44 //  VOID
     45 //  );
     46 ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
     47   ldr   w0, PrimaryCoreMpid
     48   ret
     49 
     50 # IN None
     51 # OUT x0 = number of cores present in the system
     52 ASM_FUNC(ArmGetCpuCountPerCluster)
     53   MOV32 (w0, FixedPcdGet32 (PcdCoreCount))
     54   ret
     55 
     56 //UINTN
     57 //ArmPlatformIsPrimaryCore (
     58 //  IN UINTN MpId
     59 //  );
     60 ASM_FUNC(ArmPlatformIsPrimaryCore)
     61   ldr   w1, PrimaryCoreMpid
     62 
     63   cmp   w0, w1
     64   cset  x0, eq
     65   ret
     66 
     67 //UINTN
     68 //ArmPlatformGetCorePosition (
     69 //  IN UINTN MpId
     70 //  );
     71 // With this function: CorePos = (ClusterId * 2) + CoreId
     72 ASM_FUNC(ArmPlatformGetCorePosition)
     73   and   x1, x0, #ARM_CORE_MASK
     74   and   x0, x0, #ARM_CLUSTER_MASK
     75   add   x0, x1, x0, LSR #7
     76   ret
     77 
     78 ASM_FUNCTION_REMOVE_IF_UNREFERENCED
     79