xref: /arm-trusted-firmware/include/plat/nuvoton/common/npcm845x_arm_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2023, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * Copyright (C) 2017-2023 Nuvoton Ltd.
5*91f16700Schasinglulu  *
6*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
7*91f16700Schasinglulu  */
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #ifndef NPCM845x_ARM_DEF_H
10*91f16700Schasinglulu #define NPCM845x_ARM_DEF_H
11*91f16700Schasinglulu 
12*91f16700Schasinglulu #include <arch.h>
13*91f16700Schasinglulu #include <common/interrupt_props.h>
14*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h>
15*91f16700Schasinglulu #include <drivers/arm/gic_common.h>
16*91f16700Schasinglulu #include <lib/utils_def.h>
17*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_defs.h>
18*91f16700Schasinglulu #include <plat/arm/common/smccc_def.h>
19*91f16700Schasinglulu #include <plat/common/common_def.h>
20*91f16700Schasinglulu 
21*91f16700Schasinglulu /* This flag will add zones to the MMU so that it will be possible to debug */
22*91f16700Schasinglulu #ifdef NPCM845X_DEBUG
23*91f16700Schasinglulu #define ALLOW_DEBUG_MMU
24*91f16700Schasinglulu #undef ALLOW_DEBUG_MMU
25*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */
26*91f16700Schasinglulu 
27*91f16700Schasinglulu #undef CONFIG_TARGET_ARBEL_PALLADIUM
28*91f16700Schasinglulu /******************************************************************************
29*91f16700Schasinglulu  * Definitions common to all ARM standard platforms
30*91f16700Schasinglulu  *****************************************************************************/
31*91f16700Schasinglulu 
32*91f16700Schasinglulu /*
33*91f16700Schasinglulu  * Root of trust key hash lengths
34*91f16700Schasinglulu  */
35*91f16700Schasinglulu #define ARM_ROTPK_HEADER_LEN		19
36*91f16700Schasinglulu #define ARM_ROTPK_HASH_LEN		32
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */
39*91f16700Schasinglulu #define ARM_BL31_PLAT_PARAM_VAL		ULL(0x0f1e2d3c4b5a6978)
40*91f16700Schasinglulu 
41*91f16700Schasinglulu /* No need for system because we have only one cluster */
42*91f16700Schasinglulu #define ARM_SYSTEM_COUNT		U(0)
43*91f16700Schasinglulu 
44*91f16700Schasinglulu #define ARM_CACHE_WRITEBACK_SHIFT	6
45*91f16700Schasinglulu 
46*91f16700Schasinglulu /*
47*91f16700Schasinglulu  * Macros mapping the MPIDR Affinity levels to ARM Platform Power levels.
48*91f16700Schasinglulu  * The power levels have a 1:1 mapping with the MPIDR affinity levels.
49*91f16700Schasinglulu  */
50*91f16700Schasinglulu /* In NPCM845x - refers to cores */
51*91f16700Schasinglulu #define ARM_PWR_LVL0		MPIDR_AFFLVL0
52*91f16700Schasinglulu 
53*91f16700Schasinglulu /* In NPCM845x - refers to cluster */
54*91f16700Schasinglulu #define ARM_PWR_LVL1		MPIDR_AFFLVL1
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /* No need for additional settings because the platform doesn't have system */
57*91f16700Schasinglulu 
58*91f16700Schasinglulu /*
59*91f16700Schasinglulu  * Macros for local power states in ARM platforms encoded by State-ID field
60*91f16700Schasinglulu  * within the power-state parameter.
61*91f16700Schasinglulu  */
62*91f16700Schasinglulu #define NPCM845x_PLAT_PRIMARY_CPU		U(0x0)
63*91f16700Schasinglulu #define NPCM845x_CLUSTER_COUNT		U(1)
64*91f16700Schasinglulu 
65*91f16700Schasinglulu #ifdef SECONDARY_BRINGUP
66*91f16700Schasinglulu #define NPCM845x_MAX_CPU_PER_CLUSTER	U(2)
67*91f16700Schasinglulu #define NPCM845x_PLATFORM_CORE_COUNT	U(2)
68*91f16700Schasinglulu #define NPCM845x_PLATFORM_CLUSTER0_CORE_COUNT	U(2)
69*91f16700Schasinglulu #else
70*91f16700Schasinglulu #define NPCM845x_MAX_CPU_PER_CLUSTER	U(4)
71*91f16700Schasinglulu #define NPCM845x_PLATFORM_CORE_COUNT	U(4)
72*91f16700Schasinglulu #define NPCM845x_PLATFORM_CLUSTER0_CORE_COUNT	U(4)
73*91f16700Schasinglulu #endif /* SECONDARY_BRINGUP */
74*91f16700Schasinglulu 
75*91f16700Schasinglulu #define NPCM845x_SYSTEM_COUNT					U(0)
76*91f16700Schasinglulu 
77*91f16700Schasinglulu /* Memory mapping for NPCM845x */
78*91f16700Schasinglulu #define NPCM845x_REG_BASE			0xf0000000
79*91f16700Schasinglulu #define NPCM845x_REG_SIZE			0x0ff16000
80*91f16700Schasinglulu 
81*91f16700Schasinglulu /*
82*91f16700Schasinglulu  *				DRAM
83*91f16700Schasinglulu  *	0x3fffffff +-------------+
84*91f16700Schasinglulu  *	           |     BL33    | (non-secure)
85*91f16700Schasinglulu  *	0x06200000 +-------------+
86*91f16700Schasinglulu  *	           | BL32 SHARED | (non-secure)
87*91f16700Schasinglulu  *	0x06000000 +-------------+
88*91f16700Schasinglulu  *	           |     BL32    | (secure)
89*91f16700Schasinglulu  *	0x02100000 +-------------+
90*91f16700Schasinglulu  *	           |     BL31    | (secure)
91*91f16700Schasinglulu  *	0x02000000 +-------------+
92*91f16700Schasinglulu  *	           |             | (non-secure)
93*91f16700Schasinglulu  *	0x00000000 +-------------+
94*91f16700Schasinglulu  *
95*91f16700Schasinglulu  *				 Trusted ROM
96*91f16700Schasinglulu  *	0xfff50000 +-------------+
97*91f16700Schasinglulu  *	           |  BL1 (ro)   |
98*91f16700Schasinglulu  *	0xfff40000 +-------------+
99*91f16700Schasinglulu  */
100*91f16700Schasinglulu 
101*91f16700Schasinglulu #define ARM_DRAM1_BASE			ULL(0x00000000)
102*91f16700Schasinglulu #ifndef CONFIG_TARGET_ARBEL_PALLADIUM
103*91f16700Schasinglulu /*
104*91f16700Schasinglulu  * Although npcm845x is 4G,
105*91f16700Schasinglulu  * consider only 2G Trusted Firmware memory allocation
106*91f16700Schasinglulu  */
107*91f16700Schasinglulu #define ARM_DRAM1_SIZE			ULL(0x37000000)
108*91f16700Schasinglulu #else
109*91f16700Schasinglulu #define ARM_DRAM1_SIZE			ULL(0x10000000)
110*91f16700Schasinglulu #define ARM_DRAM1_END			(ARM_DRAM1_BASE + ARM_DRAM1_SIZE - 1U)
111*91f16700Schasinglulu #endif /* CONFIG_TARGET_ARBEL_PALLADIUM */
112*91f16700Schasinglulu 
113*91f16700Schasinglulu /*
114*91f16700Schasinglulu  * The top 16MB of DRAM1 is configured as secure access only using the TZC
115*91f16700Schasinglulu  *	- SCP TZC DRAM: If present, DRAM reserved for SCP use
116*91f16700Schasinglulu  *	- AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use
117*91f16700Schasinglulu  */
118*91f16700Schasinglulu 
119*91f16700Schasinglulu /* Check for redundancy */
120*91f16700Schasinglulu #ifdef NPCM845X_DEBUG
121*91f16700Schasinglulu #define PLAT_ARM_NS_IMAGE_BASE	0x0
122*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */
123*91f16700Schasinglulu 
124*91f16700Schasinglulu #define ARM_TZC_DRAM1_SIZE		UL(0x01000000)
125*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_SIZE		PLAT_ARM_SCP_TZC_DRAM1_SIZE
126*91f16700Schasinglulu #define ARM_SCP_TZC_DRAM1_END		(ARM_SCP_TZC_DRAM1_BASE +	\
127*91f16700Schasinglulu 					ARM_SCP_TZC_DRAM1_SIZE - 1U)
128*91f16700Schasinglulu 
129*91f16700Schasinglulu /*
130*91f16700Schasinglulu  * Define a 2MB region within the TZC secured DRAM for use by EL3 runtime
131*91f16700Schasinglulu  * firmware. This region is meant to be NOLOAD and will not be zero
132*91f16700Schasinglulu  * initialized. Data sections with the attribute `arm_el3_tzc_dram`
133*91f16700Schasinglulu  * will be placed here.
134*91f16700Schasinglulu  *
135*91f16700Schasinglulu  * NPCM845x - Currently the platform doesn't have EL3 implementation
136*91f16700Schasinglulu  * on secured DRAM.
137*91f16700Schasinglulu  */
138*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_BASE		(ARM_SCP_TZC_DRAM1_BASE -	\
139*91f16700Schasinglulu 			ARM_EL3_TZC_DRAM1_SIZE)
140*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_SIZE		UL(0x00200000)	/* 2 MB */
141*91f16700Schasinglulu #define ARM_EL3_TZC_DRAM1_END		(ARM_EL3_TZC_DRAM1_BASE +	\
142*91f16700Schasinglulu 			ARM_EL3_TZC_DRAM1_SIZE - 1U)
143*91f16700Schasinglulu 
144*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_BASE		0x02100000
145*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_SIZE		(ARM_TZC_DRAM1_SIZE -	\
146*91f16700Schasinglulu 			(ARM_SCP_TZC_DRAM1_SIZE + \
147*91f16700Schasinglulu 			ARM_EL3_TZC_DRAM1_SIZE))
148*91f16700Schasinglulu #define ARM_AP_TZC_DRAM1_END		(ARM_AP_TZC_DRAM1_BASE +	\
149*91f16700Schasinglulu 			ARM_AP_TZC_DRAM1_SIZE - 1U)
150*91f16700Schasinglulu 
151*91f16700Schasinglulu /* Define the Access permissions for Secure peripherals to NS_DRAM */
152*91f16700Schasinglulu #define ARM_TZC_NS_DRAM_S_ACCESS	TZC_REGION_S_NONE
153*91f16700Schasinglulu 
154*91f16700Schasinglulu #ifdef SPD_opteed
155*91f16700Schasinglulu /*
156*91f16700Schasinglulu  * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to
157*91f16700Schasinglulu  * load/authenticate the trusted os extra image. The first 512KB of
158*91f16700Schasinglulu  * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading
159*91f16700Schasinglulu  * for OPTEE is paged image which only include the paging part using
160*91f16700Schasinglulu  * virtual memory but without "init" data. OPTEE will copy the "init" data
161*91f16700Schasinglulu  * (from pager image) to the first 512KB of TZC_DRAM, and then copy the
162*91f16700Schasinglulu  * extra image behind the "init" data.
163*91f16700Schasinglulu  */
164*91f16700Schasinglulu #define TSP_SEC_MEM_BASE		ARM_AP_TZC_DRAM1_BASE
165*91f16700Schasinglulu #define TSP_SEC_MEM_SIZE		ARM_AP_TZC_DRAM1_SIZE
166*91f16700Schasinglulu #define BL32_BASE			ARM_AP_TZC_DRAM1_BASE
167*91f16700Schasinglulu #define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
168*91f16700Schasinglulu 									ARM_AP_TZC_DRAM1_SIZE)
169*91f16700Schasinglulu 
170*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_BASE	(	\
171*91f16700Schasinglulu 			ARM_AP_TZC_DRAM1_BASE + ARM_AP_TZC_DRAM1_SIZE -	\
172*91f16700Schasinglulu 			ARM_OPTEE_PAGEABLE_LOAD_SIZE)
173*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_SIZE	UL(0x400000)
174*91f16700Schasinglulu #define ARM_OPTEE_PAGEABLE_LOAD_MEM	MAP_REGION_FLAT(	\
175*91f16700Schasinglulu 			ARM_OPTEE_PAGEABLE_LOAD_BASE,	\
176*91f16700Schasinglulu 			ARM_OPTEE_PAGEABLE_LOAD_SIZE,	\
177*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
178*91f16700Schasinglulu 
179*91f16700Schasinglulu /*
180*91f16700Schasinglulu  * Map the memory for the OP-TEE core (also known as OP-TEE pager
181*91f16700Schasinglulu  * when paging support is enabled).
182*91f16700Schasinglulu  */
183*91f16700Schasinglulu #define ARM_MAP_OPTEE_CORE_MEM		MAP_REGION_FLAT(	\
184*91f16700Schasinglulu 			BL32_BASE, BL32_LIMIT - BL32_BASE,	\
185*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
186*91f16700Schasinglulu #endif /* SPD_opteed */
187*91f16700Schasinglulu 
188*91f16700Schasinglulu #define ARM_NS_DRAM1_BASE		ARM_DRAM1_BASE
189*91f16700Schasinglulu #define ARM_NS_DRAM1_SIZE		(ARM_DRAM1_SIZE -	\
190*91f16700Schasinglulu 			ARM_TZC_DRAM1_SIZE)
191*91f16700Schasinglulu #define ARM_NS_DRAM1_END		(ARM_NS_DRAM1_BASE + \
192*91f16700Schasinglulu 			ARM_NS_DRAM1_SIZE - 1U)
193*91f16700Schasinglulu 
194*91f16700Schasinglulu /* The platform doesn't use DRAM2 but it has to have a value for calculation */
195*91f16700Schasinglulu #define ARM_DRAM2_BASE			0	/* PLAT_ARM_DRAM_BASE */
196*91f16700Schasinglulu #define ARM_DRAM2_SIZE			1	/* PLAT_ARM_DRAM_SIZE */
197*91f16700Schasinglulu #define ARM_DRAM2_END			(ARM_DRAM2_BASE + ARM_DRAM2_SIZE - 1U)
198*91f16700Schasinglulu 
199*91f16700Schasinglulu #define FIRST_EXT_INTERRUPT_NUM	U(32)
200*91f16700Schasinglulu #define ARM_IRQ_SEC_PHY_TIMER	(U(29) + FIRST_EXT_INTERRUPT_NUM)
201*91f16700Schasinglulu 
202*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_0		8
203*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_1		9
204*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_2		10
205*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_3		11
206*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_4		12
207*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_5		13
208*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_6		14
209*91f16700Schasinglulu #define ARM_IRQ_SEC_SGI_7		15
210*91f16700Schasinglulu 
211*91f16700Schasinglulu /*
212*91f16700Schasinglulu  * Define a list of Group 1 Secure and Group 0 interrupt properties
213*91f16700Schasinglulu  * as per GICv3 terminology. On a GICv2 system or mode,
214*91f16700Schasinglulu  * the lists will be merged and treated as Group 0 interrupts.
215*91f16700Schasinglulu  */
216*91f16700Schasinglulu #define ARM_G1S_IRQ_PROPS(grp)	\
217*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER,	\
218*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_LEVEL),	\
219*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1,	\
220*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE),	\
221*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2,	\
222*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE),	\
223*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3,	\
224*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE),	\
225*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4,	\
226*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE),	\
227*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5,	\
228*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE),	\
229*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7,	\
230*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE)
231*91f16700Schasinglulu 
232*91f16700Schasinglulu #define ARM_G0_IRQ_PROPS(grp) \
233*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0,	\
234*91f16700Schasinglulu 			PLAT_SDEI_NORMAL_PRI, (grp), GIC_INTR_CFG_EDGE),	\
235*91f16700Schasinglulu 			INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6,	\
236*91f16700Schasinglulu 			GIC_HIGHEST_SEC_PRIORITY, (grp), GIC_INTR_CFG_EDGE)
237*91f16700Schasinglulu 
238*91f16700Schasinglulu #define ARM_MAP_SHARED_RAM		MAP_REGION_FLAT(	\
239*91f16700Schasinglulu 			ARM_SHARED_RAM_BASE, ARM_SHARED_RAM_SIZE,	\
240*91f16700Schasinglulu 			MT_DEVICE | MT_RW | MT_SECURE)
241*91f16700Schasinglulu 
242*91f16700Schasinglulu #ifdef ALLOW_DEBUG_MMU
243*91f16700Schasinglulu /* In order to be able to debug,
244*91f16700Schasinglulu  * the platform needs to add BL33 and BL32 to MMU as well.
245*91f16700Schasinglulu  */
246*91f16700Schasinglulu #define ARM_MAP_NS_DRAM1		MAP_REGION_FLAT(	\
247*91f16700Schasinglulu 			ARM_NS_DRAM1_BASE, ARM_NS_DRAM1_SIZE,	\
248*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_NS)
249*91f16700Schasinglulu 
250*91f16700Schasinglulu #ifdef BL32_BASE
251*91f16700Schasinglulu #define ARM_MAP_BL32_CORE_MEM		MAP_REGION_FLAT(	\
252*91f16700Schasinglulu 			BL32_BASE, BL32_LIMIT - BL32_BASE,	\
253*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
254*91f16700Schasinglulu #endif /* BL32_BASE */
255*91f16700Schasinglulu 
256*91f16700Schasinglulu #ifdef NPCM845X_DEBUG
257*91f16700Schasinglulu #define ARM_MAP_SEC_BB_MEM		MAP_REGION_FLAT(	\
258*91f16700Schasinglulu 			0xFFFB0000, 0x20000,	\
259*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_NS)
260*91f16700Schasinglulu #endif /* NPCM845X_DEBUG */
261*91f16700Schasinglulu #endif /* BL32_BASE */
262*91f16700Schasinglulu 
263*91f16700Schasinglulu #define ARM_MAP_DRAM2			MAP_REGION_FLAT(	\
264*91f16700Schasinglulu 			ARM_DRAM2_BASE, ARM_DRAM2_SIZE,	\
265*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_NS)
266*91f16700Schasinglulu 
267*91f16700Schasinglulu #define ARM_MAP_TSP_SEC_MEM		MAP_REGION_FLAT(	\
268*91f16700Schasinglulu 			TSP_SEC_MEM_BASE, TSP_SEC_MEM_SIZE,	\
269*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
270*91f16700Schasinglulu 
271*91f16700Schasinglulu #if ARM_BL31_IN_DRAM
272*91f16700Schasinglulu #define ARM_MAP_BL31_SEC_DRAM		MAP_REGION_FLAT(	\
273*91f16700Schasinglulu 			BL31_BASE, PLAT_ARM_MAX_BL31_SIZE,	\
274*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
275*91f16700Schasinglulu #endif /* ARM_BL31_IN_DRAM */
276*91f16700Schasinglulu 
277*91f16700Schasinglulu /* Currently the platform doesn't have EL3 implementation on secured DRAM. */
278*91f16700Schasinglulu #define ARM_MAP_EL3_TZC_DRAM		MAP_REGION_FLAT(	\
279*91f16700Schasinglulu 			ARM_EL3_TZC_DRAM1_BASE,	\
280*91f16700Schasinglulu 			ARM_EL3_TZC_DRAM1_SIZE,	\
281*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
282*91f16700Schasinglulu 
283*91f16700Schasinglulu #if defined(SPD_spmd)
284*91f16700Schasinglulu #define ARM_MAP_TRUSTED_DRAM		MAP_REGION_FLAT(	\
285*91f16700Schasinglulu 			PLAT_ARM_TRUSTED_DRAM_BASE,	\
286*91f16700Schasinglulu 			PLAT_ARM_TRUSTED_DRAM_SIZE,	\
287*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
288*91f16700Schasinglulu #endif /* SPD_spmd */
289*91f16700Schasinglulu 
290*91f16700Schasinglulu /*
291*91f16700Schasinglulu  * Mapping for the BL1 RW region. This mapping is needed by BL2
292*91f16700Schasinglulu  * in order to share the Mbed TLS heap. Since the heap is allocated
293*91f16700Schasinglulu  * inside BL1, it resides in the BL1 RW region. Hence, BL2 needs access
294*91f16700Schasinglulu  * to the BL1 RW region in order to be able to access the heap.
295*91f16700Schasinglulu  */
296*91f16700Schasinglulu #define ARM_MAP_BL1_RW		MAP_REGION_FLAT(	\
297*91f16700Schasinglulu 			BL1_RW_BASE, BL1_RW_LIMIT - BL1_RW_BASE,	\
298*91f16700Schasinglulu 			MT_MEMORY | MT_RW | EL3_PAS)
299*91f16700Schasinglulu 
300*91f16700Schasinglulu /*
301*91f16700Schasinglulu  * If SEPARATE_CODE_AND_RODATA=1 the platform will define a region
302*91f16700Schasinglulu  * for each section, otherwise one region containing both sections
303*91f16700Schasinglulu  * is defined.
304*91f16700Schasinglulu  */
305*91f16700Schasinglulu #if SEPARATE_CODE_AND_RODATA
306*91f16700Schasinglulu #define ARM_MAP_BL_RO		MAP_REGION_FLAT(	\
307*91f16700Schasinglulu 			BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE,	\
308*91f16700Schasinglulu 			MT_CODE | EL3_PAS),	\
309*91f16700Schasinglulu 			MAP_REGION_FLAT(BL_RO_DATA_BASE,	\
310*91f16700Schasinglulu 			BL_RO_DATA_END - BL_RO_DATA_BASE,	\
311*91f16700Schasinglulu 			MT_RO_DATA | EL3_PAS)
312*91f16700Schasinglulu #else
313*91f16700Schasinglulu #define ARM_MAP_BL_RO		MAP_REGION_FLAT(	\
314*91f16700Schasinglulu 			BL_CODE_BASE, BL_CODE_END - BL_CODE_BASE,	\
315*91f16700Schasinglulu 			MT_CODE | EL3_PAS)
316*91f16700Schasinglulu #endif /* SEPARATE_CODE_AND_RODATA */
317*91f16700Schasinglulu 
318*91f16700Schasinglulu #if USE_COHERENT_MEM
319*91f16700Schasinglulu #define ARM_MAP_BL_COHERENT_RAM		MAP_REGION_FLAT(	\
320*91f16700Schasinglulu 			BL_COHERENT_RAM_BASE,	\
321*91f16700Schasinglulu 			BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \
322*91f16700Schasinglulu 			MT_DEVICE | MT_RW | EL3_PAS)
323*91f16700Schasinglulu #endif /* USE_COHERENT_MEM */
324*91f16700Schasinglulu 
325*91f16700Schasinglulu #if USE_ROMLIB
326*91f16700Schasinglulu #define ARM_MAP_ROMLIB_CODE		MAP_REGION_FLAT(	\
327*91f16700Schasinglulu 			ROMLIB_RO_BASE,	\
328*91f16700Schasinglulu 			ROMLIB_RO_LIMIT - ROMLIB_RO_BASE,	\
329*91f16700Schasinglulu 			MT_CODE | MT_SECURE)
330*91f16700Schasinglulu 
331*91f16700Schasinglulu #define ARM_MAP_ROMLIB_DATA		MAP_REGION_FLAT(	\
332*91f16700Schasinglulu 			ROMLIB_RW_BASE,	\
333*91f16700Schasinglulu 			ROMLIB_RW_END - ROMLIB_RW_BASE,	\
334*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
335*91f16700Schasinglulu #endif /* USE_ROMLIB */
336*91f16700Schasinglulu 
337*91f16700Schasinglulu /*
338*91f16700Schasinglulu  * Map mem_protect flash region with read and write permissions
339*91f16700Schasinglulu  */
340*91f16700Schasinglulu #define ARM_V2M_MAP_MEM_PROTECT		MAP_REGION_FLAT(	\
341*91f16700Schasinglulu 			PLAT_ARM_MEM_PROT_ADDR,	\
342*91f16700Schasinglulu 			V2M_FLASH_BLOCK_SIZE,	\
343*91f16700Schasinglulu 			MT_DEVICE | MT_RW | MT_SECURE)
344*91f16700Schasinglulu /*
345*91f16700Schasinglulu  * Map the region for device tree configuration with read and write permissions
346*91f16700Schasinglulu  */
347*91f16700Schasinglulu #define ARM_MAP_BL_CONFIG_REGION	MAP_REGION_FLAT(	\
348*91f16700Schasinglulu 			ARM_BL_RAM_BASE,	\
349*91f16700Schasinglulu 			(ARM_FW_CONFIGS_LIMIT - ARM_BL_RAM_BASE),	\
350*91f16700Schasinglulu 			MT_MEMORY | MT_RW | MT_SECURE)
351*91f16700Schasinglulu 
352*91f16700Schasinglulu /*
353*91f16700Schasinglulu  * The max number of regions like RO(code), coherent and data required by
354*91f16700Schasinglulu  * different BL stages which need to be mapped in the MMU.
355*91f16700Schasinglulu  */
356*91f16700Schasinglulu #define ARM_BL_REGIONS			10
357*91f16700Schasinglulu 
358*91f16700Schasinglulu #define MAX_MMAP_REGIONS		(	\
359*91f16700Schasinglulu 			PLAT_ARM_MMAP_ENTRIES + ARM_BL_REGIONS)
360*91f16700Schasinglulu 
361*91f16700Schasinglulu /* Memory mapped Generic timer interfaces  */
362*91f16700Schasinglulu #define ARM_SYS_CNTCTL_BASE			UL(0XF07FC000)
363*91f16700Schasinglulu 
364*91f16700Schasinglulu #define ARM_CONSOLE_BAUDRATE		115200
365*91f16700Schasinglulu 
366*91f16700Schasinglulu /*
367*91f16700Schasinglulu  * The TBBR document specifies a watchdog timeout of 256 seconds. SP805
368*91f16700Schasinglulu  * asserts reset after two consecutive countdowns (2 x 128 = 256 sec)
369*91f16700Schasinglulu  */
370*91f16700Schasinglulu #define ARM_TWDG_TIMEOUT_SEC		128
371*91f16700Schasinglulu #define ARM_TWDG_LOAD_VAL		(ARM_SP805_TWDG_CLK_HZ * \
372*91f16700Schasinglulu 			ARM_TWDG_TIMEOUT_SEC)
373*91f16700Schasinglulu 
374*91f16700Schasinglulu /******************************************************************************
375*91f16700Schasinglulu  * Required platform porting definitions common to all ARM standard platforms
376*91f16700Schasinglulu  *****************************************************************************/
377*91f16700Schasinglulu 
378*91f16700Schasinglulu /*
379*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
380*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
381*91f16700Schasinglulu  * integrated and external caches (64 on Arbel).
382*91f16700Schasinglulu  */
383*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE		(U(1) << ARM_CACHE_WRITEBACK_SHIFT)
384*91f16700Schasinglulu 
385*91f16700Schasinglulu /*
386*91f16700Schasinglulu  * To enable FW_CONFIG to be loaded by BL1, define the corresponding base
387*91f16700Schasinglulu  * and limit. Leave enough space of BL2 meminfo.
388*91f16700Schasinglulu  */
389*91f16700Schasinglulu #define ARM_FW_CONFIG_BASE		(ARM_BL_RAM_BASE + sizeof(meminfo_t))
390*91f16700Schasinglulu #define ARM_FW_CONFIG_LIMIT		(	\
391*91f16700Schasinglulu 			(ARM_BL_RAM_BASE + PAGE_SIZE) + (PAGE_SIZE / 2U))
392*91f16700Schasinglulu 
393*91f16700Schasinglulu /*
394*91f16700Schasinglulu  * Boot parameters passed from BL2 to BL31/BL32 are stored here
395*91f16700Schasinglulu  */
396*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_BASE		(ARM_FW_CONFIG_LIMIT)
397*91f16700Schasinglulu #define ARM_BL2_MEM_DESC_LIMIT		(	\
398*91f16700Schasinglulu 			ARM_BL2_MEM_DESC_BASE + (PAGE_SIZE / 2U))
399*91f16700Schasinglulu 
400*91f16700Schasinglulu /*
401*91f16700Schasinglulu  * Define limit of firmware configuration memory:
402*91f16700Schasinglulu  * ARM_FW_CONFIG + ARM_BL2_MEM_DESC memory
403*91f16700Schasinglulu  */
404*91f16700Schasinglulu #define ARM_FW_CONFIGS_LIMIT		(ARM_BL_RAM_BASE + (PAGE_SIZE * 2))
405*91f16700Schasinglulu 
406*91f16700Schasinglulu /*******************************************************************************
407*91f16700Schasinglulu  * BL1 specific defines.
408*91f16700Schasinglulu  * BL1 RW data is relocated from ROM to RAM at runtime so we need
409*91f16700Schasinglulu  * two sets of addresses.
410*91f16700Schasinglulu  ******************************************************************************/
411*91f16700Schasinglulu #define BL1_RO_BASE			PLAT_ARM_TRUSTED_ROM_BASE
412*91f16700Schasinglulu #define BL1_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE +	\
413*91f16700Schasinglulu 			(PLAT_ARM_TRUSTED_ROM_SIZE - PLAT_ARM_MAX_ROMLIB_RO_SIZE))
414*91f16700Schasinglulu /*
415*91f16700Schasinglulu  * Put BL1 RW at the top of the Trusted SRAM.
416*91f16700Schasinglulu  */
417*91f16700Schasinglulu #define BL1_RW_BASE			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE -	\
418*91f16700Schasinglulu 			(PLAT_ARM_MAX_BL1_RW_SIZE + PLAT_ARM_MAX_ROMLIB_RW_SIZE))
419*91f16700Schasinglulu #define BL1_RW_LIMIT			(ARM_BL_RAM_BASE +	\
420*91f16700Schasinglulu 			(ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE))
421*91f16700Schasinglulu 
422*91f16700Schasinglulu #define ROMLIB_RO_BASE			BL1_RO_LIMIT
423*91f16700Schasinglulu #define ROMLIB_RO_LIMIT			(	\
424*91f16700Schasinglulu 			PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE)
425*91f16700Schasinglulu 
426*91f16700Schasinglulu #define ROMLIB_RW_BASE			(BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE)
427*91f16700Schasinglulu #define ROMLIB_RW_END			(	\
428*91f16700Schasinglulu 			ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE)
429*91f16700Schasinglulu 
430*91f16700Schasinglulu /******************************************************************************
431*91f16700Schasinglulu  * BL2 specific defines.
432*91f16700Schasinglulu  *****************************************************************************/
433*91f16700Schasinglulu #if BL2_AT_EL3
434*91f16700Schasinglulu /* Put BL2 towards the middle of the Trusted SRAM */
435*91f16700Schasinglulu #define BL2_BASE			(ARM_TRUSTED_SRAM_BASE +	\
436*91f16700Schasinglulu 			PLAT_ARM_TRUSTED_SRAM_SIZE >> 1) + 0x2000)
437*91f16700Schasinglulu #define BL2_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
438*91f16700Schasinglulu #else
439*91f16700Schasinglulu /*
440*91f16700Schasinglulu  * Put BL2 just below BL1.
441*91f16700Schasinglulu  */
442*91f16700Schasinglulu #define BL2_BASE			(BL1_RW_BASE - PLAT_ARM_MAX_BL2_SIZE)
443*91f16700Schasinglulu #define BL2_LIMIT			BL1_RW_BASE
444*91f16700Schasinglulu #endif /* BL2_AT_EL3 */
445*91f16700Schasinglulu 
446*91f16700Schasinglulu /*******************************************************************************
447*91f16700Schasinglulu  * BL31 specific defines.
448*91f16700Schasinglulu  ******************************************************************************/
449*91f16700Schasinglulu #if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION
450*91f16700Schasinglulu /*
451*91f16700Schasinglulu  * Put BL31 at the bottom of TZC secured DRAM
452*91f16700Schasinglulu  */
453*91f16700Schasinglulu #define BL31_BASE			ARM_AP_TZC_DRAM1_BASE
454*91f16700Schasinglulu #define BL31_LIMIT			(	\
455*91f16700Schasinglulu 			ARM_AP_TZC_DRAM1_BASE + PLAT_ARM_MAX_BL31_SIZE)
456*91f16700Schasinglulu 
457*91f16700Schasinglulu /*
458*91f16700Schasinglulu  * For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM.
459*91f16700Schasinglulu  * And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten.
460*91f16700Schasinglulu  */
461*91f16700Schasinglulu #if SEPARATE_NOBITS_REGION
462*91f16700Schasinglulu #define BL31_NOBITS_BASE		BL2_BASE
463*91f16700Schasinglulu #define BL31_NOBITS_LIMIT		BL2_LIMIT
464*91f16700Schasinglulu #endif /* SEPARATE_NOBITS_REGION */
465*91f16700Schasinglulu #elif (RESET_TO_BL31)
466*91f16700Schasinglulu /* Ensure Position Independent support (PIE) is enabled for this config.*/
467*91f16700Schasinglulu #if !ENABLE_PIE
468*91f16700Schasinglulu #error "BL31 must be a PIE if RESET_TO_BL31=1."
469*91f16700Schasinglulu #endif /* !ENABLE_PIE */
470*91f16700Schasinglulu /*
471*91f16700Schasinglulu  * Since this is PIE, we can define BL31_BASE to 0x0 since this macro is solely
472*91f16700Schasinglulu  * used for building BL31 and not used for loading BL31.
473*91f16700Schasinglulu  */
474*91f16700Schasinglulu #define NEW_SRAM_ALLOCATION
475*91f16700Schasinglulu 
476*91f16700Schasinglulu #ifdef NEW_SRAM_ALLOCATION
477*91f16700Schasinglulu 	#define BL31_BASE				0x20001000
478*91f16700Schasinglulu #else
479*91f16700Schasinglulu 	#define BL31_BASE				0x20001000
480*91f16700Schasinglulu #endif /* NEW_SRAM_ALLOCATION */
481*91f16700Schasinglulu 
482*91f16700Schasinglulu #define BL31_LIMIT			BL2_BASE	/* PLAT_ARM_MAX_BL31_SIZE */
483*91f16700Schasinglulu #else
484*91f16700Schasinglulu /* Put BL31 below BL2 in the Trusted SRAM.*/
485*91f16700Schasinglulu #define BL31_BASE			((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) -	\
486*91f16700Schasinglulu 			PLAT_ARM_MAX_BL31_SIZE)
487*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT		BL2_BASE
488*91f16700Schasinglulu 
489*91f16700Schasinglulu /*
490*91f16700Schasinglulu  * For BL2_AT_EL3 make sure the BL31 can grow up until BL2_BASE.
491*91f16700Schasinglulu  * This is because in the BL2_AT_EL3 configuration, BL2 is always resident.
492*91f16700Schasinglulu  */
493*91f16700Schasinglulu #if BL2_AT_EL3
494*91f16700Schasinglulu #define BL31_LIMIT			BL2_BASE
495*91f16700Schasinglulu #else
496*91f16700Schasinglulu #define BL31_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
497*91f16700Schasinglulu #endif /* BL2_AT_EL3 */
498*91f16700Schasinglulu #endif /* ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION */
499*91f16700Schasinglulu 
500*91f16700Schasinglulu /*
501*91f16700Schasinglulu  * BL32 is mandatory in AArch32. In AArch64, undefine BL32_BASE if there is
502*91f16700Schasinglulu  * no SPD and no SPM-MM, as they are the only ones that can be used as BL32.
503*91f16700Schasinglulu  */
504*91f16700Schasinglulu #if defined(SPD_none) && !SPM_MM
505*91f16700Schasinglulu #undef BL32_BASE
506*91f16700Schasinglulu #endif /* SPD_none && !SPM_MM */
507*91f16700Schasinglulu 
508*91f16700Schasinglulu /******************************************************************************
509*91f16700Schasinglulu  * FWU Images: NS_BL1U, BL2U & NS_BL2U defines.
510*91f16700Schasinglulu  *****************************************************************************/
511*91f16700Schasinglulu #define BL2U_BASE			BL2_BASE
512*91f16700Schasinglulu #define BL2U_LIMIT			BL2_LIMIT
513*91f16700Schasinglulu 
514*91f16700Schasinglulu #define NS_BL2U_BASE			ARM_NS_DRAM1_BASE
515*91f16700Schasinglulu #define NS_BL1U_BASE			(PLAT_ARM_NVM_BASE + UL(0x03EB8000))
516*91f16700Schasinglulu 
517*91f16700Schasinglulu /*
518*91f16700Schasinglulu  * ID of the secure physical generic timer interrupt used by the TSP.
519*91f16700Schasinglulu  */
520*91f16700Schasinglulu #define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER
521*91f16700Schasinglulu 
522*91f16700Schasinglulu /*
523*91f16700Schasinglulu  * One cache line needed for bakery locks on ARM platforms
524*91f16700Schasinglulu  */
525*91f16700Schasinglulu #define PLAT_PERCPU_BAKERY_LOCK_SIZE		(1 * CACHE_WRITEBACK_GRANULE)
526*91f16700Schasinglulu 
527*91f16700Schasinglulu /* Priority levels for ARM platforms */
528*91f16700Schasinglulu #define PLAT_RAS_PRI			0x10
529*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI		0x60
530*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI		0x70
531*91f16700Schasinglulu 
532*91f16700Schasinglulu /* ARM platforms use 3 upper bits of secure interrupt priority */
533*91f16700Schasinglulu #define ARM_PRI_BITS			3
534*91f16700Schasinglulu 
535*91f16700Schasinglulu /* SGI used for SDEI signalling */
536*91f16700Schasinglulu #define ARM_SDEI_SGI			ARM_IRQ_SEC_SGI_0
537*91f16700Schasinglulu 
538*91f16700Schasinglulu #if SDEI_IN_FCONF
539*91f16700Schasinglulu /* ARM SDEI dynamic private event max count */
540*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_MAX_CNT	3
541*91f16700Schasinglulu 
542*91f16700Schasinglulu /* ARM SDEI dynamic shared event max count */
543*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_MAX_CNT	3
544*91f16700Schasinglulu #else
545*91f16700Schasinglulu /* ARM SDEI dynamic private event numbers */
546*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_0		1000
547*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_1		1001
548*91f16700Schasinglulu #define ARM_SDEI_DP_EVENT_2		1002
549*91f16700Schasinglulu 
550*91f16700Schasinglulu /* ARM SDEI dynamic shared event numbers */
551*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_0		2000
552*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_1		2001
553*91f16700Schasinglulu #define ARM_SDEI_DS_EVENT_2		2002
554*91f16700Schasinglulu 
555*91f16700Schasinglulu #define ARM_SDEI_PRIVATE_EVENTS \
556*91f16700Schasinglulu 	SDEI_DEFINE_EVENT_0(ARM_SDEI_SGI), \
557*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
558*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
559*91f16700Schasinglulu 	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
560*91f16700Schasinglulu 
561*91f16700Schasinglulu #define ARM_SDEI_SHARED_EVENTS \
562*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
563*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
564*91f16700Schasinglulu 	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
565*91f16700Schasinglulu #endif /* SDEI_IN_FCONF */
566*91f16700Schasinglulu 
567*91f16700Schasinglulu #endif /* ARM_DEF_H */
568