xref: /rk3399_ARM-atf/include/plat/arm/common/arm_spm_def.h (revision 2e4a509ddee2b8f5aa0a5e7a825394bff7fc8a0f)
1e29efeb1SAntonio Nino Diaz /*
2e29efeb1SAntonio Nino Diaz  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3e29efeb1SAntonio Nino Diaz  *
4e29efeb1SAntonio Nino Diaz  * SPDX-License-Identifier: BSD-3-Clause
5e29efeb1SAntonio Nino Diaz  */
6e29efeb1SAntonio Nino Diaz #ifndef __ARM_SPM_DEF_H__
7e29efeb1SAntonio Nino Diaz #define __ARM_SPM_DEF_H__
8e29efeb1SAntonio Nino Diaz 
9e29efeb1SAntonio Nino Diaz #include <arm_def.h>
10e29efeb1SAntonio Nino Diaz #include <utils_def.h>
11e29efeb1SAntonio Nino Diaz #include <xlat_tables_defs.h>
12e29efeb1SAntonio Nino Diaz 
13e29efeb1SAntonio Nino Diaz /*
14e29efeb1SAntonio Nino Diaz  * If BL31 is placed in DRAM, place the Secure Partition in DRAM right after the
15e29efeb1SAntonio Nino Diaz  * region used by BL31. If BL31 it is placed in SRAM, put the Secure Partition
16e29efeb1SAntonio Nino Diaz  * at the base of DRAM.
17e29efeb1SAntonio Nino Diaz  */
18e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_BASE		BL32_BASE
19e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_LIMIT		BL32_LIMIT
20e29efeb1SAntonio Nino Diaz /* The maximum size of the S-EL0 payload can be 3MB */
21e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_SIZE		ULL(0x300000)
22e29efeb1SAntonio Nino Diaz 
23e29efeb1SAntonio Nino Diaz #ifdef IMAGE_BL2
24e29efeb1SAntonio Nino Diaz /* SPM Payload memory. Mapped as RW in BL2. */
25e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_MMAP		MAP_REGION_FLAT(			\
26e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_BASE,		\
27e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_SIZE,		\
28e29efeb1SAntonio Nino Diaz 						MT_MEMORY | MT_RW | MT_SECURE)
29e29efeb1SAntonio Nino Diaz #endif
30e29efeb1SAntonio Nino Diaz #ifdef IMAGE_BL31
31e29efeb1SAntonio Nino Diaz /* SPM Payload memory. Mapped as code in S-EL1 */
32e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_MMAP		MAP_REGION2(				\
33e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_BASE,		\
34e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_BASE,		\
35e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_SIZE,		\
36e29efeb1SAntonio Nino Diaz 						MT_CODE | MT_SECURE | MT_USER,	\
37e29efeb1SAntonio Nino Diaz 						PAGE_SIZE)
38e29efeb1SAntonio Nino Diaz #endif
39e29efeb1SAntonio Nino Diaz 
40e29efeb1SAntonio Nino Diaz /*
41e29efeb1SAntonio Nino Diaz  * Memory shared between EL3 and S-EL0. It is used by EL3 to push data into
42e29efeb1SAntonio Nino Diaz  * S-EL0, so it is mapped with RW permission from EL3 and with RO permission
43e29efeb1SAntonio Nino Diaz  * from S-EL0. Placed after SPM Payload memory.
44e29efeb1SAntonio Nino Diaz  */
45e29efeb1SAntonio Nino Diaz #define PLAT_SPM_BUF_BASE		(ARM_SP_IMAGE_BASE + ARM_SP_IMAGE_SIZE)
46e29efeb1SAntonio Nino Diaz #define PLAT_SPM_BUF_SIZE		ULL(0x100000)
47e29efeb1SAntonio Nino Diaz 
48e29efeb1SAntonio Nino Diaz #define ARM_SPM_BUF_EL3_MMAP		MAP_REGION_FLAT(			\
49e29efeb1SAntonio Nino Diaz 						PLAT_SPM_BUF_BASE,		\
50e29efeb1SAntonio Nino Diaz 						PLAT_SPM_BUF_SIZE,		\
51e29efeb1SAntonio Nino Diaz 						MT_RW_DATA | MT_SECURE)
52e29efeb1SAntonio Nino Diaz #define ARM_SPM_BUF_EL0_MMAP		MAP_REGION2(			\
53e29efeb1SAntonio Nino Diaz 						PLAT_SPM_BUF_BASE,		\
54e29efeb1SAntonio Nino Diaz 						PLAT_SPM_BUF_BASE,		\
55e29efeb1SAntonio Nino Diaz 						PLAT_SPM_BUF_SIZE,		\
56e29efeb1SAntonio Nino Diaz 						MT_RO_DATA | MT_SECURE | MT_USER,\
57e29efeb1SAntonio Nino Diaz 						PAGE_SIZE)
58e29efeb1SAntonio Nino Diaz 
59e29efeb1SAntonio Nino Diaz /*
60e29efeb1SAntonio Nino Diaz  * Memory shared between Normal world and S-EL0 for passing data during service
61e29efeb1SAntonio Nino Diaz  * requests. Mapped as RW and NS. Placed after the shared memory between EL3 and
62e29efeb1SAntonio Nino Diaz  * S-EL0.
63e29efeb1SAntonio Nino Diaz  */
64e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_NS_BUF_BASE	(PLAT_SPM_BUF_BASE + PLAT_SPM_BUF_SIZE)
65e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_NS_BUF_SIZE	ULL(0x10000)
66e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_NS_BUF_MMAP	MAP_REGION2(				\
67e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_NS_BUF_BASE,	\
68e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_NS_BUF_BASE,	\
69e29efeb1SAntonio Nino Diaz 						ARM_SP_IMAGE_NS_BUF_SIZE,	\
70e29efeb1SAntonio Nino Diaz 						MT_RW_DATA | MT_NS | MT_USER,	\
71e29efeb1SAntonio Nino Diaz 						PAGE_SIZE)
72e29efeb1SAntonio Nino Diaz 
73e29efeb1SAntonio Nino Diaz /*
74e29efeb1SAntonio Nino Diaz  * RW memory, which uses the remaining Trusted DRAM. Placed after the memory
75*2e4a509dSSughosh Ganu  * shared between Secure and Non-secure worlds, or after the platform specific
76*2e4a509dSSughosh Ganu  * buffers, if defined. First there is the stack memory for all CPUs and then
77*2e4a509dSSughosh Ganu  * there is the common heap memory. Both are mapped with RW permissions.
78e29efeb1SAntonio Nino Diaz  */
79*2e4a509dSSughosh Ganu #define PLAT_SP_IMAGE_STACK_BASE	PLAT_ARM_SP_IMAGE_STACK_BASE
80e29efeb1SAntonio Nino Diaz #define PLAT_SP_IMAGE_STACK_PCPU_SIZE	ULL(0x2000)
81e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_STACK_TOTAL_SIZE	(PLATFORM_CORE_COUNT *			\
82e29efeb1SAntonio Nino Diaz 					 PLAT_SP_IMAGE_STACK_PCPU_SIZE)
83e29efeb1SAntonio Nino Diaz 
84e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_HEAP_BASE		(PLAT_SP_IMAGE_STACK_BASE +		\
85e29efeb1SAntonio Nino Diaz 					 ARM_SP_IMAGE_STACK_TOTAL_SIZE)
86e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_HEAP_SIZE		(ARM_SP_IMAGE_LIMIT - ARM_SP_IMAGE_HEAP_BASE)
87e29efeb1SAntonio Nino Diaz 
88e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_RW_MMAP		MAP_REGION2(				\
89e29efeb1SAntonio Nino Diaz 						PLAT_SP_IMAGE_STACK_BASE,	\
90e29efeb1SAntonio Nino Diaz 						PLAT_SP_IMAGE_STACK_BASE,	\
91e29efeb1SAntonio Nino Diaz 						(ARM_SP_IMAGE_LIMIT -		\
92e29efeb1SAntonio Nino Diaz 						 PLAT_SP_IMAGE_STACK_BASE),	\
93e29efeb1SAntonio Nino Diaz 						MT_RW_DATA | MT_SECURE | MT_USER,\
94e29efeb1SAntonio Nino Diaz 						PAGE_SIZE)
95e29efeb1SAntonio Nino Diaz 
96e29efeb1SAntonio Nino Diaz /* Total number of memory regions with distinct properties */
97e29efeb1SAntonio Nino Diaz #define ARM_SP_IMAGE_NUM_MEM_REGIONS	6
98e29efeb1SAntonio Nino Diaz 
99e29efeb1SAntonio Nino Diaz /* Cookies passed to the Secure Partition at boot. Not used by ARM platforms. */
100e29efeb1SAntonio Nino Diaz #define PLAT_SPM_COOKIE_0		ULL(0)
101e29efeb1SAntonio Nino Diaz #define PLAT_SPM_COOKIE_1		ULL(0)
102e29efeb1SAntonio Nino Diaz 
103e29efeb1SAntonio Nino Diaz #endif /* __ARM_SPM_DEF_H__ */
104