2 # Copyright (c) 2011-2013, ARM Limited. All rights reserved.
4 # This program and the accompanying materials
5 # are licensed and made available under the terms and conditions of the BSD License
6 # which accompanies this distribution. The full text of the license may be found at
7 # http://opensource.org/licenses/bsd-license.php
9 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 #include <AsmMacroIoLib.h>
15 #include <Library/ArmLib.h>
17 #include <Chipset/ArmCortexA9.h>
19 ASM_FUNC(ArmPlatformPeiBootAction)
23 # OUT r0 = SCU Base Address
24 ASM_FUNC(ArmGetScuBaseAddress)
25 # Read Configuration Base Address Register. ArmCBar cannot be called to get
26 # the Configuration BAR as a stack is not necessary setup. The SCU is at the
27 # offset 0x0000 from the Private Memory Region.
28 mrc p15, 4, r0, c15, c0, 0
32 //ArmPlatformGetPrimaryCoreMpId (
35 ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
36 MOV32 (r0, FixedPcdGet32 (PcdArmPrimaryCore))
40 # OUT r0 = number of cores present in the system
41 ASM_FUNC(ArmGetCpuCountPerCluster)
45 mrc p15, 0, r1, c0, c0, 0
47 # Check if the CPU is A15
49 MOV32 (r0, ARM_CPU_TYPE_MASK)
52 MOV32 (r0, ARM_CPU_TYPE_A15)
57 mov r2, lr @ Save link register
58 bl ArmGetScuBaseAddress @ Read SCU Base Address
59 mov lr, r2 @ Restore link register val
60 ldr r0, [r0, #A9_SCU_CONFIG_OFFSET] @ Read SCU Config reg to get CPU count
64 mrc p15, 1, r0, c9, c0, 2 @ Read C9 register of CP15 to get CPU count
69 # Add '1' to the number of CPU on the Cluster
75 //ArmPlatformIsPrimaryCore (
78 ASM_FUNC(ArmPlatformIsPrimaryCore)
79 MOV32 (r1, FixedPcdGet32 (PcdArmPrimaryCoreMask))
81 MOV32 (r1, FixedPcdGet32 (PcdArmPrimaryCore))
88 //ArmPlatformGetCorePosition (
91 ASM_FUNC(ArmPlatformGetCorePosition)
92 and r1, r0, #ARM_CORE_MASK
93 and r0, r0, #ARM_CLUSTER_MASK
94 add r0, r1, r0, LSR #7
97 ASM_FUNCTION_REMOVE_IF_UNREFERENCED