Home | History | Annotate | Download | only in aarch64
      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