/* * Copyright (c) 2019 Carlo Caione * * SPDX-License-Identifier: Apache-2.0 */ #ifndef _MACRO_PRIV_INC_ #define _MACRO_PRIV_INC_ #include #ifdef _ASMLANGUAGE /* * Get CPU id */ .macro get_cpu_id xreg0 mrs \xreg0, mpidr_el1 /* FIMXME: aff3 not taken into consideration */ ubfx \xreg0, \xreg0, #0, #24 .endm /* * Get CPU logic id by looking up cpu_node_list * returns * xreg0: MPID * xreg1: logic id (0 ~ CONFIG_MP_MAX_NUM_CPUS - 1) * clobbers: xreg0, xreg1, xreg2, xreg3 */ .macro get_cpu_logic_id xreg0, xreg1, xreg2, xreg3 get_cpu_id \xreg0 ldr \xreg3, =cpu_node_list mov \xreg1, 0 1: ldr \xreg2, [\xreg3, \xreg1, lsl 3] cmp \xreg2, \xreg0 beq 2f add \xreg1, \xreg1, 1 cmp \xreg1, #CONFIG_MP_MAX_NUM_CPUS bne 1b b . 2: .endm /* * Get CPU pointer * Note: keep in sync with `arch_curr_cpu` in include/zephyr/arch/arm64/arch_inlines.h */ .macro get_cpu xreg0 mrs \xreg0, tpidrro_el0 and \xreg0, \xreg0, #TPIDRROEL0_CURR_CPU .endm #endif /* _ASMLANGUAGE */ #endif /* _MACRO_PRIV_INC_ */