1*4ddfb6f1SJacky Bai/* 2*4ddfb6f1SJacky Bai * Copyright 2022-2025 NXP. 3*4ddfb6f1SJacky Bai * 4*4ddfb6f1SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 5*4ddfb6f1SJacky Bai */ 6*4ddfb6f1SJacky Bai 7*4ddfb6f1SJacky Bai#include <asm_macros.S> 8*4ddfb6f1SJacky Bai#include <cortex_a55.h> 9*4ddfb6f1SJacky Bai 10*4ddfb6f1SJacky Bai#include <platform_def.h> 11*4ddfb6f1SJacky Bai 12*4ddfb6f1SJacky Bai .globl plat_is_my_cpu_primary 13*4ddfb6f1SJacky Bai .globl plat_my_core_pos 14*4ddfb6f1SJacky Bai .globl plat_calc_core_pos 15*4ddfb6f1SJacky Bai .globl plat_arm_calc_core_pos 16*4ddfb6f1SJacky Bai .globl platform_mem_init 17*4ddfb6f1SJacky Bai 18*4ddfb6f1SJacky Bai /* ---------------------------------------------- 19*4ddfb6f1SJacky Bai * unsigned int plat_is_my_cpu_primary(void); 20*4ddfb6f1SJacky Bai * This function checks if this is the primary CPU 21*4ddfb6f1SJacky Bai * ---------------------------------------------- 22*4ddfb6f1SJacky Bai */ 23*4ddfb6f1SJacky Baifunc plat_is_my_cpu_primary 24*4ddfb6f1SJacky Bai mrs x0, mpidr_el1 25*4ddfb6f1SJacky Bai mov_imm x1, MPIDR_AFFINITY_MASK 26*4ddfb6f1SJacky Bai and x0, x0, x1 27*4ddfb6f1SJacky Bai cmp x0, #PLAT_PRIMARY_CPU 28*4ddfb6f1SJacky Bai cset x0, eq 29*4ddfb6f1SJacky Bai ret 30*4ddfb6f1SJacky Baiendfunc plat_is_my_cpu_primary 31*4ddfb6f1SJacky Bai 32*4ddfb6f1SJacky Bai /* ---------------------------------------------- 33*4ddfb6f1SJacky Bai * unsigned int plat_my_core_pos(void) 34*4ddfb6f1SJacky Bai * This Function uses the plat_calc_core_pos() 35*4ddfb6f1SJacky Bai * to get the index of the calling CPU. 36*4ddfb6f1SJacky Bai * ---------------------------------------------- 37*4ddfb6f1SJacky Bai */ 38*4ddfb6f1SJacky Baifunc plat_my_core_pos 39*4ddfb6f1SJacky Bai mrs x0, mpidr_el1 40*4ddfb6f1SJacky Bai mov x1, #MPIDR_AFFLVL_MASK 41*4ddfb6f1SJacky Bai and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT 42*4ddfb6f1SJacky Bai ret 43*4ddfb6f1SJacky Baiendfunc plat_my_core_pos 44*4ddfb6f1SJacky Bai 45*4ddfb6f1SJacky Bai /* 46*4ddfb6f1SJacky Bai * unsigned int plat_calc_core_pos(uint64_t mpidr) 47*4ddfb6f1SJacky Bai * helper function to calculate the core position. 48*4ddfb6f1SJacky Bai * With this function. 49*4ddfb6f1SJacky Bai */ 50*4ddfb6f1SJacky Baifunc plat_calc_core_pos 51*4ddfb6f1SJacky Bai mov x1, #MPIDR_AFFLVL_MASK 52*4ddfb6f1SJacky Bai and x0, x1, x0, lsr #MPIDR_AFF1_SHIFT 53*4ddfb6f1SJacky Bai ret 54*4ddfb6f1SJacky Baiendfunc plat_calc_core_pos 55*4ddfb6f1SJacky Bai 56*4ddfb6f1SJacky Baifunc plat_arm_calc_core_pos 57*4ddfb6f1SJacky Bai b plat_core_pos_by_mpidr 58*4ddfb6f1SJacky Baiendfunc plat_arm_calc_core_pos 59*4ddfb6f1SJacky Bai 60*4ddfb6f1SJacky Baifunc platform_mem_init 61*4ddfb6f1SJacky Bai ret 62*4ddfb6f1SJacky Baiendfunc platform_mem_init 63