xref: /arm-trusted-firmware/plat/common/aarch64/platform_up_stack.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <arch.h>
8*91f16700Schasinglulu#include <asm_macros.S>
9*91f16700Schasinglulu#include <platform_def.h>
10*91f16700Schasinglulu
11*91f16700Schasinglulu
12*91f16700Schasinglulu	.local	platform_normal_stacks
13*91f16700Schasinglulu	.weak	plat_set_my_stack
14*91f16700Schasinglulu	.weak	plat_get_my_stack
15*91f16700Schasinglulu
16*91f16700Schasinglulu	/* -----------------------------------------------------
17*91f16700Schasinglulu	 * uintptr_t plat_get_my_stack ()
18*91f16700Schasinglulu	 *
19*91f16700Schasinglulu	 * For cold-boot BL images, only the primary CPU needs a
20*91f16700Schasinglulu	 * stack. This function returns the stack pointer for a
21*91f16700Schasinglulu	 * stack allocated in device memory.
22*91f16700Schasinglulu	 * -----------------------------------------------------
23*91f16700Schasinglulu	 */
24*91f16700Schasinglulufunc plat_get_my_stack
25*91f16700Schasinglulu	get_up_stack platform_normal_stacks, PLATFORM_STACK_SIZE
26*91f16700Schasinglulu	ret
27*91f16700Schasingluluendfunc plat_get_my_stack
28*91f16700Schasinglulu
29*91f16700Schasinglulu	/* -----------------------------------------------------
30*91f16700Schasinglulu	 * void plat_set_my_stack ()
31*91f16700Schasinglulu	 *
32*91f16700Schasinglulu	 * For cold-boot BL images, only the primary CPU needs a
33*91f16700Schasinglulu	 * stack. This function sets the stack pointer to a stack
34*91f16700Schasinglulu	 * allocated in normal memory.
35*91f16700Schasinglulu	 * -----------------------------------------------------
36*91f16700Schasinglulu	 */
37*91f16700Schasinglulufunc plat_set_my_stack
38*91f16700Schasinglulu	get_up_stack platform_normal_stacks, PLATFORM_STACK_SIZE
39*91f16700Schasinglulu	mov sp, x0
40*91f16700Schasinglulu	ret
41*91f16700Schasingluluendfunc plat_set_my_stack
42*91f16700Schasinglulu
43*91f16700Schasinglulu	/* -----------------------------------------------------
44*91f16700Schasinglulu	 * Single cpu stack in normal memory.
45*91f16700Schasinglulu	 * Used for C code during boot, PLATFORM_STACK_SIZE bytes
46*91f16700Schasinglulu	 * are allocated
47*91f16700Schasinglulu	 * -----------------------------------------------------
48*91f16700Schasinglulu	 */
49*91f16700Schasingluludeclare_stack platform_normal_stacks, .tzfw_normal_stacks, \
50*91f16700Schasinglulu		PLATFORM_STACK_SIZE, 1, CACHE_WRITEBACK_GRANULE
51