• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2#  Copyright (c) 2011-2013, ARM Limited. All rights reserved.
3#  Copyright (c) 2016, Linaro Limited. All rights reserved.
4#
5#  This program and the accompanying materials
6#  are licensed and made available under the terms and conditions of the BSD License
7#  which accompanies this distribution.  The full text of the license may be found at
8#  http://opensource.org/licenses/bsd-license.php
9#
10#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12#
13#
14
15#include <AsmMacroIoLibV8.h>
16#include <Library/ArmLib.h>
17
18ASM_FUNC(ArmPlatformPeiBootAction)
19  ret
20
21//UINTN
22//ArmPlatformGetPrimaryCoreMpId (
23//  VOID
24//  );
25ASM_FUNC(ArmPlatformGetPrimaryCoreMpId)
26  MOV32  (w0, FixedPcdGet32 (PcdArmPrimaryCore))
27  ret
28
29//UINTN
30//ArmPlatformIsPrimaryCore (
31//  IN UINTN MpId
32//  );
33ASM_FUNC(ArmPlatformIsPrimaryCore)
34  mov   x0, #1
35  ret
36
37//UINTN
38//ArmPlatformGetCorePosition (
39//  IN UINTN MpId
40//  );
41// With this function: CorePos = (ClusterId * 4) + CoreId
42ASM_FUNC(ArmPlatformGetCorePosition)
43  and   x1, x0, #ARM_CORE_MASK
44  and   x0, x0, #ARM_CLUSTER_MASK
45  add   x0, x1, x0, LSR #6
46  ret
47
48//EFI_PHYSICAL_ADDRESS
49//GetPhysAddrTop (
50//  VOID
51//  );
52ASM_FUNC(ArmGetPhysAddrTop)
53  mrs   x0, id_aa64mmfr0_el1
54  adr   x1, .LPARanges
55  and   x0, x0, #7
56  ldrb  w1, [x1, x0]
57  mov   x0, #1
58  lsl   x0, x0, x1
59  ret
60
61//
62// Bits 0..2 of the AA64MFR0_EL1 system register encode the size of the
63// physical address space support on this CPU:
64// 0 == 32 bits, 1 == 36 bits, etc etc
65// 6 and 7 are reserved
66//
67.LPARanges:
68  .byte 32, 36, 40, 42, 44, 48, -1, -1
69
70ASM_FUNCTION_REMOVE_IF_UNREFERENCED
71