blob: f1cc6bebdecb0f396f9339bb239d7ffbfa66d147 [file] [log] [blame]
Andrew Thoelke65668f92014-03-20 10:48:23 +00001/*
Antonio Nino Diaz7c65c1e2017-04-20 09:58:28 +01002 * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
Andrew Thoelke65668f92014-03-20 10:48:23 +00003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Andrew Thoelke65668f92014-03-20 10:48:23 +00005 */
6
7#include <arch.h>
Andrew Thoelke65668f92014-03-20 10:48:23 +00008#include <asm_macros.S>
Soby Mathew49473e42015-06-10 13:49:59 +01009#include <assert_macros.S>
Dan Handleyed6ff952014-05-14 17:44:19 +010010#include <platform_def.h>
Andrew Thoelke65668f92014-03-20 10:48:23 +000011
Andrew Thoelke65668f92014-03-20 10:48:23 +000012 .local platform_normal_stacks
Soby Mathewb0082d22015-04-09 13:40:55 +010013 .weak plat_get_my_stack
14 .weak plat_set_my_stack
Soby Mathew70716d62015-07-13 16:26:11 +010015 .globl platform_get_stack
16 .globl platform_set_stack
Soby Mathew49473e42015-06-10 13:49:59 +010017
Soby Mathew70716d62015-07-13 16:26:11 +010018 /* ---------------------------------------------------------------------
19 * When the compatility layer is disabled, the new platform APIs
20 * viz plat_get_my_stack() and plat_set_my_stack() are
21 * supported by the platform and the previous APIs platform_get_stack()
22 * and platform_set_stack() are defined in terms of new APIs making use
23 * of the fact that they are only ever invoked for the current CPU.
24 * This is to enable components of Trusted Firmware like SPDs using the
25 * old platform APIs to continue to work.
26 * --------------------------------------------------------------------
27 */
28
Andrew Thoelke65668f92014-03-20 10:48:23 +000029 /* -----------------------------------------------------
Soby Mathewa0fedc42016-06-16 14:52:04 +010030 * uintptr_t plat_get_my_stack ()
Soby Mathewb0082d22015-04-09 13:40:55 +010031 *
32 * For the current CPU, this function returns the stack
33 * pointer for a stack allocated in device memory.
34 * -----------------------------------------------------
35 */
36func plat_get_my_stack
37 mov x10, x30 // lr
38 get_my_mp_stack platform_normal_stacks, PLATFORM_STACK_SIZE
39 ret x10
40endfunc plat_get_my_stack
41
42 /* -----------------------------------------------------
43 * void plat_set_my_stack ()
44 *
45 * For the current CPU, this function sets the stack
46 * pointer to a stack allocated in normal memory.
47 * -----------------------------------------------------
48 */
49func plat_set_my_stack
50 mov x9, x30 // lr
51 bl plat_get_my_stack
52 mov sp, x0
53 ret x9
54endfunc plat_set_my_stack
55
56 /* -----------------------------------------------------
Achin Gupta9c60d802014-06-26 11:12:37 +010057 * Per-cpu stacks in normal memory. Each cpu gets a
58 * stack of PLATFORM_STACK_SIZE bytes.
Andrew Thoelke65668f92014-03-20 10:48:23 +000059 * -----------------------------------------------------
60 */
61declare_stack platform_normal_stacks, tzfw_normal_stacks, \
Soby Mathewbfdbecf2016-06-09 17:16:35 +010062 PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT, \
63 CACHE_WRITEBACK_GRANULE