1/* 2 * Copyright (c) 2014-2020, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7#include <asm_macros.S> 8#include <lib/el3_runtime/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 */ 24func 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 30endfunc 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 */ 41func _cpu_data_by_index 42 mov_imm x1, CPU_DATA_SIZE 43 mul x0, x0, x1 44 adrp x1, percpu_data 45 add x1, x1, :lo12:percpu_data 46 add x0, x0, x1 47 ret 48endfunc _cpu_data_by_index 49