xref: /rk3399_ARM-atf/include/plat/arm/common/arm_def.h (revision b4315306ada18bac1c74f34db717d22fd5ff3003)
1*b4315306SDan Handley /*
2*b4315306SDan Handley  * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3*b4315306SDan Handley  *
4*b4315306SDan Handley  * Redistribution and use in source and binary forms, with or without
5*b4315306SDan Handley  * modification, are permitted provided that the following conditions are met:
6*b4315306SDan Handley  *
7*b4315306SDan Handley  * Redistributions of source code must retain the above copyright notice, this
8*b4315306SDan Handley  * list of conditions and the following disclaimer.
9*b4315306SDan Handley  *
10*b4315306SDan Handley  * Redistributions in binary form must reproduce the above copyright notice,
11*b4315306SDan Handley  * this list of conditions and the following disclaimer in the documentation
12*b4315306SDan Handley  * and/or other materials provided with the distribution.
13*b4315306SDan Handley  *
14*b4315306SDan Handley  * Neither the name of ARM nor the names of its contributors may be used
15*b4315306SDan Handley  * to endorse or promote products derived from this software without specific
16*b4315306SDan Handley  * prior written permission.
17*b4315306SDan Handley  *
18*b4315306SDan Handley  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*b4315306SDan Handley  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*b4315306SDan Handley  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*b4315306SDan Handley  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*b4315306SDan Handley  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*b4315306SDan Handley  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*b4315306SDan Handley  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*b4315306SDan Handley  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*b4315306SDan Handley  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*b4315306SDan Handley  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*b4315306SDan Handley  * POSSIBILITY OF SUCH DAMAGE.
29*b4315306SDan Handley  */
30*b4315306SDan Handley #ifndef __ARM_DEF_H__
31*b4315306SDan Handley #define __ARM_DEF_H__
32*b4315306SDan Handley 
33*b4315306SDan Handley #include <common_def.h>
34*b4315306SDan Handley #include <platform_def.h>
35*b4315306SDan Handley #include <xlat_tables.h>
36*b4315306SDan Handley 
37*b4315306SDan Handley 
38*b4315306SDan Handley /******************************************************************************
39*b4315306SDan Handley  * Definitions common to all ARM standard platforms
40*b4315306SDan Handley  *****************************************************************************/
41*b4315306SDan Handley 
42*b4315306SDan Handley /* Special value used to verify platform parameters from BL2 to BL3-1 */
43*b4315306SDan Handley #define ARM_BL31_PLAT_PARAM_VAL		0x0f1e2d3c4b5a6978ULL
44*b4315306SDan Handley 
45*b4315306SDan Handley #define ARM_CLUSTER_COUNT		2ull
46*b4315306SDan Handley 
47*b4315306SDan Handley #define ARM_CACHE_WRITEBACK_SHIFT	6
48*b4315306SDan Handley 
49*b4315306SDan Handley /* Memory location options for TSP */
50*b4315306SDan Handley #define ARM_TRUSTED_SRAM_ID		0
51*b4315306SDan Handley #define ARM_TRUSTED_DRAM_ID		1
52*b4315306SDan Handley #define ARM_DRAM_ID			2
53*b4315306SDan Handley 
54*b4315306SDan Handley /* The first 4KB of Trusted SRAM are used as shared memory */
55*b4315306SDan Handley #define ARM_TRUSTED_SRAM_BASE		0x04000000
56*b4315306SDan Handley #define ARM_SHARED_RAM_BASE		ARM_TRUSTED_SRAM_BASE
57*b4315306SDan Handley #define ARM_SHARED_RAM_SIZE		0x00001000	/* 4 KB */
58*b4315306SDan Handley 
59*b4315306SDan Handley /* The remaining Trusted SRAM is used to load the BL images */
60*b4315306SDan Handley #define ARM_BL_RAM_BASE			(ARM_SHARED_RAM_BASE +	\
61*b4315306SDan Handley 					 ARM_SHARED_RAM_SIZE)
62*b4315306SDan Handley #define ARM_BL_RAM_SIZE			(PLAT_ARM_TRUSTED_SRAM_SIZE -	\
63*b4315306SDan Handley 					 ARM_SHARED_RAM_SIZE)
64*b4315306SDan Handley 
65*b4315306SDan Handley /*
66*b4315306SDan Handley  * The top 16MB of DRAM1 is configured as secure access only using the TZC
67*b4315306SDan Handley  *   - SCP TZC DRAM: If present, DRAM reserved for SCP use
68*b4315306SDan Handley  *   - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use
69*b4315306SDan Handley  */
70*b4315306SDan Handley #define ARM_TZC_DRAM1_SIZE		MAKE_ULL(0x01000000)
71*b4315306SDan Handley 
72*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
73*b4315306SDan Handley 					 ARM_DRAM1_SIZE -		\
74*b4315306SDan Handley 					 ARM_SCP_TZC_DRAM1_SIZE)
75*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_SIZE		PLAT_ARM_SCP_TZC_DRAM1_SIZE
76*b4315306SDan Handley #define ARM_SCP_TZC_DRAM1_END		(ARM_SCP_TZC_DRAM1_BASE +	\
77*b4315306SDan Handley 					 ARM_SCP_TZC_DRAM1_SIZE - 1)
78*b4315306SDan Handley 
79*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
80*b4315306SDan Handley 					 ARM_DRAM1_SIZE -		\
81*b4315306SDan Handley 					 ARM_TZC_DRAM1_SIZE)
82*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_SIZE		(ARM_TZC_DRAM1_SIZE -		\
83*b4315306SDan Handley 					 ARM_SCP_TZC_DRAM1_SIZE)
84*b4315306SDan Handley #define ARM_AP_TZC_DRAM1_END		(ARM_AP_TZC_DRAM1_BASE +	\
85*b4315306SDan Handley 					 ARM_AP_TZC_DRAM1_SIZE - 1)
86*b4315306SDan Handley 
87*b4315306SDan Handley 
88*b4315306SDan Handley #define ARM_NS_DRAM1_BASE		ARM_DRAM1_BASE
89*b4315306SDan Handley #define ARM_NS_DRAM1_SIZE		(ARM_DRAM1_SIZE -		\
90*b4315306SDan Handley 					 ARM_TZC_DRAM1_SIZE)
91*b4315306SDan Handley #define ARM_NS_DRAM1_END		(ARM_NS_DRAM1_BASE +		\
92*b4315306SDan Handley 					 ARM_NS_DRAM1_SIZE - 1)
93*b4315306SDan Handley 
94*b4315306SDan Handley #define ARM_DRAM1_BASE			MAKE_ULL(0x80000000)
95*b4315306SDan Handley #define ARM_DRAM1_SIZE			MAKE_ULL(0x80000000)
96*b4315306SDan Handley #define ARM_DRAM1_END			(ARM_DRAM1_BASE +		\
97*b4315306SDan Handley 					 ARM_DRAM1_SIZE - 1)
98*b4315306SDan Handley 
99*b4315306SDan Handley #define ARM_DRAM2_BASE			MAKE_ULL(0x880000000)
100*b4315306SDan Handley #define ARM_DRAM2_SIZE			PLAT_ARM_DRAM2_SIZE
101*b4315306SDan Handley #define ARM_DRAM2_END			(ARM_DRAM2_BASE +		\
102*b4315306SDan Handley 					 ARM_DRAM2_SIZE - 1)
103*b4315306SDan Handley 
104*b4315306SDan Handley #define ARM_IRQ_SEC_PHY_TIMER		29
105*b4315306SDan Handley 
106*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_0		8
107*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_1		9
108*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_2		10
109*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_3		11
110*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_4		12
111*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_5		13
112*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_6		14
113*b4315306SDan Handley #define ARM_IRQ_SEC_SGI_7		15
114*b4315306SDan Handley 
115*b4315306SDan Handley #define ARM_SHARED_RAM_ATTR		((PLAT_ARM_SHARED_RAM_CACHED ?	\
116*b4315306SDan Handley 						MT_MEMORY : MT_DEVICE)	\
117*b4315306SDan Handley 						| MT_RW | MT_SECURE)
118*b4315306SDan Handley 
119*b4315306SDan Handley #define ARM_MAP_SHARED_RAM		MAP_REGION_FLAT(		\
120*b4315306SDan Handley 						ARM_SHARED_RAM_BASE,	\
121*b4315306SDan Handley 						ARM_SHARED_RAM_SIZE,	\
122*b4315306SDan Handley 						ARM_SHARED_RAM_ATTR)
123*b4315306SDan Handley 
124*b4315306SDan Handley #define ARM_MAP_NS_DRAM1		MAP_REGION_FLAT(		\
125*b4315306SDan Handley 						ARM_NS_DRAM1_BASE,	\
126*b4315306SDan Handley 						ARM_NS_DRAM1_SIZE,	\
127*b4315306SDan Handley 						MT_MEMORY | MT_RW | MT_NS)
128*b4315306SDan Handley 
129*b4315306SDan Handley #define ARM_MAP_TSP_SEC_MEM		MAP_REGION_FLAT(		\
130*b4315306SDan Handley 						TSP_SEC_MEM_BASE,	\
131*b4315306SDan Handley 						TSP_SEC_MEM_SIZE,	\
132*b4315306SDan Handley 						MT_MEMORY | MT_RW | MT_SECURE)
133*b4315306SDan Handley 
134*b4315306SDan Handley 
135*b4315306SDan Handley /*
136*b4315306SDan Handley  * The number of regions like RO(code), coherent and data required by
137*b4315306SDan Handley  * different BL stages which need to be mapped in the MMU.
138*b4315306SDan Handley  */
139*b4315306SDan Handley #if USE_COHERENT_MEM
140*b4315306SDan Handley #define ARM_BL_REGIONS			3
141*b4315306SDan Handley #else
142*b4315306SDan Handley #define ARM_BL_REGIONS			2
143*b4315306SDan Handley #endif
144*b4315306SDan Handley 
145*b4315306SDan Handley #define MAX_MMAP_REGIONS		(PLAT_ARM_MMAP_ENTRIES +	\
146*b4315306SDan Handley 					 ARM_BL_REGIONS)
147*b4315306SDan Handley 
148*b4315306SDan Handley /* Memory mapped Generic timer interfaces  */
149*b4315306SDan Handley #define ARM_SYS_CNTCTL_BASE		0x2a430000
150*b4315306SDan Handley #define ARM_SYS_CNTREAD_BASE		0x2a800000
151*b4315306SDan Handley #define ARM_SYS_TIMCTL_BASE		0x2a810000
152*b4315306SDan Handley 
153*b4315306SDan Handley #define ARM_CONSOLE_BAUDRATE		115200
154*b4315306SDan Handley 
155*b4315306SDan Handley /* TZC related constants */
156*b4315306SDan Handley #define ARM_TZC_BASE			0x2a4a0000
157*b4315306SDan Handley 
158*b4315306SDan Handley 
159*b4315306SDan Handley /******************************************************************************
160*b4315306SDan Handley  * Required platform porting definitions common to all ARM standard platforms
161*b4315306SDan Handley  *****************************************************************************/
162*b4315306SDan Handley 
163*b4315306SDan Handley #define ADDR_SPACE_SIZE			(1ull << 32)
164*b4315306SDan Handley 
165*b4315306SDan Handley #define PLATFORM_NUM_AFFS		(ARM_CLUSTER_COUNT + \
166*b4315306SDan Handley 					 PLATFORM_CORE_COUNT)
167*b4315306SDan Handley #define PLATFORM_MAX_AFFLVL		MPIDR_AFFLVL1
168*b4315306SDan Handley 
169*b4315306SDan Handley #define PLATFORM_CORE_COUNT		(PLAT_ARM_CLUSTER0_CORE_COUNT + \
170*b4315306SDan Handley 					 PLAT_ARM_CLUSTER1_CORE_COUNT)
171*b4315306SDan Handley 
172*b4315306SDan Handley /*
173*b4315306SDan Handley  * Some data must be aligned on the biggest cache line size in the platform.
174*b4315306SDan Handley  * This is known only to the platform as it might have a combination of
175*b4315306SDan Handley  * integrated and external caches.
176*b4315306SDan Handley  */
177*b4315306SDan Handley #define CACHE_WRITEBACK_GRANULE		(1 << ARM_CACHE_WRITEBACK_SHIFT)
178*b4315306SDan Handley 
179*b4315306SDan Handley #if !USE_COHERENT_MEM
180*b4315306SDan Handley /*
181*b4315306SDan Handley  * Size of the per-cpu data in bytes that should be reserved in the generic
182*b4315306SDan Handley  * per-cpu data structure for the ARM platform port.
183*b4315306SDan Handley  */
184*b4315306SDan Handley #define PLAT_PCPU_DATA_SIZE		2
185*b4315306SDan Handley #endif
186*b4315306SDan Handley 
187*b4315306SDan Handley 
188*b4315306SDan Handley /*******************************************************************************
189*b4315306SDan Handley  * BL1 specific defines.
190*b4315306SDan Handley  * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of
191*b4315306SDan Handley  * addresses.
192*b4315306SDan Handley  ******************************************************************************/
193*b4315306SDan Handley #define BL1_RO_BASE			PLAT_ARM_TRUSTED_ROM_BASE
194*b4315306SDan Handley #define BL1_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE	\
195*b4315306SDan Handley 					 + PLAT_ARM_TRUSTED_ROM_SIZE)
196*b4315306SDan Handley /*
197*b4315306SDan Handley  * Put BL1 RW at the top of the Trusted SRAM. BL1_RW_BASE is calculated using
198*b4315306SDan Handley  * the current BL1 RW debug size plus a little space for growth.
199*b4315306SDan Handley  */
200*b4315306SDan Handley #if TRUSTED_BOARD_BOOT
201*b4315306SDan Handley #define BL1_RW_BASE			(ARM_BL_RAM_BASE +		\
202*b4315306SDan Handley 						ARM_BL_RAM_SIZE -	\
203*b4315306SDan Handley 						0x8000)
204*b4315306SDan Handley #else
205*b4315306SDan Handley #define BL1_RW_BASE			(ARM_BL_RAM_BASE +		\
206*b4315306SDan Handley 						ARM_BL_RAM_SIZE -	\
207*b4315306SDan Handley 						0x6000)
208*b4315306SDan Handley #endif
209*b4315306SDan Handley #define BL1_RW_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
210*b4315306SDan Handley 
211*b4315306SDan Handley /*******************************************************************************
212*b4315306SDan Handley  * BL2 specific defines.
213*b4315306SDan Handley  ******************************************************************************/
214*b4315306SDan Handley /*
215*b4315306SDan Handley  * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug
216*b4315306SDan Handley  * size plus a little space for growth.
217*b4315306SDan Handley  */
218*b4315306SDan Handley #if TRUSTED_BOARD_BOOT
219*b4315306SDan Handley #define BL2_BASE			(BL31_BASE - 0x1C000)
220*b4315306SDan Handley #else
221*b4315306SDan Handley #define BL2_BASE			(BL31_BASE - 0xC000)
222*b4315306SDan Handley #endif
223*b4315306SDan Handley #define BL2_LIMIT			BL31_BASE
224*b4315306SDan Handley 
225*b4315306SDan Handley /*******************************************************************************
226*b4315306SDan Handley  * BL3-1 specific defines.
227*b4315306SDan Handley  ******************************************************************************/
228*b4315306SDan Handley /*
229*b4315306SDan Handley  * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the
230*b4315306SDan Handley  * current BL3-1 debug size plus a little space for growth.
231*b4315306SDan Handley  */
232*b4315306SDan Handley #define BL31_BASE			(ARM_BL_RAM_BASE +		\
233*b4315306SDan Handley 						ARM_BL_RAM_SIZE -	\
234*b4315306SDan Handley 						0x1D000)
235*b4315306SDan Handley #define BL31_PROGBITS_LIMIT		BL1_RW_BASE
236*b4315306SDan Handley #define BL31_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
237*b4315306SDan Handley 
238*b4315306SDan Handley /*******************************************************************************
239*b4315306SDan Handley  * BL3-2 specific defines.
240*b4315306SDan Handley  ******************************************************************************/
241*b4315306SDan Handley /*
242*b4315306SDan Handley  * On ARM standard platforms, the TSP can execute from Trusted SRAM,
243*b4315306SDan Handley  * Trusted DRAM (if available) or the DRAM region secured by the TrustZone
244*b4315306SDan Handley  * controller.
245*b4315306SDan Handley  */
246*b4315306SDan Handley #if ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_SRAM_ID
247*b4315306SDan Handley # define TSP_SEC_MEM_BASE		ARM_BL_RAM_BASE
248*b4315306SDan Handley # define TSP_SEC_MEM_SIZE		ARM_BL_RAM_SIZE
249*b4315306SDan Handley # define TSP_PROGBITS_LIMIT		BL2_BASE
250*b4315306SDan Handley # define BL32_BASE			ARM_BL_RAM_BASE
251*b4315306SDan Handley # define BL32_LIMIT			BL31_BASE
252*b4315306SDan Handley #elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID
253*b4315306SDan Handley # define TSP_SEC_MEM_BASE		PLAT_ARM_TRUSTED_DRAM_BASE
254*b4315306SDan Handley # define TSP_SEC_MEM_SIZE		PLAT_ARM_TRUSTED_DRAM_SIZE
255*b4315306SDan Handley # define BL32_BASE			PLAT_ARM_TRUSTED_DRAM_BASE
256*b4315306SDan Handley # define BL32_LIMIT			(PLAT_ARM_TRUSTED_DRAM_BASE	\
257*b4315306SDan Handley 						+ (1 << 21))
258*b4315306SDan Handley #elif ARM_TSP_RAM_LOCATION_ID == ARM_DRAM_ID
259*b4315306SDan Handley # define TSP_SEC_MEM_BASE		ARM_AP_TZC_DRAM1_BASE
260*b4315306SDan Handley # define TSP_SEC_MEM_SIZE		ARM_AP_TZC_DRAM1_SIZE
261*b4315306SDan Handley # define BL32_BASE			ARM_AP_TZC_DRAM1_BASE
262*b4315306SDan Handley # define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
263*b4315306SDan Handley 						ARM_AP_TZC_DRAM1_SIZE)
264*b4315306SDan Handley #else
265*b4315306SDan Handley # error "Unsupported ARM_TSP_RAM_LOCATION_ID value"
266*b4315306SDan Handley #endif
267*b4315306SDan Handley 
268*b4315306SDan Handley /*
269*b4315306SDan Handley  * ID of the secure physical generic timer interrupt used by the TSP.
270*b4315306SDan Handley  */
271*b4315306SDan Handley #define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER
272*b4315306SDan Handley 
273*b4315306SDan Handley 
274*b4315306SDan Handley #endif /* __ARM_DEF_H__ */
275