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