1/*
2 * Copyright (c) 2014-2019, 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
12	.local	platform_normal_stacks
13	.weak	plat_set_my_stack
14	.weak	plat_get_my_stack
15
16	/* -----------------------------------------------------
17	 * uintptr_t plat_get_my_stack ()
18	 *
19	 * For cold-boot BL images, only the primary CPU needs a
20	 * stack. This function returns the stack pointer for a
21	 * stack allocated in device memory.
22	 * -----------------------------------------------------
23	 */
24func plat_get_my_stack
25	get_up_stack platform_normal_stacks, PLATFORM_STACK_SIZE
26	ret
27endfunc plat_get_my_stack
28
29	/* -----------------------------------------------------
30	 * void plat_set_my_stack ()
31	 *
32	 * For cold-boot BL images, only the primary CPU needs a
33	 * stack. This function sets the stack pointer to a stack
34	 * allocated in normal memory.
35	 * -----------------------------------------------------
36	 */
37func plat_set_my_stack
38	get_up_stack platform_normal_stacks, PLATFORM_STACK_SIZE
39	mov sp, x0
40	ret
41endfunc plat_set_my_stack
42
43	/* -----------------------------------------------------
44	 * Single cpu stack in normal memory.
45	 * Used for C code during boot, PLATFORM_STACK_SIZE bytes
46	 * are allocated
47	 * -----------------------------------------------------
48	 */
49declare_stack platform_normal_stacks, tzfw_normal_stacks, \
50		PLATFORM_STACK_SIZE, 1, CACHE_WRITEBACK_GRANULE
51