arm_def.h 24.9 KB
Newer Older
1
/*
johpow01's avatar
johpow01 committed
2
 * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3
 *
dp-arm's avatar
dp-arm committed
4
 * SPDX-License-Identifier: BSD-3-Clause
5
 */
6
7
#ifndef ARM_DEF_H
#define ARM_DEF_H
8

9
10
11
12
13
14
#include <arch.h>
#include <common/interrupt_props.h>
#include <common/tbbr/tbbr_img_def.h>
#include <drivers/arm/gic_common.h>
#include <lib/utils_def.h>
#include <lib/xlat_tables/xlat_tables_defs.h>
15
#include <plat/arm/common/smccc_def.h>
16
#include <plat/common/common_def.h>
17
18
19
20
21

/******************************************************************************
 * Definitions common to all ARM standard platforms
 *****************************************************************************/

22
23
24
25
26
27
/*
 * Root of trust key hash lengths
 */
#define ARM_ROTPK_HEADER_LEN		19
#define ARM_ROTPK_HASH_LEN		32

28
/* Special value used to verify platform parameters from BL2 to BL31 */
29
#define ARM_BL31_PLAT_PARAM_VAL		ULL(0x0f1e2d3c4b5a6978)
30

31
#define ARM_SYSTEM_COUNT		U(1)
32
33
34

#define ARM_CACHE_WRITEBACK_SHIFT	6

35
36
37
38
39
40
/*
 * Macros mapping the MPIDR Affinity levels to ARM Platform Power levels. The
 * power levels have a 1:1 mapping with the MPIDR affinity levels.
 */
#define ARM_PWR_LVL0		MPIDR_AFFLVL0
#define ARM_PWR_LVL1		MPIDR_AFFLVL1
41
#define ARM_PWR_LVL2		MPIDR_AFFLVL2
42
#define ARM_PWR_LVL3		MPIDR_AFFLVL3
43
44
45
46
47
48

/*
 *  Macros for local power states in ARM platforms encoded by State-ID field
 *  within the power-state parameter.
 */
/* Local power state for power domains in Run state. */
49
#define ARM_LOCAL_STATE_RUN	U(0)
50
/* Local power state for retention. Valid only for CPU power domains */
51
#define ARM_LOCAL_STATE_RET	U(1)
52
53
/* Local power state for OFF/power-down. Valid for CPU and cluster power
   domains */
54
#define ARM_LOCAL_STATE_OFF	U(2)
55

56
57
58
59
60
61
/* Memory location options for TSP */
#define ARM_TRUSTED_SRAM_ID		0
#define ARM_TRUSTED_DRAM_ID		1
#define ARM_DRAM_ID			2

/* The first 4KB of Trusted SRAM are used as shared memory */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
62
#define ARM_TRUSTED_SRAM_BASE		UL(0x04000000)
63
#define ARM_SHARED_RAM_BASE		ARM_TRUSTED_SRAM_BASE
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
64
#define ARM_SHARED_RAM_SIZE		UL(0x00001000)	/* 4 KB */
65
66
67
68
69
70
71
72
73
74
75
76

/* The remaining Trusted SRAM is used to load the BL images */
#define ARM_BL_RAM_BASE			(ARM_SHARED_RAM_BASE +	\
					 ARM_SHARED_RAM_SIZE)
#define ARM_BL_RAM_SIZE			(PLAT_ARM_TRUSTED_SRAM_SIZE -	\
					 ARM_SHARED_RAM_SIZE)

/*
 * The top 16MB of DRAM1 is configured as secure access only using the TZC
 *   - SCP TZC DRAM: If present, DRAM reserved for SCP use
 *   - AP TZC DRAM: The remaining TZC secured DRAM reserved for AP use
 */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
77
#define ARM_TZC_DRAM1_SIZE		UL(0x01000000)
78
79
80

#define ARM_SCP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
					 ARM_DRAM1_SIZE -		\
johpow01's avatar
johpow01 committed
81
82
					 ARM_SCP_TZC_DRAM1_SIZE -	\
					 ARM_L1_GPT_SIZE)
83
84
#define ARM_SCP_TZC_DRAM1_SIZE		PLAT_ARM_SCP_TZC_DRAM1_SIZE
#define ARM_SCP_TZC_DRAM1_END		(ARM_SCP_TZC_DRAM1_BASE +	\
85
					 ARM_SCP_TZC_DRAM1_SIZE - 1U)
86

87
/*
johpow01's avatar
johpow01 committed
88
 * Define a region within the TZC secured DRAM for use by EL3 runtime
89
90
91
92
 * firmware. This region is meant to be NOLOAD and will not be zero
 * initialized. Data sections with the attribute `arm_el3_tzc_dram` will be
 * placed here.
 */
johpow01's avatar
johpow01 committed
93
94
95
96
#if ENABLE_RME
#define ARM_EL3_TZC_DRAM1_SIZE		UL(0x00100000) /* 1 MB */
#else
/* Reserve 2MB region as EL3 DRAM area */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
97
#define ARM_EL3_TZC_DRAM1_SIZE		UL(0x00200000) /* 2 MB */
johpow01's avatar
johpow01 committed
98
99
100
#endif

#define ARM_EL3_TZC_DRAM1_BASE		(ARM_SCP_TZC_DRAM1_BASE - ARM_EL3_TZC_DRAM1_SIZE)
101
#define ARM_EL3_TZC_DRAM1_END		(ARM_EL3_TZC_DRAM1_BASE +	\
102
					ARM_EL3_TZC_DRAM1_SIZE - 1U)
103

104
105
106
107
#define ARM_AP_TZC_DRAM1_BASE		(ARM_DRAM1_BASE +		\
					 ARM_DRAM1_SIZE -		\
					 ARM_TZC_DRAM1_SIZE)
#define ARM_AP_TZC_DRAM1_SIZE		(ARM_TZC_DRAM1_SIZE -		\
108
					 (ARM_SCP_TZC_DRAM1_SIZE +	\
johpow01's avatar
johpow01 committed
109
110
					 ARM_EL3_TZC_DRAM1_SIZE +	\
					 ARM_L1_GPT_SIZE))
111
#define ARM_AP_TZC_DRAM1_END		(ARM_AP_TZC_DRAM1_BASE +	\
112
					 ARM_AP_TZC_DRAM1_SIZE - 1U)
113

114
115
116
117
118
119
120
121
122
123
124
125
/* Define the Access permissions for Secure peripherals to NS_DRAM */
#if ARM_CRYPTOCELL_INTEG
/*
 * Allow Secure peripheral to read NS DRAM when integrated with CryptoCell.
 * This is required by CryptoCell to authenticate BL33 which is loaded
 * into the Non Secure DDR.
 */
#define ARM_TZC_NS_DRAM_S_ACCESS	TZC_REGION_S_RD
#else
#define ARM_TZC_NS_DRAM_S_ACCESS	TZC_REGION_S_NONE
#endif

126
127
#ifdef SPD_opteed
/*
128
129
130
131
132
133
134
 * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to
 * load/authenticate the trusted os extra image. The first 512KB of
 * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading
 * for OPTEE is paged image which only include the paging part using
 * virtual memory but without "init" data. OPTEE will copy the "init" data
 * (from pager image) to the first 512KB of TZC_DRAM, and then copy the
 * extra image behind the "init" data.
135
 */
136
137
138
#define ARM_OPTEE_PAGEABLE_LOAD_BASE	(ARM_AP_TZC_DRAM1_BASE + \
					 ARM_AP_TZC_DRAM1_SIZE - \
					 ARM_OPTEE_PAGEABLE_LOAD_SIZE)
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
139
#define ARM_OPTEE_PAGEABLE_LOAD_SIZE	UL(0x400000)
140
141
142
143
#define ARM_OPTEE_PAGEABLE_LOAD_MEM	MAP_REGION_FLAT(		\
					ARM_OPTEE_PAGEABLE_LOAD_BASE,	\
					ARM_OPTEE_PAGEABLE_LOAD_SIZE,	\
					MT_MEMORY | MT_RW | MT_SECURE)
144
145
146
147
148
149
150
151
152

/*
 * Map the memory for the OP-TEE core (also known as OP-TEE pager when paging
 * support is enabled).
 */
#define ARM_MAP_OPTEE_CORE_MEM		MAP_REGION_FLAT(		\
						BL32_BASE,		\
						BL32_LIMIT - BL32_BASE,	\
						MT_MEMORY | MT_RW | MT_SECURE)
153
#endif /* SPD_opteed */
154

johpow01's avatar
johpow01 committed
155
156
157
158
159
160
161
162
163
164
#if ENABLE_RME
#define ARM_L1_GPT_ADDR_BASE		(ARM_DRAM1_BASE + ARM_DRAM1_SIZE \
							- ARM_L1_GPT_SIZE)
#define ARM_L1_GPT_SIZE			(UL(1)<<18)
#define ARM_L1_GPT_END			(ARM_L1_GPT_ADDR_BASE + \
						ARM_L1_GPT_SIZE - 1U)
#else
#define ARM_L1_GPT_SIZE			UL(0)
#endif /* ENABLE_RME */

165
166
167
168
#define ARM_NS_DRAM1_BASE		ARM_DRAM1_BASE
#define ARM_NS_DRAM1_SIZE		(ARM_DRAM1_SIZE -		\
					 ARM_TZC_DRAM1_SIZE)
#define ARM_NS_DRAM1_END		(ARM_NS_DRAM1_BASE +		\
169
					 ARM_NS_DRAM1_SIZE - 1U)
170

171
172
#define ARM_DRAM1_BASE			ULL(0x80000000)
#define ARM_DRAM1_SIZE			ULL(0x80000000)
173
#define ARM_DRAM1_END			(ARM_DRAM1_BASE +		\
174
					 ARM_DRAM1_SIZE - 1U)
175

176
#define ARM_DRAM2_BASE			PLAT_ARM_DRAM2_BASE
177
178
#define ARM_DRAM2_SIZE			PLAT_ARM_DRAM2_SIZE
#define ARM_DRAM2_END			(ARM_DRAM2_BASE +		\
179
					 ARM_DRAM2_SIZE - 1U)
180
181
182
183
184
185
186
187
188
189
190
191

#define ARM_IRQ_SEC_PHY_TIMER		29

#define ARM_IRQ_SEC_SGI_0		8
#define ARM_IRQ_SEC_SGI_1		9
#define ARM_IRQ_SEC_SGI_2		10
#define ARM_IRQ_SEC_SGI_3		11
#define ARM_IRQ_SEC_SGI_4		12
#define ARM_IRQ_SEC_SGI_5		13
#define ARM_IRQ_SEC_SGI_6		14
#define ARM_IRQ_SEC_SGI_7		15

192
193
194
195
196
197
/*
 * Define a list of Group 1 Secure and Group 0 interrupt properties as per GICv3
 * terminology. On a GICv2 system or mode, the lists will be merged and treated
 * as Group 0 interrupts.
 */
#define ARM_G1S_IRQ_PROPS(grp) \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
198
	INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \
199
			GIC_INTR_CFG_LEVEL), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
200
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \
201
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
202
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, (grp), \
203
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
204
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, (grp), \
205
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
206
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, (grp), \
207
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
208
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, (grp), \
209
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
210
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, (grp), \
211
212
213
			GIC_INTR_CFG_EDGE)

#define ARM_G0_IRQ_PROPS(grp) \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
214
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, (grp), \
215
			GIC_INTR_CFG_EDGE), \
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
216
	INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, (grp), \
217
218
			GIC_INTR_CFG_EDGE)

johpow01's avatar
johpow01 committed
219
220
221
222
223
224
225
#if ENABLE_RME
/* With RME, EL3 is in ROOT PAS */
#define EL3_PAS				MT_ROOT
#else
#define EL3_PAS				MT_SECURE
#endif /* ENABLE_RME */

226
227
228
#define ARM_MAP_SHARED_RAM		MAP_REGION_FLAT(		\
						ARM_SHARED_RAM_BASE,	\
						ARM_SHARED_RAM_SIZE,	\
johpow01's avatar
johpow01 committed
229
						MT_DEVICE | MT_RW | EL3_PAS)
230
231
232
233
234
235

#define ARM_MAP_NS_DRAM1		MAP_REGION_FLAT(		\
						ARM_NS_DRAM1_BASE,	\
						ARM_NS_DRAM1_SIZE,	\
						MT_MEMORY | MT_RW | MT_NS)

236
237
238
239
240
#define ARM_MAP_DRAM2			MAP_REGION_FLAT(		\
						ARM_DRAM2_BASE,		\
						ARM_DRAM2_SIZE,		\
						MT_MEMORY | MT_RW | MT_NS)

241
242
243
244
245
#define ARM_MAP_TSP_SEC_MEM		MAP_REGION_FLAT(		\
						TSP_SEC_MEM_BASE,	\
						TSP_SEC_MEM_SIZE,	\
						MT_MEMORY | MT_RW | MT_SECURE)

David Wang's avatar
David Wang committed
246
247
248
249
250
251
#if ARM_BL31_IN_DRAM
#define ARM_MAP_BL31_SEC_DRAM		MAP_REGION_FLAT(		\
						BL31_BASE,		\
						PLAT_ARM_MAX_BL31_SIZE,	\
						MT_MEMORY | MT_RW | MT_SECURE)
#endif
252

253
254
255
#define ARM_MAP_EL3_TZC_DRAM		MAP_REGION_FLAT(			\
						ARM_EL3_TZC_DRAM1_BASE,	\
						ARM_EL3_TZC_DRAM1_SIZE,	\
johpow01's avatar
johpow01 committed
256
						MT_MEMORY | MT_RW | EL3_PAS)
257

258
259
260
261
262
263
264
#if defined(SPD_spmd)
#define ARM_MAP_TRUSTED_DRAM		MAP_REGION_FLAT(		    \
						PLAT_ARM_TRUSTED_DRAM_BASE, \
						PLAT_ARM_TRUSTED_DRAM_SIZE, \
						MT_MEMORY | MT_RW | MT_SECURE)
#endif

johpow01's avatar
johpow01 committed
265
266
267
268
269
270
271
272
273
274
275
276
277
#if ENABLE_RME
#define ARM_MAP_RMM_DRAM		MAP_REGION_FLAT(		    \
						PLAT_ARM_RMM_BASE, \
						PLAT_ARM_RMM_SIZE, \
						MT_MEMORY | MT_RW | MT_REALM)


#define ARM_MAP_GPT_L1_DRAM		MAP_REGION_FLAT(		   \
						ARM_L1_GPT_ADDR_BASE,	   \
						ARM_L1_GPT_SIZE,	   \
						MT_MEMORY | MT_RW | EL3_PAS)

#endif /* ENABLE_RME */
278

279
280
281
282
283
284
285
286
287
/*
 * Mapping for the BL1 RW region. This mapping is needed by BL2 in order to
 * share the Mbed TLS heap. Since the heap is allocated inside BL1, it resides
 * in the BL1 RW region. Hence, BL2 needs access to the BL1 RW region in order
 * to be able to access the heap.
 */
#define ARM_MAP_BL1_RW		MAP_REGION_FLAT(	\
					BL1_RW_BASE,	\
					BL1_RW_LIMIT - BL1_RW_BASE, \
johpow01's avatar
johpow01 committed
288
					MT_MEMORY | MT_RW | EL3_PAS)
289

290
291
292
293
/*
 * If SEPARATE_CODE_AND_RODATA=1 we define a region for each section
 * otherwise one region is defined containing both.
 */
294
#if SEPARATE_CODE_AND_RODATA
295
#define ARM_MAP_BL_RO			MAP_REGION_FLAT(			\
296
297
						BL_CODE_BASE,			\
						BL_CODE_END - BL_CODE_BASE,	\
johpow01's avatar
johpow01 committed
298
						MT_CODE | EL3_PAS),		\
299
					MAP_REGION_FLAT(			\
300
301
302
						BL_RO_DATA_BASE,		\
						BL_RO_DATA_END			\
							- BL_RO_DATA_BASE,	\
johpow01's avatar
johpow01 committed
303
						MT_RO_DATA | EL3_PAS)
304
305
306
307
#else
#define ARM_MAP_BL_RO			MAP_REGION_FLAT(			\
						BL_CODE_BASE,			\
						BL_CODE_END - BL_CODE_BASE,	\
johpow01's avatar
johpow01 committed
308
						MT_CODE | EL3_PAS)
309
310
311
312
313
314
#endif
#if USE_COHERENT_MEM
#define ARM_MAP_BL_COHERENT_RAM		MAP_REGION_FLAT(			\
						BL_COHERENT_RAM_BASE,		\
						BL_COHERENT_RAM_END		\
							- BL_COHERENT_RAM_BASE, \
johpow01's avatar
johpow01 committed
315
						MT_DEVICE | MT_RW | EL3_PAS)
316
#endif
Roberto Vargas's avatar
Roberto Vargas committed
317
318
319
320
#if USE_ROMLIB
#define ARM_MAP_ROMLIB_CODE		MAP_REGION_FLAT(			\
						ROMLIB_RO_BASE,			\
						ROMLIB_RO_LIMIT	- ROMLIB_RO_BASE,\
johpow01's avatar
johpow01 committed
321
						MT_CODE | EL3_PAS)
Roberto Vargas's avatar
Roberto Vargas committed
322
323
324
325

#define ARM_MAP_ROMLIB_DATA		MAP_REGION_FLAT(			\
						ROMLIB_RW_BASE,			\
						ROMLIB_RW_END	- ROMLIB_RW_BASE,\
johpow01's avatar
johpow01 committed
326
						MT_MEMORY | MT_RW | EL3_PAS)
Roberto Vargas's avatar
Roberto Vargas committed
327
#endif
328

329
330
331
332
333
334
/*
 * Map mem_protect flash region with read and write permissions
 */
#define ARM_V2M_MAP_MEM_PROTECT		MAP_REGION_FLAT(PLAT_ARM_MEM_PROT_ADDR,	\
						V2M_FLASH_BLOCK_SIZE,		\
						MT_DEVICE | MT_RW | MT_SECURE)
335
/*
johpow01's avatar
johpow01 committed
336
337
 * Map the region for device tree configuration and L0 GPT entries with read
 * and write permissions
338
339
340
341
 */
#define ARM_MAP_BL_CONFIG_REGION	MAP_REGION_FLAT(ARM_BL_RAM_BASE,	\
						(ARM_FW_CONFIGS_LIMIT		\
							- ARM_BL_RAM_BASE),	\
johpow01's avatar
johpow01 committed
342
						MT_MEMORY | MT_RW | EL3_PAS)
343

344
/*
345
 * The max number of regions like RO(code), coherent and data required by
346
347
 * different BL stages which need to be mapped in the MMU.
 */
348
#define ARM_BL_REGIONS			6
349
350
351
352

#define MAX_MMAP_REGIONS		(PLAT_ARM_MMAP_ENTRIES +	\
					 ARM_BL_REGIONS)

johpow01's avatar
johpow01 committed
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
#if ENABLE_RME
/*
 * The PA space is initially mapped in the GPT as follows:
 *
 * ============================================================================
 * Base Addr| Size        |L? GPT|PAS   |Content                 |Comment
 * ============================================================================
 * 0GB      | 1GB         |L0 GPT|ANY   |TBROM (EL3 code)        |Fixed mapping
 *          |             |      |      |TSRAM (EL3 data)        |
 *          |             |      |      |IO (incl.UARTs & GIC)   |
 * ----------------------------------------------------------------------------
 * 1GB      | 1GB         |L0 GPT|ANY   |IO                      |Fixed mapping
 * ----------------------------------------------------------------------------
 * 2GB      | 1GB         |L1 GPT|NS    |DRAM (NS Kernel)        |Use T.Descrip
 * ----------------------------------------------------------------------------
 * 3GB      |1GB-16MB     |L1 GPT|NS    |DRAM (NS Kernel)        |Use T.Descrip
 * ----------------------------------------------------------------------------
 * 4GB-16MB |15MB - 256KB |L1 GPT|REALM |RMM                     |Use T.Descrip
 * ----------------------------------------------------------------------------
 * 4GB-1MB-256KB |   1MB  |L1 GPT|ROOT  |EL3 DRAM data           |Use T.Descrip
 * ----------------------------------------------------------------------------
 * 4GB-256KB|256KB        |L1 GPT|ROOT  |DRAM (L1 GPTs, TZC)     |Fixed mapping
 * ============================================================================
 *
 * - 4KB of L0 GPT reside in TSRAM, on top of the CONFIG section.
 * - 256KB of L1 GPTs reside at the top of DRAM1 (TZC area).
 * - The first 1GB region has GPI_ANY and, therefore, is not protected by
 *   the GPT.
 * - The TZC area is defined as GPI_REALM, with the expection of the L1
 *   region which is GPI_ROOT.
 */


/* Device memory 0 to 2GB */
#define ARM_PAS_1_BASE			(U(0))
#define ARM_PAS_1_SIZE			((ULL(1)<<31)) /* 2GB */

/* NS memory 2GB to (end - 16MB) */
#define ARM_PAS_2_BASE			(ARM_PAS_1_BASE + ARM_PAS_1_SIZE)
#define ARM_PAS_2_SIZE			(ARM_NS_DRAM1_SIZE)

/* RMM */
#define ARM_PAS_3_BASE			(ARM_AP_TZC_DRAM1_BASE)
#define ARM_PAS_3_SIZE			(ARM_AP_TZC_DRAM1_SIZE)

#define ARM_PAS_GPI_ANY			MAP_GPT_REGION(ARM_PAS_1_BASE,	   \
						       ARM_PAS_1_SIZE,	   \
						       GPI_ANY)
#define	ARM_PAS_KERNEL			MAP_GPT_REGION_TBL(ARM_PAS_2_BASE, \
							   ARM_PAS_2_SIZE, \
							   GPI_NS)

#define ARM_PAS_RMM			MAP_GPT_REGION_TBL(ARM_PAS_3_BASE, \
							   ARM_PAS_3_SIZE, \
							   GPI_REALM)

#define ARM_PAS_EL3_DRAM		MAP_GPT_REGION_TBL(ARM_EL3_TZC_DRAM1_BASE, \
							ARM_EL3_TZC_DRAM1_SIZE, \
							GPI_ROOT)

#define	ARM_PAS_GPTS			MAP_GPT_REGION_TBL(ARM_L1_GPT_ADDR_BASE, \
							   ARM_L1_GPT_SIZE,      \
							   GPI_ROOT)

/* GPT Configuration options */
#define PLATFORM_PGS			GPCCR_PGS_4K
#define PLATFORM_PPS			GPCCR_PPS_4GB
#define PLATFORM_L0GPTSZ		GPCCR_L0GPTSZ_30BITS

#endif /* ENABLE_RME */

424
/* Memory mapped Generic timer interfaces  */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
425
426
427
428
429
#define ARM_SYS_CNTCTL_BASE		UL(0x2a430000)
#define ARM_SYS_CNTREAD_BASE		UL(0x2a800000)
#define ARM_SYS_TIMCTL_BASE		UL(0x2a810000)
#define ARM_SYS_CNT_BASE_S		UL(0x2a820000)
#define ARM_SYS_CNT_BASE_NS		UL(0x2a830000)
430
431
432

#define ARM_CONSOLE_BAUDRATE		115200

433
/* Trusted Watchdog constants */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
434
#define ARM_SP805_TWDG_BASE		UL(0x2a490000)
435
436
437
438
439
440
441
#define ARM_SP805_TWDG_CLK_HZ		32768
/* The TBBR document specifies a watchdog timeout of 256 seconds. SP805
 * asserts reset after two consecutive countdowns (2 x 128 = 256 sec) */
#define ARM_TWDG_TIMEOUT_SEC		128
#define ARM_TWDG_LOAD_VAL		(ARM_SP805_TWDG_CLK_HZ * 	\
					 ARM_TWDG_TIMEOUT_SEC)

442
443
444
445
/******************************************************************************
 * Required platform porting definitions common to all ARM standard platforms
 *****************************************************************************/

446
447
448
449
450
451
452
453
454
455
456
457
/*
 * This macro defines the deepest retention state possible. A higher state
 * id will represent an invalid or a power down state.
 */
#define PLAT_MAX_RET_STATE		ARM_LOCAL_STATE_RET

/*
 * This macro defines the deepest power down states possible. Any state ID
 * higher than this is invalid.
 */
#define PLAT_MAX_OFF_STATE		ARM_LOCAL_STATE_OFF

458
459
460
461
462
/*
 * Some data must be aligned on the biggest cache line size in the platform.
 * This is known only to the platform as it might have a combination of
 * integrated and external caches.
 */
Antonio Nino Diaz's avatar
Antonio Nino Diaz committed
463
#define CACHE_WRITEBACK_GRANULE		(U(1) << ARM_CACHE_WRITEBACK_SHIFT)
464

465
/*
466
 * To enable FW_CONFIG to be loaded by BL1, define the corresponding base
467
468
 * and limit. Leave enough space of BL2 meminfo.
 */
469
#define ARM_FW_CONFIG_BASE		(ARM_BL_RAM_BASE + sizeof(meminfo_t))
470
471
#define ARM_FW_CONFIG_LIMIT		((ARM_BL_RAM_BASE + PAGE_SIZE) \
					+ (PAGE_SIZE / 2U))
472
473
474
475

/*
 * Boot parameters passed from BL2 to BL31/BL32 are stored here
 */
476
477
478
#define ARM_BL2_MEM_DESC_BASE		(ARM_FW_CONFIG_LIMIT)
#define ARM_BL2_MEM_DESC_LIMIT		(ARM_BL2_MEM_DESC_BASE \
					+ (PAGE_SIZE / 2U))
479

johpow01's avatar
johpow01 committed
480
481
482
483
484
485
486
487
488
#if ENABLE_RME
/* Store the L0 GPT on Trusted SRAM, 4KB aligned. */
#define ARM_L0_GPT_SIZE			(PAGE_SIZE)
#define ARM_L0_GPT_ADDR_BASE		(ARM_BL2_MEM_DESC_LIMIT)
#define ARM_L0_GPT_LIMIT		(ARM_L0_GPT_ADDR_BASE + ARM_L0_GPT_SIZE)
#else
#define ARM_L0_GPT_SIZE			U(0)
#endif

489
490
/*
 * Define limit of firmware configuration memory:
johpow01's avatar
johpow01 committed
491
 * ARM_FW_CONFIG + ARM_BL2_MEM_DESC + ARM_L0_GPT
492
 */
johpow01's avatar
johpow01 committed
493
494
#define ARM_FW_CONFIGS_LIMIT		(ARM_BL_RAM_BASE + (PAGE_SIZE * 2) + \
					 ARM_L0_GPT_SIZE)
495
496
497
498
499
500
501
502

/*******************************************************************************
 * BL1 specific defines.
 * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of
 * addresses.
 ******************************************************************************/
#define BL1_RO_BASE			PLAT_ARM_TRUSTED_ROM_BASE
#define BL1_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE	\
Roberto Vargas's avatar
Roberto Vargas committed
503
504
					 + (PLAT_ARM_TRUSTED_ROM_SIZE - \
					    PLAT_ARM_MAX_ROMLIB_RO_SIZE))
505
/*
506
 * Put BL1 RW at the top of the Trusted SRAM.
507
508
509
 */
#define BL1_RW_BASE			(ARM_BL_RAM_BASE +		\
						ARM_BL_RAM_SIZE -	\
Roberto Vargas's avatar
Roberto Vargas committed
510
511
512
513
514
515
516
517
518
519
						(PLAT_ARM_MAX_BL1_RW_SIZE +\
						 PLAT_ARM_MAX_ROMLIB_RW_SIZE))
#define BL1_RW_LIMIT			(ARM_BL_RAM_BASE + 		\
					    (ARM_BL_RAM_SIZE - PLAT_ARM_MAX_ROMLIB_RW_SIZE))

#define ROMLIB_RO_BASE			BL1_RO_LIMIT
#define ROMLIB_RO_LIMIT			(PLAT_ARM_TRUSTED_ROM_BASE + PLAT_ARM_TRUSTED_ROM_SIZE)

#define ROMLIB_RW_BASE			(BL1_RW_BASE + PLAT_ARM_MAX_BL1_RW_SIZE)
#define ROMLIB_RW_END			(ROMLIB_RW_BASE + PLAT_ARM_MAX_ROMLIB_RW_SIZE)
520
521
522
523

/*******************************************************************************
 * BL2 specific defines.
 ******************************************************************************/
524
#if BL2_AT_EL3
525
/* Put BL2 towards the middle of the Trusted SRAM */
526
#define BL2_BASE			(ARM_TRUSTED_SRAM_BASE + \
527
						(PLAT_ARM_TRUSTED_SRAM_SIZE >> 1) + 0x2000)
528
529
#define BL2_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)

David Wang's avatar
David Wang committed
530
#else
531
/*
532
 * Put BL2 just below BL1.
533
 */
534
535
#define BL2_BASE			(BL1_RW_BASE - PLAT_ARM_MAX_BL2_SIZE)
#define BL2_LIMIT			BL1_RW_BASE
David Wang's avatar
David Wang committed
536
#endif
537
538

/*******************************************************************************
539
 * BL31 specific defines.
540
 ******************************************************************************/
541
#if ARM_BL31_IN_DRAM || SEPARATE_NOBITS_REGION
David Wang's avatar
David Wang committed
542
543
544
545
546
547
/*
 * Put BL31 at the bottom of TZC secured DRAM
 */
#define BL31_BASE			ARM_AP_TZC_DRAM1_BASE
#define BL31_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
						PLAT_ARM_MAX_BL31_SIZE)
548
549
550
551
552
553
554
555
/*
 * For SEPARATE_NOBITS_REGION, BL31 PROGBITS are loaded in TZC secured DRAM.
 * And BL31 NOBITS are loaded in Trusted SRAM such that BL2 is overwritten.
 */
#if SEPARATE_NOBITS_REGION
#define BL31_NOBITS_BASE		BL2_BASE
#define BL31_NOBITS_LIMIT		BL2_LIMIT
#endif /* SEPARATE_NOBITS_REGION */
556
#elif (RESET_TO_BL31)
557
558
559
560
/* Ensure Position Independent support (PIE) is enabled for this config.*/
# if !ENABLE_PIE
#  error "BL31 must be a PIE if RESET_TO_BL31=1."
#endif
561
/*
562
 * Since this is PIE, we can define BL31_BASE to 0x0 since this macro is solely
563
 * used for building BL31 and not used for loading BL31.
564
 */
565
566
#  define BL31_BASE			0x0
#  define BL31_LIMIT			PLAT_ARM_MAX_BL31_SIZE
David Wang's avatar
David Wang committed
567
#else
568
569
570
571
/* Put BL31 below BL2 in the Trusted SRAM.*/
#define BL31_BASE			((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
						- PLAT_ARM_MAX_BL31_SIZE)
#define BL31_PROGBITS_LIMIT		BL2_BASE
572
573
574
575
576
577
578
/*
 * For BL2_AT_EL3 make sure the BL31 can grow up until BL2_BASE. This is
 * because in the BL2_AT_EL3 configuration, BL2 is always resident.
 */
#if BL2_AT_EL3
#define BL31_LIMIT			BL2_BASE
#else
579
#define BL31_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
David Wang's avatar
David Wang committed
580
#endif
581
#endif
582

583
#if !defined(__aarch64__) || JUNO_AARCH32_EL3_RUNTIME
584
/*******************************************************************************
585
586
587
 * BL32 specific defines for EL3 runtime in AArch32 mode
 ******************************************************************************/
# if RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME
588
589
590
591
/*
 * SP_MIN is the only BL image in SRAM. Allocate the whole of SRAM (excluding
 * the page reserved for fw_configs) to BL32
 */
592
#  define BL32_BASE			ARM_FW_CONFIGS_LIMIT
593
594
#  define BL32_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
# else
595
596
597
598
/* Put BL32 below BL2 in the Trusted SRAM.*/
#  define BL32_BASE			((ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)\
						- PLAT_ARM_MAX_BL32_SIZE)
#  define BL32_PROGBITS_LIMIT		BL2_BASE
599
600
601
602
603
604
#  define BL32_LIMIT			(ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
# endif /* RESET_TO_SP_MIN && !JUNO_AARCH32_EL3_RUNTIME */

#else
/*******************************************************************************
 * BL32 specific defines for EL3 runtime in AArch64 mode
605
606
607
608
609
610
 ******************************************************************************/
/*
 * On ARM standard platforms, the TSP can execute from Trusted SRAM,
 * Trusted DRAM (if available) or the DRAM region secured by the TrustZone
 * controller.
 */
611
# if SPM_MM
612
613
614
615
#  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
#  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000))
#  define BL32_BASE			(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
#  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
616
						ARM_AP_TZC_DRAM1_SIZE)
617
618
619
# elif defined(SPD_spmd)
#  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE + ULL(0x200000))
#  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE - ULL(0x200000))
620
621
622
#  define BL32_BASE			PLAT_ARM_SPMC_BASE
#  define BL32_LIMIT			(PLAT_ARM_SPMC_BASE +		\
						 PLAT_ARM_SPMC_SIZE)
johpow01's avatar
johpow01 committed
623
624
625
626
627
628
# elif ENABLE_RME
#  define BL32_BASE			(ARM_DRAM1_BASE + ARM_DRAM1_SIZE - \
						ARM_TZC_DRAM1_SIZE)
#  define BL32_LIMIT 			(BL32_BASE + ARM_TZC_DRAM1_SIZE - \
						ARM_EL3_TZC_DRAM1_SIZE - \
						ARM_L1_GPT_SIZE)
629
630
# elif ARM_BL31_IN_DRAM
#  define TSP_SEC_MEM_BASE		(ARM_AP_TZC_DRAM1_BASE +	\
David Wang's avatar
David Wang committed
631
						PLAT_ARM_MAX_BL31_SIZE)
632
#  define TSP_SEC_MEM_SIZE		(ARM_AP_TZC_DRAM1_SIZE -	\
David Wang's avatar
David Wang committed
633
						PLAT_ARM_MAX_BL31_SIZE)
634
#  define BL32_BASE			(ARM_AP_TZC_DRAM1_BASE +	\
David Wang's avatar
David Wang committed
635
						PLAT_ARM_MAX_BL31_SIZE)
636
#  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
David Wang's avatar
David Wang committed
637
						ARM_AP_TZC_DRAM1_SIZE)
638
639
640
# elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_SRAM_ID
#  define TSP_SEC_MEM_BASE		ARM_BL_RAM_BASE
#  define TSP_SEC_MEM_SIZE		ARM_BL_RAM_SIZE
641
#  define TSP_PROGBITS_LIMIT		BL31_BASE
642
#  define BL32_BASE			ARM_FW_CONFIGS_LIMIT
643
644
645
646
647
648
#  define BL32_LIMIT			BL31_BASE
# elif ARM_TSP_RAM_LOCATION_ID == ARM_TRUSTED_DRAM_ID
#  define TSP_SEC_MEM_BASE		PLAT_ARM_TRUSTED_DRAM_BASE
#  define TSP_SEC_MEM_SIZE		PLAT_ARM_TRUSTED_DRAM_SIZE
#  define BL32_BASE			PLAT_ARM_TRUSTED_DRAM_BASE
#  define BL32_LIMIT			(PLAT_ARM_TRUSTED_DRAM_BASE	\
649
						+ (UL(1) << 21))
650
651
652
653
654
# elif ARM_TSP_RAM_LOCATION_ID == ARM_DRAM_ID
#  define TSP_SEC_MEM_BASE		ARM_AP_TZC_DRAM1_BASE
#  define TSP_SEC_MEM_SIZE		ARM_AP_TZC_DRAM1_SIZE
#  define BL32_BASE			ARM_AP_TZC_DRAM1_BASE
#  define BL32_LIMIT			(ARM_AP_TZC_DRAM1_BASE +	\
655
						ARM_AP_TZC_DRAM1_SIZE)
656
657
658
# else
#  error "Unsupported ARM_TSP_RAM_LOCATION_ID value"
# endif
659
#endif /* !__aarch64__ || JUNO_AARCH32_EL3_RUNTIME */
660

661
662
/*
 * BL32 is mandatory in AArch32. In AArch64, undefine BL32_BASE if there is no
663
 * SPD and no SPM-MM, as they are the only ones that can be used as BL32.
664
 */
665
#if defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME
666
# if defined(SPD_none) && !SPM_MM
667
#  undef BL32_BASE
668
# endif /* defined(SPD_none) && !SPM_MM */
669
#endif /* defined(__aarch64__) && !JUNO_AARCH32_EL3_RUNTIME */
670

671
672
673
674
/*******************************************************************************
 * FWU Images: NS_BL1U, BL2U & NS_BL2U defines.
 ******************************************************************************/
#define BL2U_BASE			BL2_BASE
675
676
#define BL2U_LIMIT			BL2_LIMIT

677
#define NS_BL2U_BASE			ARM_NS_DRAM1_BASE
678
#define NS_BL1U_BASE			(PLAT_ARM_NVM_BASE + UL(0x03EB8000))
679

680
681
682
683
684
685
/*
 * ID of the secure physical generic timer interrupt used by the TSP.
 */
#define TSP_IRQ_SEC_PHY_TIMER		ARM_IRQ_SEC_PHY_TIMER


686
687
688
689
690
/*
 * One cache line needed for bakery locks on ARM platforms
 */
#define PLAT_PERCPU_BAKERY_LOCK_SIZE		(1 * CACHE_WRITEBACK_GRANULE)

691
/* Priority levels for ARM platforms */
692
#define PLAT_RAS_PRI			0x10
693
694
695
696
#define PLAT_SDEI_CRITICAL_PRI		0x60
#define PLAT_SDEI_NORMAL_PRI		0x70

/* ARM platforms use 3 upper bits of secure interrupt priority */
697
#define PLAT_PRI_BITS			3
698

699
700
701
/* SGI used for SDEI signalling */
#define ARM_SDEI_SGI			ARM_IRQ_SEC_SGI_0

702
703
704
705
706
707
708
#if SDEI_IN_FCONF
/* ARM SDEI dynamic private event max count */
#define ARM_SDEI_DP_EVENT_MAX_CNT	3

/* ARM SDEI dynamic shared event max count */
#define ARM_SDEI_DS_EVENT_MAX_CNT	3
#else
709
710
711
712
713
714
715
716
717
718
/* ARM SDEI dynamic private event numbers */
#define ARM_SDEI_DP_EVENT_0		1000
#define ARM_SDEI_DP_EVENT_1		1001
#define ARM_SDEI_DP_EVENT_2		1002

/* ARM SDEI dynamic shared event numbers */
#define ARM_SDEI_DS_EVENT_0		2000
#define ARM_SDEI_DS_EVENT_1		2001
#define ARM_SDEI_DS_EVENT_2		2002

719
720
721
722
723
724
725
726
727
728
#define ARM_SDEI_PRIVATE_EVENTS \
	SDEI_DEFINE_EVENT_0(ARM_SDEI_SGI), \
	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
	SDEI_PRIVATE_EVENT(ARM_SDEI_DP_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)

#define ARM_SDEI_SHARED_EVENTS \
	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
	SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
729
#endif /* SDEI_IN_FCONF */
730

731
#endif /* ARM_DEF_H */