xref: /arm-trusted-firmware/include/plat/arm/common/arm_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2023, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu #ifndef ARM_DEF_H
7*91f16700Schasinglulu #define ARM_DEF_H
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #include <arch.h>
10*91f16700Schasinglulu #include <common/interrupt_props.h>
11*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h>
12*91f16700Schasinglulu #include <drivers/arm/gic_common.h>
13*91f16700Schasinglulu #include <lib/utils_def.h>
14*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_defs.h>
15*91f16700Schasinglulu #include <plat/arm/common/smccc_def.h>
16*91f16700Schasinglulu #include <plat/common/common_def.h>
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /******************************************************************************
19*91f16700Schasinglulu  * Definitions common to all ARM standard platforms
20*91f16700Schasinglulu  *****************************************************************************/
21*91f16700Schasinglulu 
22*91f16700Schasinglulu /*
23*91f16700Schasinglulu  * Root of trust key lengths
24*91f16700Schasinglulu  */
25*91f16700Schasinglulu #define ARM_ROTPK_HEADER_LEN		19
26*91f16700Schasinglulu #define ARM_ROTPK_HASH_LEN		32
27*91f16700Schasinglulu 
28*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */
29*91f16700Schasinglulu #define ARM_BL31_PLAT_PARAM_VAL		ULL(0x0f1e2d3c4b5a6978)
30*91f16700Schasinglulu 
31*91f16700Schasinglulu #define ARM_SYSTEM_COUNT		U(1)
32*91f16700Schasinglulu 
33*91f16700Schasinglulu #define ARM_CACHE_WRITEBACK_SHIFT	6
34*91f16700Schasinglulu 
35*91f16700Schasinglulu /*
36*91f16700Schasinglulu  * Macros mapping the MPIDR Affinity levels to ARM Platform Power levels. The
37*91f16700Schasinglulu  * power levels have a 1:1 mapping with the MPIDR affinity levels.
38*91f16700Schasinglulu  */
39*91f16700Schasinglulu #define ARM_PWR_LVL0		MPIDR_AFFLVL0
40*91f16700Schasinglulu #define ARM_PWR_LVL1		MPIDR_AFFLVL1
41*91f16700Schasinglulu #define ARM_PWR_LVL2		MPIDR_AFFLVL2
42*91f16700Schasinglulu #define ARM_PWR_LVL3		MPIDR_AFFLVL3
43*91f16700Schasinglulu 
44*91f16700Schasinglulu /*
45*91f16700Schasinglulu  *  Macros for local power states in ARM platforms encoded by State-ID field
46*91f16700Schasinglulu  *  within the power-state parameter.
47*91f16700Schasinglulu  */
48*91f16700Schasinglulu /* Local power state for power domains in Run state. */
49*91f16700Schasinglulu #define ARM_LOCAL_STATE_RUN	U(0)
50*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */
51*91f16700Schasinglulu #define ARM_LOCAL_STATE_RET	U(1)
52*91f16700Schasinglulu /* Local power state for OFF/power-down. Valid for CPU and cluster power
53*91f16700Schasinglulu    domains */
54*91f16700Schasinglulu #define ARM_LOCAL_STATE_OFF	U(2)
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /* Memory location options for TSP */
57*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_ID		0
58*91f16700Schasinglulu #define ARM_TRUSTED_DRAM_ID		1
59*91f16700Schasinglulu #define ARM_DRAM_ID			2
60*91f16700Schasinglulu 
61*91f16700Schasinglulu #ifdef PLAT_ARM_TRUSTED_SRAM_BASE
62*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_BASE		PLAT_ARM_TRUSTED_SRAM_BASE
63*91f16700Schasinglulu #else
64*91f16700Schasinglulu #define ARM_TRUSTED_SRAM_BASE		UL(0x04000000)
65*91f16700Schasinglulu #endif /* PLAT_ARM_TRUSTED_SRAM_BASE */
66*91f16700Schasinglulu 
67*91f16700Schasinglulu #define ARM_SHARED_RAM_BASE		ARM_TRUSTED_SRAM_BASE
68*91f16700Schasinglulu #define ARM_SHARED_RAM_SIZE		UL(0x00001000)	/* 4 KB */
69*91f16700Schasinglulu 
70*91f16700Schasinglulu /* The remaining Trusted SRAM is used to load the BL images */
71*91f16700Schasinglulu #define ARM_BL_RAM_BASE			(ARM_SHARED_RAM_BASE +	\
72*91f16700Schasinglulu 					 ARM_SHARED_RAM_SIZE)
73*91f16700Schasinglulu #define ARM_BL_RAM_SIZE			(PLAT_ARM_TRUSTED_SRAM_SIZE -	\
74*91f16700Schasinglulu 					 ARM_SHARED_RAM_SIZE)
75*91f16700Schasinglulu 
76*91f16700Schasinglulu /*
77*91f16700Schasinglulu  * The top 16MB (or 64MB if RME is enabled) of DRAM1 is configured as
78*91f16700Schasinglulu  * follows:
79*91f16700Schasinglulu  *   - SCP TZC DRAM: If present, DRAM reserved for SCP use
80*91f16700Schasinglulu  *   - L1 GPT DRAM: Reserved for L1 GPT if RME is enabled
81*91f16700Schasinglulu  *   - REALM DRAM: Reserved for Realm world if RME is enabled
82*91f16700Schasinglulu  *   - TF-A <-> RMM SHARED: Area shared for communication between TF-A and RMM
83*91f16700Schasinglulu  *   - Event Log: Area for Event Log if MEASURED_BOOT feature is enabled
84*91f16700Schasinglulu  *   - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use
85*91f16700Schasinglulu  *
86*91f16700Schasinglulu  *              RME enabled(64MB)                RME not enabled(16MB)
87*91f16700Schasinglulu  *              --------------------             -------------------
88*91f16700Schasinglulu  *              |                  |             |                 |
89*91f16700Schasinglulu  *              |  AP TZC (~28MB)  |             |  AP TZC (~14MB) |
90*91f16700Schasinglulu  *              --------------------             -------------------
91*91f16700Schasinglulu  *              |     Event Log    |             |     Event Log   |
92*91f16700Schasinglulu  *              |      (4KB)       |             |      (4KB)      |
93*91f16700Schasinglulu  *              --------------------             -------------------
94*91f16700Schasinglulu  *              |   REALM (RMM)    |             |                 |
95*91f16700Schasinglulu  *              |   (32MB - 4KB)   |             |  EL3 TZC (2MB)  |
96*91f16700Schasinglulu  *              --------------------             -------------------
97*91f16700Schasinglulu  *              |                  |             |                 |
98*91f16700Schasinglulu  *              |   TF-A <-> RMM   |             |    SCP TZC      |
99*91f16700Schasinglulu  *              |   SHARED (4KB)   |  0xFFFF_FFFF-------------------
100*91f16700Schasinglulu  *              --------------------
101*91f16700Schasinglulu  *              |                  |
102*91f16700Schasinglulu  *              |  EL3 TZC (3MB)   |
103*91f16700Schasinglulu  *              --------------------
104*91f16700Schasinglulu  *              | L1 GPT + SCP TZC |
105*91f16700Schasinglulu  *              |       (~1MB)     |
106*91f16700Schasinglulu  *  0xFFFF_FFFF --------------------
107*91f16700Schasinglulu  */
108*91f16700Schasinglulu #if ENABLE_RME
109*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE              UL(0x04000000) /* 64MB */
110*91f16700Schasinglulu /*
111*91f16700Schasinglulu  * Define a region within the TZC secured DRAM for use by EL3 runtime
112*91f16700Schasinglulu  * firmware. This region is meant to be NOLOAD and will not be zero
113*91f16700Schasinglulu  * initialized. Data sections with the attribute `.arm_el3_tzc_dram` will be
114*91f16700Schasinglulu  * placed here. 3MB region is reserved if RME is enabled, 2MB otherwise.
115*91f16700Schasinglulu  */
116*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE		UL(0x00300000) /* 3MB */
117*91f16700Schasinglulu #define ARM_L1_GPT_SIZE			UL(0x00100000) /* 1MB */
118*91f16700Schasinglulu /* 32MB - ARM_EL3_RMM_SHARED_SIZE */
119*91f16700Schasinglulu #define ARM_REALM_SIZE			(UL(0x02000000) -		\
120*91f16700Schasinglulu 						ARM_EL3_RMM_SHARED_SIZE)
121*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_SIZE		(PAGE_SIZE)    /* 4KB */
122*91f16700Schasinglulu #else
123*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE		UL(0x01000000) /* 16MB */
124*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE		UL(0x00200000) /* 2MB */
125*91f16700Schasinglulu #define ARM_L1_GPT_SIZE			UL(0)
126*91f16700Schasinglulu #define ARM_REALM_SIZE			UL(0)
127*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_SIZE		UL(0)
128*91f16700Schasinglulu #endif /* ENABLE_RME */
129*91f16700Schasinglulu 
130*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
131*91f16700Schasinglulu 					ARM_DRAM1_SIZE -		\
132*91f16700Schasinglulu 					(ARM_SCP_TZC_DRAM1_SIZE +	\
133*91f16700Schasinglulu 					ARM_L1_GPT_SIZE))
134*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_SIZE		PLAT_ARM_SCP_TZC_DRAM1_SIZE
135*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_END		(ARM_SCP_TZC_DRAM1_BASE +	\
136*91f16700Schasinglulu 					ARM_SCP_TZC_DRAM1_SIZE - 1U)
137*91f16700Schasinglulu 
138*91f16700Schasinglulu # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
139*91f16700Schasinglulu MEASURED_BOOT
140*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_SIZE	UL(0x00001000)	/* 4KB */
141*91f16700Schasinglulu 
142*91f16700Schasinglulu #if ENABLE_RME
143*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_BASE	(ARM_REALM_BASE -		\
144*91f16700Schasinglulu 					 ARM_EVENT_LOG_DRAM1_SIZE)
145*91f16700Schasinglulu #else
146*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_BASE	(ARM_EL3_TZC_DRAM1_BASE -	\
147*91f16700Schasinglulu 					 ARM_EVENT_LOG_DRAM1_SIZE)
148*91f16700Schasinglulu #endif /* ENABLE_RME */
149*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_END		(ARM_EVENT_LOG_DRAM1_BASE +	\
150*91f16700Schasinglulu 					 ARM_EVENT_LOG_DRAM1_SIZE -	\
151*91f16700Schasinglulu 					 1U)
152*91f16700Schasinglulu #else
153*91f16700Schasinglulu #define ARM_EVENT_LOG_DRAM1_SIZE	UL(0)
154*91f16700Schasinglulu #endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */
155*91f16700Schasinglulu 
156*91f16700Schasinglulu #if ENABLE_RME
157*91f16700Schasinglulu #define ARM_L1_GPT_ADDR_BASE		(ARM_DRAM1_BASE +		\
158*91f16700Schasinglulu 					ARM_DRAM1_SIZE -		\
159*91f16700Schasinglulu 					ARM_L1_GPT_SIZE)
160*91f16700Schasinglulu #define ARM_L1_GPT_END			(ARM_L1_GPT_ADDR_BASE +		\
161*91f16700Schasinglulu 					ARM_L1_GPT_SIZE - 1U)
162*91f16700Schasinglulu 
163*91f16700Schasinglulu #define ARM_REALM_BASE			(ARM_EL3_RMM_SHARED_BASE -	\
164*91f16700Schasinglulu 					 ARM_REALM_SIZE)
165*91f16700Schasinglulu 
166*91f16700Schasinglulu #define ARM_REALM_END                   (ARM_REALM_BASE + ARM_REALM_SIZE - 1U)
167*91f16700Schasinglulu 
168*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_BASE		(ARM_DRAM1_BASE +		\
169*91f16700Schasinglulu 					 ARM_DRAM1_SIZE -		\
170*91f16700Schasinglulu 					(ARM_SCP_TZC_DRAM1_SIZE +	\
171*91f16700Schasinglulu 					ARM_L1_GPT_SIZE +		\
172*91f16700Schasinglulu 					ARM_EL3_RMM_SHARED_SIZE +	\
173*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_SIZE))
174*91f16700Schasinglulu 
175*91f16700Schasinglulu #define ARM_EL3_RMM_SHARED_END		(ARM_EL3_RMM_SHARED_BASE +	\
176*91f16700Schasinglulu 					 ARM_EL3_RMM_SHARED_SIZE - 1U)
177*91f16700Schasinglulu #endif /* ENABLE_RME */
178*91f16700Schasinglulu 
179*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_BASE		(ARM_SCP_TZC_DRAM1_BASE -	\
180*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_SIZE)
181*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_END		(ARM_EL3_TZC_DRAM1_BASE +	\
182*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_SIZE - 1U)
183*91f16700Schasinglulu 
184*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
185*91f16700Schasinglulu 					ARM_DRAM1_SIZE -		\
186*91f16700Schasinglulu 					ARM_TZC_DRAM1_SIZE)
187*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_SIZE		(ARM_TZC_DRAM1_SIZE -		\
188*91f16700Schasinglulu 					(ARM_SCP_TZC_DRAM1_SIZE +	\
189*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_SIZE +	\
190*91f16700Schasinglulu 					ARM_EL3_RMM_SHARED_SIZE +	\
191*91f16700Schasinglulu 					ARM_REALM_SIZE +		\
192*91f16700Schasinglulu 					ARM_L1_GPT_SIZE +		\
193*91f16700Schasinglulu 					ARM_EVENT_LOG_DRAM1_SIZE))
194*91f16700Schasinglulu 
195*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_END		(ARM_AP_TZC_DRAM1_BASE +	\
196*91f16700Schasinglulu 					ARM_AP_TZC_DRAM1_SIZE - 1U)
197*91f16700Schasinglulu 
198*91f16700Schasinglulu /* Define the Access permissions for Secure peripherals to NS_DRAM */
199*91f16700Schasinglulu #define ARM_TZC_NS_DRAM_S_ACCESS	TZC_REGION_S_NONE
200*91f16700Schasinglulu 
201*91f16700Schasinglulu #ifdef SPD_opteed
202*91f16700Schasinglulu /*
203*91f16700Schasinglulu  * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to
204*91f16700Schasinglulu  * load/authenticate the trusted os extra image. The first 512KB of
205*91f16700Schasinglulu  * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading
206*91f16700Schasinglulu  * for OPTEE is paged image which only include the paging part using
207*91f16700Schasinglulu  * virtual memory but without "init" data. OPTEE will copy the "init" data
208*91f16700Schasinglulu  * (from pager image) to the first 512KB of TZC_DRAM, and then copy the
209*91f16700Schasinglulu  * extra image behind the "init" data.
210*91f16700Schasinglulu  */
211*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_BASE	(ARM_AP_TZC_DRAM1_BASE + \
212*91f16700Schasinglulu 					 ARM_AP_TZC_DRAM1_SIZE - \
213*91f16700Schasinglulu 					 ARM_OPTEE_PAGEABLE_LOAD_SIZE)
214*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_SIZE	UL(0x400000)
215*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_MEM	MAP_REGION_FLAT(		\
216*91f16700Schasinglulu 					ARM_OPTEE_PAGEABLE_LOAD_BASE,	\
217*91f16700Schasinglulu 					ARM_OPTEE_PAGEABLE_LOAD_SIZE,	\
218*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
219*91f16700Schasinglulu 
220*91f16700Schasinglulu /*
221*91f16700Schasinglulu  * Map the memory for the OP-TEE core (also known as OP-TEE pager when paging
222*91f16700Schasinglulu  * support is enabled).
223*91f16700Schasinglulu  */
224*91f16700Schasinglulu #define ARM_MAP_OPTEE_CORE_MEM		MAP_REGION_FLAT(		\
225*91f16700Schasinglulu 						BL32_BASE,		\
226*91f16700Schasinglulu 						BL32_LIMIT - BL32_BASE,	\
227*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_SECURE)
228*91f16700Schasinglulu #endif /* SPD_opteed */
229*91f16700Schasinglulu 
230*91f16700Schasinglulu #define ARM_NS_DRAM1_BASE		ARM_DRAM1_BASE
231*91f16700Schasinglulu #define ARM_NS_DRAM1_SIZE		(ARM_DRAM1_SIZE -		\
232*91f16700Schasinglulu 					 ARM_TZC_DRAM1_SIZE)
233*91f16700Schasinglulu 
234*91f16700Schasinglulu #define ARM_NS_DRAM1_END		(ARM_NS_DRAM1_BASE +		\
235*91f16700Schasinglulu 					 ARM_NS_DRAM1_SIZE - 1U)
236*91f16700Schasinglulu #ifdef PLAT_ARM_DRAM1_BASE
237*91f16700Schasinglulu #define ARM_DRAM1_BASE			PLAT_ARM_DRAM1_BASE
238*91f16700Schasinglulu #else
239*91f16700Schasinglulu #define ARM_DRAM1_BASE			ULL(0x80000000)
240*91f16700Schasinglulu #endif /* PLAT_ARM_DRAM1_BASE */
241*91f16700Schasinglulu 
242*91f16700Schasinglulu #define ARM_DRAM1_SIZE			ULL(0x80000000)
243*91f16700Schasinglulu #define ARM_DRAM1_END			(ARM_DRAM1_BASE +		\
244*91f16700Schasinglulu 					 ARM_DRAM1_SIZE - 1U)
245*91f16700Schasinglulu 
246*91f16700Schasinglulu #define ARM_DRAM2_BASE			PLAT_ARM_DRAM2_BASE
247*91f16700Schasinglulu #define ARM_DRAM2_SIZE			PLAT_ARM_DRAM2_SIZE
248*91f16700Schasinglulu #define ARM_DRAM2_END			(ARM_DRAM2_BASE +		\
249*91f16700Schasinglulu 					 ARM_DRAM2_SIZE - 1U)
250*91f16700Schasinglulu /* Number of DRAM banks */
251*91f16700Schasinglulu #define ARM_DRAM_NUM_BANKS		2UL
252*91f16700Schasinglulu 
253*91f16700Schasinglulu #define ARM_IRQ_SEC_PHY_TIMER		29
254*91f16700Schasinglulu 
255*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_0		8
256*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_1		9
257*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_2		10
258*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_3		11
259*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_4		12
260*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_5		13
261*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_6		14
262*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_7		15
263*91f16700Schasinglulu 
264*91f16700Schasinglulu /*
265*91f16700Schasinglulu  * Define a list of Group 1 Secure and Group 0 interrupt properties as per GICv3
266*91f16700Schasinglulu  * terminology. On a GICv2 system or mode, the lists will be merged and treated
267*91f16700Schasinglulu  * as Group 0 interrupts.
268*91f16700Schasinglulu  */
269*91f16700Schasinglulu #define ARM_G1S_IRQ_PROPS(grp) \
270*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \
271*91f16700Schasinglulu 			GIC_INTR_CFG_LEVEL), \
272*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \
273*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
274*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, (grp), \
275*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
276*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, (grp), \
277*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
278*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, (grp), \
279*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
280*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, (grp), \
281*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
282*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, (grp), \
283*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE)
284*91f16700Schasinglulu 
285*91f16700Schasinglulu #define ARM_G0_IRQ_PROPS(grp) \
286*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, (grp), \
287*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
288*91f16700Schasinglulu 	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, (grp), \
289*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE)
290*91f16700Schasinglulu 
291*91f16700Schasinglulu #define ARM_MAP_SHARED_RAM	MAP_REGION_FLAT(			\
292*91f16700Schasinglulu 					ARM_SHARED_RAM_BASE,		\
293*91f16700Schasinglulu 					ARM_SHARED_RAM_SIZE,		\
294*91f16700Schasinglulu 					MT_DEVICE | MT_RW | EL3_PAS)
295*91f16700Schasinglulu 
296*91f16700Schasinglulu #define ARM_MAP_NS_DRAM1	MAP_REGION_FLAT(			\
297*91f16700Schasinglulu 					ARM_NS_DRAM1_BASE,		\
298*91f16700Schasinglulu 					ARM_NS_DRAM1_SIZE,		\
299*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_NS)
300*91f16700Schasinglulu 
301*91f16700Schasinglulu #define ARM_MAP_DRAM2		MAP_REGION_FLAT(			\
302*91f16700Schasinglulu 					ARM_DRAM2_BASE,			\
303*91f16700Schasinglulu 					ARM_DRAM2_SIZE,			\
304*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_NS)
305*91f16700Schasinglulu 
306*91f16700Schasinglulu #define ARM_MAP_TSP_SEC_MEM	MAP_REGION_FLAT(			\
307*91f16700Schasinglulu 					TSP_SEC_MEM_BASE,		\
308*91f16700Schasinglulu 					TSP_SEC_MEM_SIZE,		\
309*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
310*91f16700Schasinglulu 
311*91f16700Schasinglulu #if ARM_BL31_IN_DRAM
312*91f16700Schasinglulu #define ARM_MAP_BL31_SEC_DRAM	MAP_REGION_FLAT(			\
313*91f16700Schasinglulu 					BL31_BASE,			\
314*91f16700Schasinglulu 					PLAT_ARM_MAX_BL31_SIZE,		\
315*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
316*91f16700Schasinglulu #endif
317*91f16700Schasinglulu 
318*91f16700Schasinglulu #define ARM_MAP_EL3_TZC_DRAM	MAP_REGION_FLAT(			\
319*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_BASE,		\
320*91f16700Schasinglulu 					ARM_EL3_TZC_DRAM1_SIZE,		\
321*91f16700Schasinglulu 					MT_MEMORY | MT_RW | EL3_PAS)
322*91f16700Schasinglulu 
323*91f16700Schasinglulu #define ARM_MAP_TRUSTED_DRAM	MAP_REGION_FLAT(			\
324*91f16700Schasinglulu 					PLAT_ARM_TRUSTED_DRAM_BASE,	\
325*91f16700Schasinglulu 					PLAT_ARM_TRUSTED_DRAM_SIZE,	\
326*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
327*91f16700Schasinglulu 
328*91f16700Schasinglulu # if (defined(SPD_tspd) || defined(SPD_opteed) || defined(SPD_spmd)) && \
329*91f16700Schasinglulu MEASURED_BOOT
330*91f16700Schasinglulu #define ARM_MAP_EVENT_LOG_DRAM1						\
331*91f16700Schasinglulu 				MAP_REGION_FLAT(			\
332*91f16700Schasinglulu 					ARM_EVENT_LOG_DRAM1_BASE,	\
333*91f16700Schasinglulu 					ARM_EVENT_LOG_DRAM1_SIZE,	\
334*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
335*91f16700Schasinglulu #endif /* (SPD_tspd || SPD_opteed || SPD_spmd) && MEASURED_BOOT */
336*91f16700Schasinglulu 
337*91f16700Schasinglulu #if ENABLE_RME
338*91f16700Schasinglulu /*
339*91f16700Schasinglulu  * We add the EL3_RMM_SHARED size to RMM mapping to map the region as a block.
340*91f16700Schasinglulu  * Else we end up requiring more pagetables in BL2 for ROMLIB build.
341*91f16700Schasinglulu  */
342*91f16700Schasinglulu #define ARM_MAP_RMM_DRAM	MAP_REGION_FLAT(			\
343*91f16700Schasinglulu 					PLAT_ARM_RMM_BASE,		\
344*91f16700Schasinglulu 					(PLAT_ARM_RMM_SIZE + 		\
345*91f16700Schasinglulu 					ARM_EL3_RMM_SHARED_SIZE),	\
346*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_REALM)
347*91f16700Schasinglulu 
348*91f16700Schasinglulu 
349*91f16700Schasinglulu #define ARM_MAP_GPT_L1_DRAM	MAP_REGION_FLAT(			\
350*91f16700Schasinglulu 					ARM_L1_GPT_ADDR_BASE,		\
351*91f16700Schasinglulu 					ARM_L1_GPT_SIZE,		\
352*91f16700Schasinglulu 					MT_MEMORY | MT_RW | EL3_PAS)
353*91f16700Schasinglulu 
354*91f16700Schasinglulu #define ARM_MAP_EL3_RMM_SHARED_MEM					\
355*91f16700Schasinglulu 				MAP_REGION_FLAT(			\
356*91f16700Schasinglulu 					ARM_EL3_RMM_SHARED_BASE,	\
357*91f16700Schasinglulu 					ARM_EL3_RMM_SHARED_SIZE,	\
358*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_REALM)
359*91f16700Schasinglulu 
360*91f16700Schasinglulu #endif /* ENABLE_RME */
361*91f16700Schasinglulu 
362*91f16700Schasinglulu /*
363*91f16700Schasinglulu  * Mapping for the BL1 RW region. This mapping is needed by BL2 in order to
364*91f16700Schasinglulu  * share the Mbed TLS heap. Since the heap is allocated inside BL1, it resides
365*91f16700Schasinglulu  * in the BL1 RW region. Hence, BL2 needs access to the BL1 RW region in order
366*91f16700Schasinglulu  * to be able to access the heap.
367*91f16700Schasinglulu  */
368*91f16700Schasinglulu #define ARM_MAP_BL1_RW		MAP_REGION_FLAT(	\
369*91f16700Schasinglulu 					BL1_RW_BASE,	\
370*91f16700Schasinglulu 					BL1_RW_LIMIT - BL1_RW_BASE, \
371*91f16700Schasinglulu 					MT_MEMORY | MT_RW | EL3_PAS)
372*91f16700Schasinglulu 
373*91f16700Schasinglulu /*
374*91f16700Schasinglulu  * If SEPARATE_CODE_AND_RODATA=1 we define a region for each section
375*91f16700Schasinglulu  * otherwise one region is defined containing both.
376*91f16700Schasinglulu  */
377*91f16700Schasinglulu #if SEPARATE_CODE_AND_RODATA
378*91f16700Schasinglulu #define ARM_MAP_BL_RO			MAP_REGION_FLAT(			\
379*91f16700Schasinglulu 						BL_CODE_BASE,			\
380*91f16700Schasinglulu 						BL_CODE_END - BL_CODE_BASE,	\
381*91f16700Schasinglulu 						MT_CODE | EL3_PAS),		\
382*91f16700Schasinglulu 					MAP_REGION_FLAT(			\
383*91f16700Schasinglulu 						BL_RO_DATA_BASE,		\
384*91f16700Schasinglulu 						BL_RO_DATA_END			\
385*91f16700Schasinglulu 							- BL_RO_DATA_BASE,	\
386*91f16700Schasinglulu 						MT_RO_DATA | EL3_PAS)
387*91f16700Schasinglulu #else
388*91f16700Schasinglulu #define ARM_MAP_BL_RO			MAP_REGION_FLAT(			\
389*91f16700Schasinglulu 						BL_CODE_BASE,			\
390*91f16700Schasinglulu 						BL_CODE_END - BL_CODE_BASE,	\
391*91f16700Schasinglulu 						MT_CODE | EL3_PAS)
392*91f16700Schasinglulu #endif
393*91f16700Schasinglulu #if USE_COHERENT_MEM
394*91f16700Schasinglulu #define ARM_MAP_BL_COHERENT_RAM		MAP_REGION_FLAT(			\
395*91f16700Schasinglulu 						BL_COHERENT_RAM_BASE,		\
396*91f16700Schasinglulu 						BL_COHERENT_RAM_END		\
397*91f16700Schasinglulu 							- BL_COHERENT_RAM_BASE, \
398*91f16700Schasinglulu 						MT_DEVICE | MT_RW | EL3_PAS)
399*91f16700Schasinglulu #endif
400*91f16700Schasinglulu #if USE_ROMLIB
401*91f16700Schasinglulu #define ARM_MAP_ROMLIB_CODE		MAP_REGION_FLAT(			\
402*91f16700Schasinglulu 						ROMLIB_RO_BASE,			\
403*91f16700Schasinglulu 						ROMLIB_RO_LIMIT	- ROMLIB_RO_BASE,\
404*91f16700Schasinglulu 						MT_CODE | EL3_PAS)
405*91f16700Schasinglulu 
406*91f16700Schasinglulu #define ARM_MAP_ROMLIB_DATA		MAP_REGION_FLAT(			\
407*91f16700Schasinglulu 						ROMLIB_RW_BASE,			\
408*91f16700Schasinglulu 						ROMLIB_RW_END	- ROMLIB_RW_BASE,\
409*91f16700Schasinglulu 						MT_MEMORY | MT_RW | EL3_PAS)
410*91f16700Schasinglulu #endif
411*91f16700Schasinglulu 
412*91f16700Schasinglulu /*
413*91f16700Schasinglulu  * Map mem_protect flash region with read and write permissions
414*91f16700Schasinglulu  */
415*91f16700Schasinglulu #define ARM_V2M_MAP_MEM_PROTECT		MAP_REGION_FLAT(PLAT_ARM_MEM_PROT_ADDR,	\
416*91f16700Schasinglulu 						V2M_FLASH_BLOCK_SIZE,		\
417*91f16700Schasinglulu 						MT_DEVICE | MT_RW | MT_SECURE)
418*91f16700Schasinglulu /*
419*91f16700Schasinglulu  * Map the region for device tree configuration with read and write permissions
420*91f16700Schasinglulu  */
421*91f16700Schasinglulu #define ARM_MAP_BL_CONFIG_REGION	MAP_REGION_FLAT(ARM_BL_RAM_BASE,	\
422*91f16700Schasinglulu 						(ARM_FW_CONFIGS_LIMIT		\
423*91f16700Schasinglulu 							- ARM_BL_RAM_BASE),	\
424*91f16700Schasinglulu 						MT_MEMORY | MT_RW | EL3_PAS)
425*91f16700Schasinglulu /*
426*91f16700Schasinglulu  * Map L0_GPT with read and write permissions
427*91f16700Schasinglulu  */
428*91f16700Schasinglulu #if ENABLE_RME
429*91f16700Schasinglulu #define ARM_MAP_L0_GPT_REGION		MAP_REGION_FLAT(ARM_L0_GPT_ADDR_BASE,	\
430*91f16700Schasinglulu 						ARM_L0_GPT_SIZE,		\
431*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_ROOT)
432*91f16700Schasinglulu #endif
433*91f16700Schasinglulu 
434*91f16700Schasinglulu /*
435*91f16700Schasinglulu  * The max number of regions like RO(code), coherent and data required by
436*91f16700Schasinglulu  * different BL stages which need to be mapped in the MMU.
437*91f16700Schasinglulu  */
438*91f16700Schasinglulu #define ARM_BL_REGIONS			7
439*91f16700Schasinglulu 
440*91f16700Schasinglulu #define MAX_MMAP_REGIONS		(PLAT_ARM_MMAP_ENTRIES +	\
441*91f16700Schasinglulu 					 ARM_BL_REGIONS)
442*91f16700Schasinglulu 
443*91f16700Schasinglulu /* Memory mapped Generic timer interfaces  */
444*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNTCTL_BASE
445*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE		PLAT_ARM_SYS_CNTCTL_BASE
446*91f16700Schasinglulu #else
447*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE		UL(0x2a430000)
448*91f16700Schasinglulu #endif
449*91f16700Schasinglulu 
450*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNTREAD_BASE
451*91f16700Schasinglulu #define ARM_SYS_CNTREAD_BASE		PLAT_ARM_SYS_CNTREAD_BASE
452*91f16700Schasinglulu #else
453*91f16700Schasinglulu #define ARM_SYS_CNTREAD_BASE		UL(0x2a800000)
454*91f16700Schasinglulu #endif
455*91f16700Schasinglulu 
456*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_TIMCTL_BASE
457*91f16700Schasinglulu #define ARM_SYS_TIMCTL_BASE		PLAT_ARM_SYS_TIMCTL_BASE
458*91f16700Schasinglulu #else
459*91f16700Schasinglulu #define ARM_SYS_TIMCTL_BASE		UL(0x2a810000)
460*91f16700Schasinglulu #endif
461*91f16700Schasinglulu 
462*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNT_BASE_S
463*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_S		PLAT_ARM_SYS_CNT_BASE_S
464*91f16700Schasinglulu #else
465*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_S		UL(0x2a820000)
466*91f16700Schasinglulu #endif
467*91f16700Schasinglulu 
468*91f16700Schasinglulu #ifdef PLAT_ARM_SYS_CNT_BASE_NS
469*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_NS		PLAT_ARM_SYS_CNT_BASE_NS
470*91f16700Schasinglulu #else
471*91f16700Schasinglulu #define ARM_SYS_CNT_BASE_NS		UL(0x2a830000)
472*91f16700Schasinglulu #endif
473*91f16700Schasinglulu 
474*91f16700Schasinglulu #define ARM_CONSOLE_BAUDRATE		115200
475*91f16700Schasinglulu 
476*91f16700Schasinglulu /* Trusted Watchdog constants */
477*91f16700Schasinglulu #ifdef PLAT_ARM_SP805_TWDG_BASE
478*91f16700Schasinglulu #define ARM_SP805_TWDG_BASE		PLAT_ARM_SP805_TWDG_BASE
479*91f16700Schasinglulu #else
480*91f16700Schasinglulu #define ARM_SP805_TWDG_BASE		UL(0x2a490000)
481*91f16700Schasinglulu #endif
482*91f16700Schasinglulu #define ARM_SP805_TWDG_CLK_HZ		32768
483*91f16700Schasinglulu /* The TBBR document specifies a watchdog timeout of 256 seconds. SP805
484*91f16700Schasinglulu  * asserts reset after two consecutive countdowns (2 x 128 = 256 sec) */
485*91f16700Schasinglulu #define ARM_TWDG_TIMEOUT_SEC		128
486*91f16700Schasinglulu #define ARM_TWDG_LOAD_VAL		(ARM_SP805_TWDG_CLK_HZ * 	\
487*91f16700Schasinglulu 					 ARM_TWDG_TIMEOUT_SEC)
488*91f16700Schasinglulu 
489*91f16700Schasinglulu /******************************************************************************
490*91f16700Schasinglulu  * Required platform porting definitions common to all ARM standard platforms
491*91f16700Schasinglulu  *****************************************************************************/
492*91f16700Schasinglulu 
493*91f16700Schasinglulu /*
494*91f16700Schasinglulu  * This macro defines the deepest retention state possible. A higher state
495*91f16700Schasinglulu  * id will represent an invalid or a power down state.
496*91f16700Schasinglulu  */
497*91f16700Schasinglulu #define PLAT_MAX_RET_STATE		ARM_LOCAL_STATE_RET
498*91f16700Schasinglulu 
499*91f16700Schasinglulu /*
500*91f16700Schasinglulu  * This macro defines the deepest power down states possible. Any state ID
501*91f16700Schasinglulu  * higher than this is invalid.
502*91f16700Schasinglulu  */
503*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE		ARM_LOCAL_STATE_OFF
504*91f16700Schasinglulu 
505*91f16700Schasinglulu /*
506*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
507*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
508*91f16700Schasinglulu  * integrated and external caches.
509*91f16700Schasinglulu  */
510*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE		(U(1) << ARM_CACHE_WRITEBACK_SHIFT)
511*91f16700Schasinglulu 
512*91f16700Schasinglulu /*
513*91f16700Schasinglulu  * To enable FW_CONFIG to be loaded by BL1, define the corresponding base
514*91f16700Schasinglulu  * and limit. Leave enough space of BL2 meminfo.
515*91f16700Schasinglulu  */
516*91f16700Schasinglulu #define ARM_FW_CONFIG_BASE		(ARM_BL_RAM_BASE + sizeof(meminfo_t))
517*91f16700Schasinglulu #define ARM_FW_CONFIG_LIMIT		((ARM_BL_RAM_BASE + PAGE_SIZE) \
518*91f16700Schasinglulu 					+ (PAGE_SIZE / 2U))
519*91f16700Schasinglulu 
520*91f16700Schasinglulu /*
521*91f16700Schasinglulu  * Boot parameters passed from BL2 to BL31/BL32 are stored here
522*91f16700Schasinglulu  */
523*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_BASE		(ARM_FW_CONFIG_LIMIT)
524*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_LIMIT		(ARM_BL2_MEM_DESC_BASE \
525*91f16700Schasinglulu 					+ (PAGE_SIZE / 2U))
526*91f16700Schasinglulu 
527*91f16700Schasinglulu /*
528*91f16700Schasinglulu  * Define limit of firmware configuration memory:
529*91f16700Schasinglulu  * ARM_FW_CONFIG + ARM_BL2_MEM_DESC memory
530*91f16700Schasinglulu  */
531*91f16700Schasinglulu #define ARM_FW_CONFIGS_SIZE		(PAGE_SIZE * 2)
532*91f16700Schasinglulu #define ARM_FW_CONFIGS_LIMIT		(ARM_BL_RAM_BASE + ARM_FW_CONFIGS_SIZE)
533*91f16700Schasinglulu 
534*91f16700Schasinglulu #if ENABLE_RME
535*91f16700Schasinglulu /*
536*91f16700Schasinglulu  * Store the L0 GPT on Trusted SRAM next to firmware
537*91f16700Schasinglulu  * configuration memory, 4KB aligned.
538*91f16700Schasinglulu  */
539*91f16700Schasinglulu #define ARM_L0_GPT_SIZE			(PAGE_SIZE)
540*91f16700Schasinglulu #define ARM_L0_GPT_ADDR_BASE		(ARM_FW_CONFIGS_LIMIT)
541*91f16700Schasinglulu #define ARM_L0_GPT_LIMIT		(ARM_L0_GPT_ADDR_BASE + ARM_L0_GPT_SIZE)
542*91f16700Schasinglulu #else
543*91f16700Schasinglulu #define ARM_L0_GPT_SIZE			U(0)
544*91f16700Schasinglulu #endif
545*91f16700Schasinglulu 
546*91f16700Schasinglulu /*******************************************************************************
547*91f16700Schasinglulu  * BL1 specific defines.
548*91f16700Schasinglulu  * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of
549*91f16700Schasinglulu  * addresses.
550*91f16700Schasinglulu  ******************************************************************************/
551*91f16700Schasinglulu #define BL1_RO_BASE			PLAT_ARM_TRUSTED_ROM_BASE
552*91f16700Schasinglulu #ifdef PLAT_BL1_RO_LIMIT
553*91f16700Schasinglulu #define BL1_RO_LIMIT			PLAT_BL1_RO_LIMIT
554*91f16700Schasinglulu #else
555*91f16700Schasinglulu #define BL1_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE	\
556*91f16700Schasinglulu 					 + (PLAT_ARM_TRUSTED_ROM_SIZE - \
557*91f16700Schasinglulu 					    PLAT_ARM_MAX_ROMLIB_RO_SIZE))
558*91f16700Schasinglulu #endif
559*91f16700Schasinglulu 
560*91f16700Schasinglulu /*
561*91f16700Schasinglulu  * Put BL1 RW at the top of the Trusted SRAM.
562*91f16700Schasinglulu  */
563*91f16700Schasinglulu #define BL1_RW_BASE			(ARM_BL_RAM_BASE +		\
564*91f16700Schasinglulu 						ARM_BL_RAM_SIZE -	\
565*91f16700Schasinglulu 						(PLAT_ARM_MAX_BL1_RW_SIZE +\
566*91f16700Schasinglulu 						 PLAT_ARM_MAX_ROMLIB_RW_SIZE))
567*91f16700Schasinglulu #define BL1_RW_LIMIT			(ARM_BL_RAM_BASE + 		\
568*91f16700Schasinglulu 					    (ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE))
569*91f16700Schasinglulu 
570*91f16700Schasinglulu #define ROMLIB_RO_BASE			BL1_RO_LIMIT
571*91f16700Schasinglulu #define ROMLIB_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE)
572*91f16700Schasinglulu 
573*91f16700Schasinglulu #define ROMLIB_RW_BASE			(BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE)
574*91f16700Schasinglulu #define ROMLIB_RW_END			(ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE)
575*91f16700Schasinglulu 
576*91f16700Schasinglulu /*******************************************************************************
577*91f16700Schasinglulu  * BL2 specific defines.
578*91f16700Schasinglulu  ******************************************************************************/
579*91f16700Schasinglulu #if RESET_TO_BL2
580*91f16700Schasinglulu #if ENABLE_PIE
581*91f16700Schasinglulu /*
582*91f16700Schasinglulu  * As the BL31 image size appears to be increased when built with the ENABLE_PIE
583*91f16700Schasinglulu  * option, set BL2 base address to have enough space for BL31 in Trusted SRAM.
584*91f16700Schasinglulu  */
585*91f16700Schasinglulu #define BL2_OFFSET			(0x5000)
586*91f16700Schasinglulu #else
587*91f16700Schasinglulu /* Put BL2 towards the middle of the Trusted SRAM */
588*91f16700Schasinglulu #define BL2_OFFSET			(0x2000)
589*91f16700Schasinglulu #endif /* ENABLE_PIE */
590*91f16700Schasinglulu 
591*91f16700Schasinglulu #define BL2_BASE			(ARM_TRUSTED_SRAM_BASE + \
592*91f16700Schasinglulu 					    (PLAT_ARM_TRUSTED_SRAM_SIZE >> 1) + \
593*91f16700Schasinglulu 					    BL2_OFFSET)
594*91f16700Schasinglulu #define BL2_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
595*91f16700Schasinglulu 
596*91f16700Schasinglulu #else
597*91f16700Schasinglulu /*
598*91f16700Schasinglulu  * Put BL2 just below BL1.
599*91f16700Schasinglulu  */
600*91f16700Schasinglulu #define BL2_BASE			(BL1_RW_BASE - PLAT_ARM_MAX_BL2_SIZE)
601*91f16700Schasinglulu #define BL2_LIMIT			BL1_RW_BASE
602*91f16700Schasinglulu #endif
603*91f16700Schasinglulu 
604*91f16700Schasinglulu /*******************************************************************************
605*91f16700Schasinglulu  * BL31 specific defines.
606*91f16700Schasinglulu  ******************************************************************************/
607*91f16700Schasinglulu #if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION
608*91f16700Schasinglulu /*
609*91f16700Schasinglulu  * Put BL31 at the bottom of TZC secured DRAM
610*91f16700Schasinglulu  */
611*91f16700Schasinglulu #define BL31_BASE			ARM_AP_TZC_DRAM1_BASE
612*91f16700Schasinglulu #define BL31_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
613*91f16700Schasinglulu 						PLAT_ARM_MAX_BL31_SIZE)
614*91f16700Schasinglulu /*
615*91f16700Schasinglulu  * For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM.
616*91f16700Schasinglulu  * And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten.
617*91f16700Schasinglulu  */
618*91f16700Schasinglulu #if SEPARATE_NOBITS_REGION
619*91f16700Schasinglulu #define BL31_NOBITS_BASE		BL2_BASE
620*91f16700Schasinglulu #define BL31_NOBITS_LIMIT		BL2_LIMIT
621*91f16700Schasinglulu #endif /* SEPARATE_NOBITS_REGION */
622*91f16700Schasinglulu #elif (RESET_TO_BL31)
623*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/
624*91f16700Schasinglulu # if !ENABLE_PIE
625*91f16700Schasinglulu #  error "BL31 must be a PIE if RESET_TO_BL31=1."
626*91f16700Schasinglulu #endif
627*91f16700Schasinglulu /*
628*91f16700Schasinglulu  * Since this is PIE, we can define BL31_BASE to 0x0 since this macro is solely
629*91f16700Schasinglulu  * used for building BL31 and not used for loading BL31.
630*91f16700Schasinglulu  */
631*91f16700Schasinglulu #  define BL31_BASE			0x0
632*91f16700Schasinglulu #  define BL31_LIMIT			PLAT_ARM_MAX_BL31_SIZE
633*91f16700Schasinglulu #else
634*91f16700Schasinglulu /* Put BL31 below BL2 in the Trusted SRAM.*/
635*91f16700Schasinglulu #define BL31_BASE			((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
636*91f16700Schasinglulu 						- PLAT_ARM_MAX_BL31_SIZE)
637*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT		BL2_BASE
638*91f16700Schasinglulu /*
639*91f16700Schasinglulu  * For RESET_TO_BL2 make sure the BL31 can grow up until BL2_BASE.
640*91f16700Schasinglulu  * This is because in the RESET_TO_BL2 configuration,
641*91f16700Schasinglulu  * BL2 is always resident.
642*91f16700Schasinglulu  */
643*91f16700Schasinglulu #if RESET_TO_BL2
644*91f16700Schasinglulu #define BL31_LIMIT			BL2_BASE
645*91f16700Schasinglulu #else
646*91f16700Schasinglulu #define BL31_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
647*91f16700Schasinglulu #endif
648*91f16700Schasinglulu #endif
649*91f16700Schasinglulu 
650*91f16700Schasinglulu /******************************************************************************
651*91f16700Schasinglulu  * RMM specific defines
652*91f16700Schasinglulu  *****************************************************************************/
653*91f16700Schasinglulu #if ENABLE_RME
654*91f16700Schasinglulu #define RMM_BASE			(ARM_REALM_BASE)
655*91f16700Schasinglulu #define RMM_LIMIT			(RMM_BASE + ARM_REALM_SIZE)
656*91f16700Schasinglulu #define RMM_SHARED_BASE			(ARM_EL3_RMM_SHARED_BASE)
657*91f16700Schasinglulu #define RMM_SHARED_SIZE			(ARM_EL3_RMM_SHARED_SIZE)
658*91f16700Schasinglulu #endif
659*91f16700Schasinglulu 
660*91f16700Schasinglulu #if !defined(__aarch64__) || JUNO_AARCH32_EL3_RUNTIME
661*91f16700Schasinglulu /*******************************************************************************
662*91f16700Schasinglulu  * BL32 specific defines for EL3 runtime in AArch32 mode
663*91f16700Schasinglulu  ******************************************************************************/
664*91f16700Schasinglulu # if RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME
665*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/
666*91f16700Schasinglulu # if !ENABLE_PIE
667*91f16700Schasinglulu #  error "BL32 must be a PIE if RESET_TO_SP_MIN=1."
668*91f16700Schasinglulu #endif
669*91f16700Schasinglulu /*
670*91f16700Schasinglulu  * Since this is PIE, we can define BL32_BASE to 0x0 since this macro is solely
671*91f16700Schasinglulu  * used for building BL32 and not used for loading BL32.
672*91f16700Schasinglulu  */
673*91f16700Schasinglulu #  define BL32_BASE			0x0
674*91f16700Schasinglulu #  define BL32_LIMIT			PLAT_ARM_MAX_BL32_SIZE
675*91f16700Schasinglulu # else
676*91f16700Schasinglulu /* Put BL32 below BL2 in the Trusted SRAM.*/
677*91f16700Schasinglulu #  define BL32_BASE			((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
678*91f16700Schasinglulu 						- PLAT_ARM_MAX_BL32_SIZE)
679*91f16700Schasinglulu #  define BL32_PROGBITS_LIMIT		BL2_BASE
680*91f16700Schasinglulu #  define BL32_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
681*91f16700Schasinglulu # endif /* RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME */
682*91f16700Schasinglulu 
683*91f16700Schasinglulu #else
684*91f16700Schasinglulu /*******************************************************************************
685*91f16700Schasinglulu  * BL32 specific defines for EL3 runtime in AArch64 mode
686*91f16700Schasinglulu  ******************************************************************************/
687*91f16700Schasinglulu /*
688*91f16700Schasinglulu  * On ARM standard platforms, the TSP can execute from Trusted SRAM,
689*91f16700Schasinglulu  * Trusted DRAM (if available) or the DRAM region secured by the TrustZone
690*91f16700Schasinglulu  * controller.
691*91f16700Schasinglulu  */
692*91f16700Schasinglulu # if SPM_MM || SPMC_AT_EL3
693*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
694*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000))
695*91f16700Schasinglulu #  define BL32_BASE			(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
696*91f16700Schasinglulu #  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
697*91f16700Schasinglulu 						ARM_AP_TZC_DRAM1_SIZE)
698*91f16700Schasinglulu # elif defined(SPD_spmd)
699*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
700*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000))
701*91f16700Schasinglulu #  define BL32_BASE			PLAT_ARM_SPMC_BASE
702*91f16700Schasinglulu #  define BL32_LIMIT			(PLAT_ARM_SPMC_BASE +		\
703*91f16700Schasinglulu 						 PLAT_ARM_SPMC_SIZE)
704*91f16700Schasinglulu # elif ARM_BL31_IN_DRAM
705*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE +	\
706*91f16700Schasinglulu 						PLAT_ARM_MAX_BL31_SIZE)
707*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE -	\
708*91f16700Schasinglulu 						PLAT_ARM_MAX_BL31_SIZE)
709*91f16700Schasinglulu #  define BL32_BASE			(ARM_AP_TZC_DRAM1_BASE +	\
710*91f16700Schasinglulu 						PLAT_ARM_MAX_BL31_SIZE)
711*91f16700Schasinglulu #  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
712*91f16700Schasinglulu 						ARM_AP_TZC_DRAM1_SIZE)
713*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_SRAM_ID
714*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		ARM_BL_RAM_BASE
715*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		ARM_BL_RAM_SIZE
716*91f16700Schasinglulu #  define TSP_PROGBITS_LIMIT		BL31_BASE
717*91f16700Schasinglulu #  define BL32_BASE			ARM_FW_CONFIGS_LIMIT
718*91f16700Schasinglulu #  define BL32_LIMIT			BL31_BASE
719*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID
720*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		PLAT_ARM_TRUSTED_DRAM_BASE
721*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		PLAT_ARM_TRUSTED_DRAM_SIZE
722*91f16700Schasinglulu #  define BL32_BASE			PLAT_ARM_TRUSTED_DRAM_BASE
723*91f16700Schasinglulu #  define BL32_LIMIT			(PLAT_ARM_TRUSTED_DRAM_BASE	\
724*91f16700Schasinglulu 						+ SZ_4M)
725*91f16700Schasinglulu # elif ARM_TSP_RAM_LOCATION_ID == ARM_DRAM_ID
726*91f16700Schasinglulu #  define TSP_SEC_MEM_BASE		ARM_AP_TZC_DRAM1_BASE
727*91f16700Schasinglulu #  define TSP_SEC_MEM_SIZE		ARM_AP_TZC_DRAM1_SIZE
728*91f16700Schasinglulu #  define BL32_BASE			ARM_AP_TZC_DRAM1_BASE
729*91f16700Schasinglulu #  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
730*91f16700Schasinglulu 						ARM_AP_TZC_DRAM1_SIZE)
731*91f16700Schasinglulu # else
732*91f16700Schasinglulu #  error "Unsupported ARM_TSP_RAM_LOCATION_ID value"
733*91f16700Schasinglulu # endif
734*91f16700Schasinglulu #endif /* !__aarch64__ || JUNO_AARCH32_EL3_RUNTIME */
735*91f16700Schasinglulu 
736*91f16700Schasinglulu /*
737*91f16700Schasinglulu  * BL32 is mandatory in AArch32. In AArch64, undefine BL32_BASE if there is no
738*91f16700Schasinglulu  * SPD and no SPM-MM and no SPMC-AT-EL3, as they are the only ones that can be
739*91f16700Schasinglulu  * used as BL32.
740*91f16700Schasinglulu  */
741*91f16700Schasinglulu #if defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME
742*91f16700Schasinglulu # if defined(SPD_none) && !SPM_MM && !SPMC_AT_EL3
743*91f16700Schasinglulu #  undef BL32_BASE
744*91f16700Schasinglulu # endif /* defined(SPD_none) && !SPM_MM || !SPMC_AT_EL3 */
745*91f16700Schasinglulu #endif /* defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME */
746*91f16700Schasinglulu 
747*91f16700Schasinglulu /*******************************************************************************
748*91f16700Schasinglulu  * FWU Images: NS_BL1U, BL2U & NS_BL2U defines.
749*91f16700Schasinglulu  ******************************************************************************/
750*91f16700Schasinglulu #define BL2U_BASE			BL2_BASE
751*91f16700Schasinglulu #define BL2U_LIMIT			BL2_LIMIT
752*91f16700Schasinglulu 
753*91f16700Schasinglulu #define NS_BL2U_BASE			ARM_NS_DRAM1_BASE
754*91f16700Schasinglulu #define NS_BL1U_BASE			(PLAT_ARM_NVM_BASE + UL(0x03EB8000))
755*91f16700Schasinglulu 
756*91f16700Schasinglulu /*
757*91f16700Schasinglulu  * ID of the secure physical generic timer interrupt used by the TSP.
758*91f16700Schasinglulu  */
759*91f16700Schasinglulu #define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER
760*91f16700Schasinglulu 
761*91f16700Schasinglulu 
762*91f16700Schasinglulu /*
763*91f16700Schasinglulu  * One cache line needed for bakery locks on ARM platforms
764*91f16700Schasinglulu  */
765*91f16700Schasinglulu #define PLAT_PERCPU_BAKERY_LOCK_SIZE		(1 * CACHE_WRITEBACK_GRANULE)
766*91f16700Schasinglulu 
767*91f16700Schasinglulu /* Priority levels for ARM platforms */
768*91f16700Schasinglulu #if ENABLE_FEAT_RAS && FFH_SUPPORT
769*91f16700Schasinglulu #define PLAT_RAS_PRI			0x10
770*91f16700Schasinglulu #endif
771*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI		0x60
772*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI		0x70
773*91f16700Schasinglulu 
774*91f16700Schasinglulu /* CPU Fault Handling Interrupt(FHI) PPI interrupt ID */
775*91f16700Schasinglulu #define PLAT_CORE_FAULT_IRQ		17
776*91f16700Schasinglulu 
777*91f16700Schasinglulu /* ARM platforms use 3 upper bits of secure interrupt priority */
778*91f16700Schasinglulu #define PLAT_PRI_BITS			3
779*91f16700Schasinglulu 
780*91f16700Schasinglulu /* SGI used for SDEI signalling */
781*91f16700Schasinglulu #define ARM_SDEI_SGI			ARM_IRQ_SEC_SGI_0
782*91f16700Schasinglulu 
783*91f16700Schasinglulu #if SDEI_IN_FCONF
784*91f16700Schasinglulu /* ARM SDEI dynamic private event max count */
785*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_MAX_CNT	3
786*91f16700Schasinglulu 
787*91f16700Schasinglulu /* ARM SDEI dynamic shared event max count */
788*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_MAX_CNT	3
789*91f16700Schasinglulu #else
790*91f16700Schasinglulu /* ARM SDEI dynamic private event numbers */
791*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_0		1000
792*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_1		1001
793*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_2		1002
794*91f16700Schasinglulu 
795*91f16700Schasinglulu /* ARM SDEI dynamic shared event numbers */
796*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_0		2000
797*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_1		2001
798*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_2		2002
799*91f16700Schasinglulu 
800*91f16700Schasinglulu #define ARM_SDEI_PRIVATE_EVENTS \
801*91f16700Schasinglulu 	SDEI_DEFINE_EVENT_0(ARM_SDEI_SGI), \
802*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
803*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
804*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
805*91f16700Schasinglulu 
806*91f16700Schasinglulu #define ARM_SDEI_SHARED_EVENTS \
807*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
808*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
809*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
810*91f16700Schasinglulu #endif /* SDEI_IN_FCONF */
811*91f16700Schasinglulu 
812*91f16700Schasinglulu #endif /* ARM_DEF_H */
813