1/*
2 * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <platform_def.h>
10
11	.weak	plat_get_my_stack
12	.weak	plat_set_my_stack
13
14	/* -----------------------------------------------------
15	 * uintptr_t plat_get_my_stack (u_register_t mpidr)
16	 *
17	 * For a given CPU, this function returns the stack
18	 * pointer for a stack allocated in device memory.
19	 * -----------------------------------------------------
20	 */
21func plat_get_my_stack
22	push	{r4, lr}
23	get_my_mp_stack platform_normal_stacks, PLATFORM_STACK_SIZE
24	pop	{r4, pc}
25endfunc	plat_get_my_stack
26
27	/* -----------------------------------------------------
28	 * void plat_set_my_stack ()
29	 *
30	 * For the current CPU, this function sets the stack
31	 * pointer to a stack allocated in normal memory.
32	 * -----------------------------------------------------
33	 */
34func plat_set_my_stack
35	mov	r4, lr
36	get_my_mp_stack platform_normal_stacks, PLATFORM_STACK_SIZE
37	mov	sp, r0
38	bx	r4
39endfunc plat_set_my_stack
40
41	/* -----------------------------------------------------
42	 * Per-cpu stacks in normal memory. Each cpu gets a
43	 * stack of PLATFORM_STACK_SIZE bytes.
44	 * -----------------------------------------------------
45	 */
46declare_stack platform_normal_stacks, tzfw_normal_stacks, \
47		PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT
48