/* * Copyright 2022-2023 NXP * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include .globl plat_is_my_cpu_primary .globl plat_my_core_pos .globl plat_calc_core_pos .globl platform_mem_init /* ------------------------------------------------------ * Helper macro that reads the part number of the current * CPU and jumps to the given label if it matches the CPU * MIDR provided. * * Clobbers x0. * ------------------------------------------------------ */ .macro jump_if_cpu_midr _cpu_midr, _label mrs x0, midr_el1 ubfx x0, x0, MIDR_PN_SHIFT, #12 cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) b.eq \_label .endm /* ---------------------------------------------- * unsigned int plat_is_my_cpu_primary(void); * This function checks if this is the primary CPU * ---------------------------------------------- */ func plat_is_my_cpu_primary mrs x0, mpidr_el1 mov_imm x1, MPIDR_AFFINITY_MASK and x0, x0, x1 cmp x0, #PLAT_PRIMARY_CPU cset x0, eq ret endfunc plat_is_my_cpu_primary /* ---------------------------------------------- * unsigned int plat_my_core_pos(void) * This function uses the plat_calc_core_pos() * to get the index of the calling CPU. * ---------------------------------------------- */ func plat_my_core_pos mrs x0, mpidr_el1 mov x1, #MPIDR_AFFLVL_MASK and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT ret endfunc plat_my_core_pos /* * unsigned int plat_calc_core_pos(uint64_t mpidr) * helper function to calculate the core position. * With this function. */ func plat_calc_core_pos mov x1, #MPIDR_AFFLVL_MASK and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT ret endfunc plat_calc_core_pos func platform_mem_init ret endfunc platform_mem_init