1 /* 2 * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <asm_macros.S> 8 #include <cpu_data.h> 9 10 .globl init_cpu_data_ptr 11 .globl _cpu_data_by_index 12 13 /* ----------------------------------------------------------------- 14 * void init_cpu_data_ptr(void) 15 * 16 * Initialise the TPIDR_EL3 register to refer to the cpu_data_t 17 * for the calling CPU. This must be called before cm_get_cpu_data() 18 * 19 * This can be called without a valid stack. It assumes that 20 * plat_my_core_pos() does not clobber register x10. 21 * clobbers: x0, x1, x10 22 * ----------------------------------------------------------------- 23 */ 24 func init_cpu_data_ptr 25 mov x10, x30 26 bl plat_my_core_pos 27 bl _cpu_data_by_index 28 msr tpidr_el3, x0 29 ret x10 30 endfunc init_cpu_data_ptr 31 32 /* ----------------------------------------------------------------- 33 * cpu_data_t *_cpu_data_by_index(uint32_t cpu_index) 34 * 35 * Return the cpu_data structure for the CPU with given linear index 36 * 37 * This can be called without a valid stack. 38 * clobbers: x0, x1 39 * ----------------------------------------------------------------- 40 */ 41 func _cpu_data_by_index 42 mov_imm x1, CPU_DATA_SIZE 43 mul x0, x0, x1 44 adr x1, percpu_data 45 add x0, x0, x1 46 ret 47 endfunc _cpu_data_by_index 48