blob: 9987a53276ab9e38c64a894d692038f47748439d [file] [log] [blame]
Jacky Bai8e2109d2023-05-25 09:35:44 +08001/*
2 * Copyright 2022-2023 NXP
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <asm_macros.S>
8#include <cortex_a55.h>
9
10#include <platform_def.h>
11
12 .globl plat_is_my_cpu_primary
13 .globl plat_my_core_pos
14 .globl plat_calc_core_pos
15 .globl platform_mem_init
16
17 /* ------------------------------------------------------
18 * Helper macro that reads the part number of the current
19 * CPU and jumps to the given label if it matches the CPU
20 * MIDR provided.
21 *
22 * Clobbers x0.
23 * ------------------------------------------------------
24 */
25 .macro jump_if_cpu_midr _cpu_midr, _label
26
27 mrs x0, midr_el1
28 ubfx x0, x0, MIDR_PN_SHIFT, #12
29 cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK)
30 b.eq \_label
31
32 .endm
33
34 /* ----------------------------------------------
35 * unsigned int plat_is_my_cpu_primary(void);
36 * This function checks if this is the primary CPU
37 * ----------------------------------------------
38 */
39func plat_is_my_cpu_primary
40 mrs x0, mpidr_el1
41 mov_imm x1, MPIDR_AFFINITY_MASK
42 and x0, x0, x1
43 cmp x0, #PLAT_PRIMARY_CPU
44 cset x0, eq
45 ret
46endfunc plat_is_my_cpu_primary
47
48 /* ----------------------------------------------
49 * unsigned int plat_my_core_pos(void)
50 * This function uses the plat_calc_core_pos()
51 * to get the index of the calling CPU.
52 * ----------------------------------------------
53 */
54func plat_my_core_pos
55 mrs x0, mpidr_el1
56 mov x1, #MPIDR_AFFLVL_MASK
57 and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT
58 ret
59endfunc plat_my_core_pos
60
61 /*
62 * unsigned int plat_calc_core_pos(uint64_t mpidr)
63 * helper function to calculate the core position.
64 * With this function.
65 */
66func plat_calc_core_pos
67 mov x1, #MPIDR_AFFLVL_MASK
68 and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT
69 ret
70endfunc plat_calc_core_pos
71
72func platform_mem_init
73 ret
74endfunc platform_mem_init