xref: /rk3399_ARM-atf/plat/mediatek/mt8183/aarch64/plat_helpers.S (revision c33aa45f4400bc7c09fed1300bc59e0e70d36bd8)
1*3fa9dec4Skenny liang/*
2*3fa9dec4Skenny liang * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*3fa9dec4Skenny liang *
4*3fa9dec4Skenny liang * SPDX-License-Identifier: BSD-3-Clause
5*3fa9dec4Skenny liang */
6*3fa9dec4Skenny liang
7*3fa9dec4Skenny liang#include <arch.h>
8*3fa9dec4Skenny liang#include <asm_macros.S>
9*3fa9dec4Skenny liang#include <platform_def.h>
10*3fa9dec4Skenny liang
11*3fa9dec4Skenny liang	.globl plat_is_my_cpu_primary
12*3fa9dec4Skenny liang	.globl plat_my_core_pos
13*3fa9dec4Skenny liang
14*3fa9dec4Skenny liangfunc plat_is_my_cpu_primary
15*3fa9dec4Skenny liang	mrs x0, mpidr_el1
16*3fa9dec4Skenny liang	and x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)
17*3fa9dec4Skenny liang	cmp x0, #PLAT_PRIMARY_CPU
18*3fa9dec4Skenny liang	cset x0, eq
19*3fa9dec4Skenny liang	ret
20*3fa9dec4Skenny liangendfunc plat_is_my_cpu_primary
21*3fa9dec4Skenny liang
22*3fa9dec4Skenny liang	/* -----------------------------------------------------
23*3fa9dec4Skenny liang	 * unsigned int plat_my_core_pos(void);
24*3fa9dec4Skenny liang	 *
25*3fa9dec4Skenny liang	 * result: CorePos = CoreId + (ClusterId << 2)
26*3fa9dec4Skenny liang	 * -----------------------------------------------------
27*3fa9dec4Skenny liang	 */
28*3fa9dec4Skenny liangfunc plat_my_core_pos
29*3fa9dec4Skenny liang	mrs     x0, mpidr_el1
30*3fa9dec4Skenny liang	and     x1, x0, #MPIDR_CPU_MASK
31*3fa9dec4Skenny liang	and     x0, x0, #MPIDR_CLUSTER_MASK
32*3fa9dec4Skenny liang	add     x0, x1, x0, LSR #6
33*3fa9dec4Skenny liang	ret
34*3fa9dec4Skenny liangendfunc plat_my_core_pos
35