xref: /arm-trusted-firmware/plat/brcm/board/stingray/include/platform_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2020, Broadcom
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H
8*91f16700Schasinglulu #define PLATFORM_DEF_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <arch.h>
11*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h>
12*91f16700Schasinglulu #include <plat/common/common_def.h>
13*91f16700Schasinglulu 
14*91f16700Schasinglulu #include <brcm_def.h>
15*91f16700Schasinglulu #include "sr_def.h"
16*91f16700Schasinglulu #include <cmn_plat_def.h>
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /*
19*91f16700Schasinglulu  * Most platform porting definitions provided by included headers
20*91f16700Schasinglulu  */
21*91f16700Schasinglulu #define PLAT_BRCM_SCP_TZC_DRAM1_SIZE	ULL(0x0)
22*91f16700Schasinglulu 
23*91f16700Schasinglulu /*
24*91f16700Schasinglulu  * Required by standard platform porting definitions
25*91f16700Schasinglulu  */
26*91f16700Schasinglulu #define PLATFORM_CLUSTER0_CORE_COUNT	2
27*91f16700Schasinglulu #define PLATFORM_CLUSTER1_CORE_COUNT	2
28*91f16700Schasinglulu #define PLATFORM_CLUSTER2_CORE_COUNT	2
29*91f16700Schasinglulu #define PLATFORM_CLUSTER3_CORE_COUNT	2
30*91f16700Schasinglulu 
31*91f16700Schasinglulu #define BRCM_SYSTEM_COUNT 1
32*91f16700Schasinglulu #define BRCM_CLUSTER_COUNT 4
33*91f16700Schasinglulu 
34*91f16700Schasinglulu #define PLATFORM_CORE_COUNT	(PLATFORM_CLUSTER0_CORE_COUNT + \
35*91f16700Schasinglulu 					PLATFORM_CLUSTER1_CORE_COUNT+ \
36*91f16700Schasinglulu 					PLATFORM_CLUSTER2_CORE_COUNT+ \
37*91f16700Schasinglulu 					PLATFORM_CLUSTER3_CORE_COUNT)
38*91f16700Schasinglulu 
39*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS	(BRCM_SYSTEM_COUNT + \
40*91f16700Schasinglulu 				 BRCM_CLUSTER_COUNT + \
41*91f16700Schasinglulu 				 PLATFORM_CORE_COUNT)
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL	MPIDR_AFFLVL2
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /* TBD-STINGRAY */
46*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT       6
47*91f16700Schasinglulu /*
48*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
49*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
50*91f16700Schasinglulu  * integrated and external caches.
51*91f16700Schasinglulu  */
52*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE         (1 << CACHE_WRITEBACK_SHIFT)
53*91f16700Schasinglulu 
54*91f16700Schasinglulu /* TBD-STINGRAY */
55*91f16700Schasinglulu #define PLATFORM_MAX_AFFLVL             MPIDR_AFFLVL1
56*91f16700Schasinglulu 
57*91f16700Schasinglulu #define BL1_PLATFORM_STACK_SIZE 0x3300
58*91f16700Schasinglulu #define BL2_PLATFORM_STACK_SIZE 0xc000
59*91f16700Schasinglulu #define BL11_PLATFORM_STACK_SIZE 0x2b00
60*91f16700Schasinglulu #define DEFAULT_PLATFORM_STACK_SIZE 0x400
61*91f16700Schasinglulu #if IMAGE_BL1
62*91f16700Schasinglulu # define PLATFORM_STACK_SIZE BL1_PLATFORM_STACK_SIZE
63*91f16700Schasinglulu #else
64*91f16700Schasinglulu #if IMAGE_BL2
65*91f16700Schasinglulu #ifdef USE_BL1_RW
66*91f16700Schasinglulu # define PLATFORM_STACK_SIZE BL2_PLATFORM_STACK_SIZE
67*91f16700Schasinglulu #else
68*91f16700Schasinglulu # define PLATFORM_STACK_SIZE BL1_PLATFORM_STACK_SIZE
69*91f16700Schasinglulu #endif
70*91f16700Schasinglulu #else
71*91f16700Schasinglulu #if IMAGE_BL11
72*91f16700Schasinglulu # define PLATFORM_STACK_SIZE BL11_PLATFORM_STACK_SIZE
73*91f16700Schasinglulu #else
74*91f16700Schasinglulu # define PLATFORM_STACK_SIZE DEFAULT_PLATFORM_STACK_SIZE
75*91f16700Schasinglulu #endif
76*91f16700Schasinglulu #endif
77*91f16700Schasinglulu #endif
78*91f16700Schasinglulu 
79*91f16700Schasinglulu #define PLAT_BRCM_TRUSTED_SRAM_BASE	0x66D00000
80*91f16700Schasinglulu #define PLAT_BRCM_TRUSTED_SRAM_SIZE	0x00040000
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #ifdef RUN_BL1_FROM_QSPI /* BL1 XIP from QSPI */
83*91f16700Schasinglulu # define PLAT_BRCM_TRUSTED_ROM_BASE	QSPI_BASE_ADDR
84*91f16700Schasinglulu #elif RUN_BL1_FROM_NAND /* BL1 XIP from NAND */
85*91f16700Schasinglulu # define PLAT_BRCM_TRUSTED_ROM_BASE	NAND_BASE_ADDR
86*91f16700Schasinglulu #else /* BL1 executed in ROM */
87*91f16700Schasinglulu # define PLAT_BRCM_TRUSTED_ROM_BASE	ROM_BASE_ADDR
88*91f16700Schasinglulu #endif
89*91f16700Schasinglulu #define PLAT_BRCM_TRUSTED_ROM_SIZE	0x00040000
90*91f16700Schasinglulu 
91*91f16700Schasinglulu /*******************************************************************************
92*91f16700Schasinglulu  * BL1 specific defines.
93*91f16700Schasinglulu  ******************************************************************************/
94*91f16700Schasinglulu #define BL1_RO_BASE		        PLAT_BRCM_TRUSTED_ROM_BASE
95*91f16700Schasinglulu #define BL1_RO_LIMIT			(PLAT_BRCM_TRUSTED_ROM_BASE \
96*91f16700Schasinglulu 					+ PLAT_BRCM_TRUSTED_ROM_SIZE)
97*91f16700Schasinglulu 
98*91f16700Schasinglulu /*
99*91f16700Schasinglulu  * Put BL1 RW at the beginning of the Trusted SRAM.
100*91f16700Schasinglulu  */
101*91f16700Schasinglulu #define BL1_RW_BASE			(BRCM_BL_RAM_BASE)
102*91f16700Schasinglulu #define BL1_RW_LIMIT			(BL1_RW_BASE + 0x12000)
103*91f16700Schasinglulu 
104*91f16700Schasinglulu #define BL11_RW_BASE		BL1_RW_LIMIT
105*91f16700Schasinglulu #define BL11_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
106*91f16700Schasinglulu 				PLAT_BRCM_TRUSTED_SRAM_SIZE)
107*91f16700Schasinglulu 
108*91f16700Schasinglulu /*******************************************************************************
109*91f16700Schasinglulu  * BL2 specific defines.
110*91f16700Schasinglulu  ******************************************************************************/
111*91f16700Schasinglulu #if RUN_BL2_FROM_QSPI /* BL2 XIP from QSPI */
112*91f16700Schasinglulu #define BL2_BASE			QSPI_BASE_ADDR
113*91f16700Schasinglulu #define BL2_LIMIT			(BL2_BASE + 0x40000)
114*91f16700Schasinglulu #define BL2_RW_BASE		BL1_RW_LIMIT
115*91f16700Schasinglulu #define BL2_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
116*91f16700Schasinglulu 				PLAT_BRCM_TRUSTED_SRAM_SIZE)
117*91f16700Schasinglulu #elif RUN_BL2_FROM_NAND /* BL2 XIP from NAND */
118*91f16700Schasinglulu #define BL2_BASE			NAND_BASE_ADDR
119*91f16700Schasinglulu #define BL2_LIMIT			(BL2_BASE + 0x40000)
120*91f16700Schasinglulu #define BL2_RW_BASE		BL1_RW_LIMIT
121*91f16700Schasinglulu #define BL2_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
122*91f16700Schasinglulu 				PLAT_BRCM_TRUSTED_SRAM_SIZE)
123*91f16700Schasinglulu #else
124*91f16700Schasinglulu #define BL2_BASE			(BL1_RW_LIMIT + PAGE_SIZE)
125*91f16700Schasinglulu #define BL2_LIMIT			(BRCM_BL_RAM_BASE + BRCM_BL_RAM_SIZE)
126*91f16700Schasinglulu #endif
127*91f16700Schasinglulu 
128*91f16700Schasinglulu /*
129*91f16700Schasinglulu  * BL1 persistent area in internal SRAM
130*91f16700Schasinglulu  * This area will increase as more features gets into BL1
131*91f16700Schasinglulu  */
132*91f16700Schasinglulu #define BL1_PERSISTENT_DATA_SIZE 0x2000
133*91f16700Schasinglulu 
134*91f16700Schasinglulu /* To reduce BL2 runtime footprint, we can re-use some BL1_RW area */
135*91f16700Schasinglulu #define BL1_RW_RECLAIM_BASE (PLAT_BRCM_TRUSTED_SRAM_BASE + \
136*91f16700Schasinglulu 			     BL1_PERSISTENT_DATA_SIZE)
137*91f16700Schasinglulu 
138*91f16700Schasinglulu /*******************************************************************************
139*91f16700Schasinglulu  * BL3-1 specific defines.
140*91f16700Schasinglulu  ******************************************************************************/
141*91f16700Schasinglulu /* Max Size of BL31 (in DRAM) */
142*91f16700Schasinglulu #define PLAT_BRCM_MAX_BL31_SIZE		0x30000
143*91f16700Schasinglulu 
144*91f16700Schasinglulu #ifdef USE_DDR
145*91f16700Schasinglulu #define BL31_BASE			BRCM_AP_TZC_DRAM1_BASE
146*91f16700Schasinglulu 
147*91f16700Schasinglulu #define BL31_LIMIT			(BRCM_AP_TZC_DRAM1_BASE + \
148*91f16700Schasinglulu 					PLAT_BRCM_MAX_BL31_SIZE)
149*91f16700Schasinglulu #else
150*91f16700Schasinglulu /* Put BL3-1 at the end of external on-board SRAM connected as NOR flash */
151*91f16700Schasinglulu #define BL31_BASE			(NOR_BASE_ADDR + NOR_SIZE - \
152*91f16700Schasinglulu 					PLAT_BRCM_MAX_BL31_SIZE)
153*91f16700Schasinglulu 
154*91f16700Schasinglulu #define BL31_LIMIT			(NOR_BASE_ADDR + NOR_SIZE)
155*91f16700Schasinglulu #endif
156*91f16700Schasinglulu 
157*91f16700Schasinglulu #define SECURE_DDR_END_ADDRESS		BL31_LIMIT
158*91f16700Schasinglulu 
159*91f16700Schasinglulu #ifdef NEED_SCP_BL2
160*91f16700Schasinglulu #define SCP_BL2_BASE			BL31_BASE
161*91f16700Schasinglulu #define PLAT_MAX_SCP_BL2_SIZE	0x9000
162*91f16700Schasinglulu #define PLAT_SCP_COM_SHARED_MEM_BASE (CRMU_SHARED_SRAM_BASE)
163*91f16700Schasinglulu /* dummy defined */
164*91f16700Schasinglulu #define PLAT_BRCM_MHU_BASE		0x0
165*91f16700Schasinglulu #endif
166*91f16700Schasinglulu 
167*91f16700Schasinglulu #define SECONDARY_CPU_SPIN_BASE_ADDR	BRCM_SHARED_RAM_BASE
168*91f16700Schasinglulu 
169*91f16700Schasinglulu /* Generic system timer counter frequency */
170*91f16700Schasinglulu #ifndef SYSCNT_FREQ
171*91f16700Schasinglulu #define SYSCNT_FREQ			(125 * 1000 * 1000)
172*91f16700Schasinglulu #endif
173*91f16700Schasinglulu 
174*91f16700Schasinglulu /*
175*91f16700Schasinglulu  * Enable the BL32 definitions, only when optee os is selected as secure
176*91f16700Schasinglulu  * payload (BL32).
177*91f16700Schasinglulu  */
178*91f16700Schasinglulu #ifdef SPD_opteed
179*91f16700Schasinglulu /*
180*91f16700Schasinglulu  * Reserved Memory Map : SHMEM & TZDRAM.
181*91f16700Schasinglulu  *
182*91f16700Schasinglulu  * +--------+----------+ 0x8D000000
183*91f16700Schasinglulu  * | SHMEM (NS)         | 16MB
184*91f16700Schasinglulu  * +-------------------+ 0x8E000000
185*91f16700Schasinglulu  * |        | TEE_RAM(S)| 4MB
186*91f16700Schasinglulu  * + TZDRAM +----------+ 0x8E400000
187*91f16700Schasinglulu  * |        | TA_RAM(S) | 12MB
188*91f16700Schasinglulu  * +-------------------+ 0x8F000000
189*91f16700Schasinglulu  * | BL31 Binary (S)    | 192KB
190*91f16700Schasinglulu  * +-------------------+ 0x8F030000
191*91f16700Schasinglulu  */
192*91f16700Schasinglulu 
193*91f16700Schasinglulu #define BL32_VA_SIZE		(4 * 1024 * 1024)
194*91f16700Schasinglulu #define BL32_BASE		(0x8E000000)
195*91f16700Schasinglulu #define BL32_LIMIT		(BL32_BASE + BL32_VA_SIZE)
196*91f16700Schasinglulu #define TSP_SEC_MEM_BASE	BL32_BASE
197*91f16700Schasinglulu #define TSP_SEC_MEM_SIZE	BL32_VA_SIZE
198*91f16700Schasinglulu #endif
199*91f16700Schasinglulu 
200*91f16700Schasinglulu #ifdef SPD_opteed
201*91f16700Schasinglulu 	#define SECURE_DDR_BASE_ADDRESS BL32_BASE
202*91f16700Schasinglulu #else
203*91f16700Schasinglulu 	#define SECURE_DDR_BASE_ADDRESS BL31_BASE
204*91f16700Schasinglulu #endif
205*91f16700Schasinglulu /*******************************************************************************
206*91f16700Schasinglulu  * Platform specific page table and MMU setup constants
207*91f16700Schasinglulu  ******************************************************************************/
208*91f16700Schasinglulu 
209*91f16700Schasinglulu #define MAX_XLAT_TABLES		7
210*91f16700Schasinglulu 
211*91f16700Schasinglulu #define PLAT_BRCM_MMAP_ENTRIES	10
212*91f16700Schasinglulu 
213*91f16700Schasinglulu #define MAX_MMAP_REGIONS		(PLAT_BRCM_MMAP_ENTRIES +	\
214*91f16700Schasinglulu 					 BRCM_BL_REGIONS)
215*91f16700Schasinglulu 
216*91f16700Schasinglulu #ifdef USE_DDR
217*91f16700Schasinglulu #ifdef BL33_OVERRIDE_LOAD_ADDR
218*91f16700Schasinglulu #define PLAT_BRCM_NS_IMAGE_OFFSET	BL33_OVERRIDE_LOAD_ADDR
219*91f16700Schasinglulu #else
220*91f16700Schasinglulu /*
221*91f16700Schasinglulu  * BL3-3 image starting offset.
222*91f16700Schasinglulu  * Putting start of DRAM as of now.
223*91f16700Schasinglulu  */
224*91f16700Schasinglulu #define PLAT_BRCM_NS_IMAGE_OFFSET	0x80000000
225*91f16700Schasinglulu #endif /* BL33_OVERRIDE_LOAD_ADDR */
226*91f16700Schasinglulu #else
227*91f16700Schasinglulu /*
228*91f16700Schasinglulu  * BL3-3 image starting offset.
229*91f16700Schasinglulu  * Putting start of external on-board SRAM as of now.
230*91f16700Schasinglulu  */
231*91f16700Schasinglulu #define PLAT_BRCM_NS_IMAGE_OFFSET	NOR_BASE_ADDR
232*91f16700Schasinglulu #endif /* USE_DDR */
233*91f16700Schasinglulu /******************************************************************************
234*91f16700Schasinglulu  * Required platform porting definitions common to all BRCM platforms
235*91f16700Schasinglulu  *****************************************************************************/
236*91f16700Schasinglulu 
237*91f16700Schasinglulu #define MAX_IO_DEVICES			5
238*91f16700Schasinglulu #define MAX_IO_HANDLES			6
239*91f16700Schasinglulu 
240*91f16700Schasinglulu #define PRIMARY_CPU		0
241*91f16700Schasinglulu 
242*91f16700Schasinglulu /* GIC Parameter */
243*91f16700Schasinglulu #define PLAT_BRCM_GICD_BASE	GIC500_BASE
244*91f16700Schasinglulu #define PLAT_BRCM_GICR_BASE	(GIC500_BASE + 0x200000)
245*91f16700Schasinglulu 
246*91f16700Schasinglulu /* Define secure interrupt as per Group here */
247*91f16700Schasinglulu #define PLAT_BRCM_G1S_IRQ_PROPS(grp) \
248*91f16700Schasinglulu 	INTR_PROP_DESC(BRCM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \
249*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
250*91f16700Schasinglulu 	INTR_PROP_DESC(BRCM_IRQ_SEC_SPI_0, GIC_HIGHEST_SEC_PRIORITY, (grp), \
251*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE)
252*91f16700Schasinglulu 
253*91f16700Schasinglulu #define PLAT_BRCM_G0_IRQ_PROPS(grp) \
254*91f16700Schasinglulu 	INTR_PROP_DESC(BRCM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, (grp), \
255*91f16700Schasinglulu 			GIC_INTR_CFG_EDGE), \
256*91f16700Schasinglulu 
257*91f16700Schasinglulu /*
258*91f16700Schasinglulu  *CCN 502 related constants.
259*91f16700Schasinglulu  */
260*91f16700Schasinglulu #define PLAT_BRCM_CLUSTER_COUNT 4  /* Number of RN-F Masters */
261*91f16700Schasinglulu #define PLAT_BRCM_CLUSTER_TO_CCN_ID_MAP	CLUSTER0_NODE_ID, CLUSTER1_NODE_ID, CLUSTER2_NODE_ID, CLUSTER3_NODE_ID
262*91f16700Schasinglulu #define CCN_SIZE		0x1000000
263*91f16700Schasinglulu #define CLUSTER0_NODE_ID	1
264*91f16700Schasinglulu #define CLUSTER1_NODE_ID	7
265*91f16700Schasinglulu #define CLUSTER2_NODE_ID	9
266*91f16700Schasinglulu #define CLUSTER3_NODE_ID	15
267*91f16700Schasinglulu 
268*91f16700Schasinglulu #endif
269