cpu_data.S 1.28 KB
Newer Older
1
/*
2
 * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
3
 *
dp-arm's avatar
dp-arm committed
4
 * SPDX-License-Identifier: BSD-3-Clause
5
6
7
 */

#include <asm_macros.S>
8
#include <lib/el3_runtime/cpu_data.h>
9
10
11
12
13
14
15
16
17
18

.globl	init_cpu_data_ptr
.globl	_cpu_data_by_index

/* -----------------------------------------------------------------
 * void init_cpu_data_ptr(void)
 *
 * Initialise the TPIDR_EL3 register to refer to the cpu_data_t
 * for the calling CPU. This must be called before cm_get_cpu_data()
 *
19
20
21
 * This can be called without a valid stack. It assumes that
 * plat_my_core_pos() does not clobber register x10.
 * clobbers: x0, x1, x10
22
23
24
25
 * -----------------------------------------------------------------
 */
func init_cpu_data_ptr
	mov	x10, x30
26
27
	bl	plat_my_core_pos
	bl	_cpu_data_by_index
28
29
	msr	tpidr_el3, x0
	ret	x10
30
endfunc init_cpu_data_ptr
31
32
33
34
35
36
37
38
39
40
41

/* -----------------------------------------------------------------
 * cpu_data_t *_cpu_data_by_index(uint32_t cpu_index)
 *
 * Return the cpu_data structure for the CPU with given linear index
 *
 * This can be called without a valid stack.
 * clobbers: x0, x1
 * -----------------------------------------------------------------
 */
func _cpu_data_by_index
42
43
	mov_imm	x1, CPU_DATA_SIZE
	mul	x0, x0, x1
44
	adr	x1, percpu_data
45
	add	x0, x0, x1
46
	ret
47
endfunc _cpu_data_by_index