xref: /optee_os/core/arch/arm/kernel/misc_a64.S (revision f7859906faa00a29398cf4a9f5f703dbf310fb63)
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/* Let platforms override this if needed */
11.weak get_core_pos_mpidr
12
13/* size_t __get_core_pos(void); */
14FUNC __get_core_pos , :
15	mrs	x0, mpidr_el1
16	b get_core_pos_mpidr
17END_FUNC __get_core_pos
18
19/* size_t get_core_pos_mpidr(uint32_t mpidr); */
20FUNC get_core_pos_mpidr , :
21	/* Calculate CorePos = (ClusterId * (cores/cluster)) + CoreId */
22	and	x1, x0, #MPIDR_CPU_MASK
23	and	x0, x0, #MPIDR_CLUSTER_MASK
24	add	x0, x1, x0, LSR #(MPIDR_CLUSTER_SHIFT - CFG_CORE_CLUSTER_SHIFT)
25	ret
26END_FUNC get_core_pos_mpidr
27