xref: /optee_os/core/arch/arm/kernel/misc_a64.S (revision 5a913ee74d3c71af2a2860ce8a4e7aeab2916f9b)
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*
3 * Copyright (c) 2015, Linaro Limited
4 */
5
6#include <asm.S>
7#include <arm.h>
8#include <platform_config.h>
9
10/* size_t __get_core_pos(void); */
11FUNC __get_core_pos , :
12	mrs	x0, mpidr_el1
13	b get_core_pos_mpidr
14END_FUNC __get_core_pos
15
16/* size_t get_core_pos_mpidr(uint32_t mpidr); */
17FUNC get_core_pos_mpidr , :
18	/* Calculate CorePos = (ClusterId * (cores/cluster)) + CoreId */
19	and	x1, x0, #MPIDR_CPU_MASK
20	and	x0, x0, #MPIDR_CLUSTER_MASK
21	add	x0, x1, x0, LSR #(MPIDR_CLUSTER_SHIFT - CFG_CORE_CLUSTER_SHIFT)
22	ret
23END_FUNC get_core_pos_mpidr
24
25/* Let platforms override this if needed */
26.weak get_core_pos_mpidr
27