summaryrefslogtreecommitdiffstats
path: root/plat/brcm/board/stingray/include/platform_def.h
blob: 4742124291eea2d081e4ef8b2ef1162211de67c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
/*
 * Copyright (c) 2015-2020, Broadcom
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef PLATFORM_DEF_H
#define PLATFORM_DEF_H

#include <arch.h>
#include <common/tbbr/tbbr_img_def.h>
#include <plat/common/common_def.h>

#include <brcm_def.h>
#include "sr_def.h"
#include <cmn_plat_def.h>

/*
 * Most platform porting definitions provided by included headers
 */
#define PLAT_BRCM_SCP_TZC_DRAM1_SIZE	ULL(0x0)

/*
 * Required by standard platform porting definitions
 */
#define PLATFORM_CLUSTER0_CORE_COUNT	2
#define PLATFORM_CLUSTER1_CORE_COUNT	2
#define PLATFORM_CLUSTER2_CORE_COUNT	2
#define PLATFORM_CLUSTER3_CORE_COUNT	2

#define BRCM_SYSTEM_COUNT 1
#define BRCM_CLUSTER_COUNT 4

#define PLATFORM_CORE_COUNT	(PLATFORM_CLUSTER0_CORE_COUNT + \
					PLATFORM_CLUSTER1_CORE_COUNT+ \
					PLATFORM_CLUSTER2_CORE_COUNT+ \
					PLATFORM_CLUSTER3_CORE_COUNT)

#define PLAT_NUM_PWR_DOMAINS	(BRCM_SYSTEM_COUNT + \
				 BRCM_CLUSTER_COUNT + \
				 PLATFORM_CORE_COUNT)

#define PLAT_MAX_PWR_LVL	MPIDR_AFFLVL2

/* TBD-STINGRAY */
#define CACHE_WRITEBACK_SHIFT       6
/*
 * 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.
 */
#define CACHE_WRITEBACK_GRANULE         (1 << CACHE_WRITEBACK_SHIFT)

/* TBD-STINGRAY */
#define PLATFORM_MAX_AFFLVL             MPIDR_AFFLVL1

#define BL1_PLATFORM_STACK_SIZE 0x3300
#define BL2_PLATFORM_STACK_SIZE 0xc000
#define BL11_PLATFORM_STACK_SIZE 0x2b00
#define DEFAULT_PLATFORM_STACK_SIZE 0x400
#if IMAGE_BL1
# define PLATFORM_STACK_SIZE BL1_PLATFORM_STACK_SIZE
#else
#if IMAGE_BL2
#ifdef USE_BL1_RW
# define PLATFORM_STACK_SIZE BL2_PLATFORM_STACK_SIZE
#else
# define PLATFORM_STACK_SIZE BL1_PLATFORM_STACK_SIZE
#endif
#else
#if IMAGE_BL11
# define PLATFORM_STACK_SIZE BL11_PLATFORM_STACK_SIZE
#else
# define PLATFORM_STACK_SIZE DEFAULT_PLATFORM_STACK_SIZE
#endif
#endif
#endif

#define PLAT_BRCM_TRUSTED_SRAM_BASE	0x66D00000
#define PLAT_BRCM_TRUSTED_SRAM_SIZE	0x00040000

#ifdef RUN_BL1_FROM_QSPI /* BL1 XIP from QSPI */
# define PLAT_BRCM_TRUSTED_ROM_BASE	QSPI_BASE_ADDR
#elif RUN_BL1_FROM_NAND /* BL1 XIP from NAND */
# define PLAT_BRCM_TRUSTED_ROM_BASE	NAND_BASE_ADDR
#else /* BL1 executed in ROM */
# define PLAT_BRCM_TRUSTED_ROM_BASE	ROM_BASE_ADDR
#endif
#define PLAT_BRCM_TRUSTED_ROM_SIZE	0x00040000

/*******************************************************************************
 * BL1 specific defines.
 ******************************************************************************/
#define BL1_RO_BASE		        PLAT_BRCM_TRUSTED_ROM_BASE
#define BL1_RO_LIMIT			(PLAT_BRCM_TRUSTED_ROM_BASE \
					+ PLAT_BRCM_TRUSTED_ROM_SIZE)

/*
 * Put BL1 RW at the beginning of the Trusted SRAM.
 */
#define BL1_RW_BASE			(BRCM_BL_RAM_BASE)
#define BL1_RW_LIMIT			(BL1_RW_BASE + 0x12000)

#define BL11_RW_BASE		BL1_RW_LIMIT
#define BL11_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
				PLAT_BRCM_TRUSTED_SRAM_SIZE)

/*******************************************************************************
 * BL2 specific defines.
 ******************************************************************************/
#if RUN_BL2_FROM_QSPI /* BL2 XIP from QSPI */
#define BL2_BASE			QSPI_BASE_ADDR
#define BL2_LIMIT			(BL2_BASE + 0x40000)
#define BL2_RW_BASE		BL1_RW_LIMIT
#define BL2_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
				PLAT_BRCM_TRUSTED_SRAM_SIZE)
#elif RUN_BL2_FROM_NAND /* BL2 XIP from NAND */
#define BL2_BASE			NAND_BASE_ADDR
#define BL2_LIMIT			(BL2_BASE + 0x40000)
#define BL2_RW_BASE		BL1_RW_LIMIT
#define BL2_RW_LIMIT		(PLAT_BRCM_TRUSTED_SRAM_BASE + \
				PLAT_BRCM_TRUSTED_SRAM_SIZE)
#else
#define BL2_BASE			(BL1_RW_LIMIT + PAGE_SIZE)
#define BL2_LIMIT			(BRCM_BL_RAM_BASE + BRCM_BL_RAM_SIZE)
#endif

/*
 * BL1 persistent area in internal SRAM
 * This area will increase as more features gets into BL1
 */
#define BL1_PERSISTENT_DATA_SIZE 0x2000

/* To reduce BL2 runtime footprint, we can re-use some BL1_RW area */
#define BL1_RW_RECLAIM_BASE (PLAT_BRCM_TRUSTED_SRAM_BASE + \
			     BL1_PERSISTENT_DATA_SIZE)

/*******************************************************************************
 * BL3-1 specific defines.
 ******************************************************************************/
/* Max Size of BL31 (in DRAM) */
#define PLAT_BRCM_MAX_BL31_SIZE		0x30000

#ifdef USE_DDR
#define BL31_BASE			BRCM_AP_TZC_DRAM1_BASE

#define BL31_LIMIT			(BRCM_AP_TZC_DRAM1_BASE + \
					PLAT_BRCM_MAX_BL31_SIZE)
#else
/* Put BL3-1 at the end of external on-board SRAM connected as NOR flash */
#define BL31_BASE			(NOR_BASE_ADDR + NOR_SIZE - \
					PLAT_BRCM_MAX_BL31_SIZE)

#define BL31_LIMIT			(NOR_BASE_ADDR + NOR_SIZE)
#endif

#define SECURE_DDR_END_ADDRESS		BL31_LIMIT

#ifdef NEED_SCP_BL2
#define SCP_BL2_BASE			BL31_BASE
#define PLAT_MAX_SCP_BL2_SIZE	0x9000
#define PLAT_SCP_COM_SHARED_MEM_BASE (CRMU_SHARED_SRAM_BASE)
/* dummy defined */
#define PLAT_BRCM_MHU_BASE		0x0
#endif

#define SECONDARY_CPU_SPIN_BASE_ADDR	BRCM_SHARED_RAM_BASE

/* Generic system timer counter frequency */
#ifndef SYSCNT_FREQ
#define SYSCNT_FREQ			(125 * 1000 * 1000)
#endif

/*
 * Enable the BL32 definitions, only when optee os is selected as secure
 * payload (BL32).
 */
#ifdef SPD_opteed
/*
 * Reserved Memory Map : SHMEM & TZDRAM.
 *
 * +--------+----------+ 0x8D000000
 * | SHMEM (NS)         | 16MB
 * +-------------------+ 0x8E000000
 * |        | TEE_RAM(S)| 4MB
 * + TZDRAM +----------+ 0x8E400000
 * |        | TA_RAM(S) | 12MB
 * +-------------------+ 0x8F000000
 * | BL31 Binary (S)    | 192KB
 * +-------------------+ 0x8F030000
 */

#define BL32_VA_SIZE		(4 * 1024 * 1024)
#define BL32_BASE		(0x8E000000)
#define BL32_LIMIT		(BL32_BASE + BL32_VA_SIZE)
#define TSP_SEC_MEM_BASE	BL32_BASE
#define TSP_SEC_MEM_SIZE	BL32_VA_SIZE
#endif

#ifdef SPD_opteed
	#define SECURE_DDR_BASE_ADDRESS BL32_BASE
#else
	#define SECURE_DDR_BASE_ADDRESS BL31_BASE
#endif
/*******************************************************************************
 * Platform specific page table and MMU setup constants
 ******************************************************************************/

#define MAX_XLAT_TABLES		7

#define PLAT_BRCM_MMAP_ENTRIES	10

#define MAX_MMAP_REGIONS		(PLAT_BRCM_MMAP_ENTRIES +	\
					 BRCM_BL_REGIONS)

#ifdef USE_DDR
#ifdef BL33_OVERRIDE_LOAD_ADDR
#define PLAT_BRCM_NS_IMAGE_OFFSET	BL33_OVERRIDE_LOAD_ADDR
#else
/*
 * BL3-3 image starting offset.
 * Putting start of DRAM as of now.
 */
#define PLAT_BRCM_NS_IMAGE_OFFSET	0x80000000
#endif /* BL33_OVERRIDE_LOAD_ADDR */
#else
/*
 * BL3-3 image starting offset.
 * Putting start of external on-board SRAM as of now.
 */
#define PLAT_BRCM_NS_IMAGE_OFFSET	NOR_BASE_ADDR
#endif /* USE_DDR */
/******************************************************************************
 * Required platform porting definitions common to all BRCM platforms
 *****************************************************************************/

#define MAX_IO_DEVICES			5
#define MAX_IO_HANDLES			6

#define PRIMARY_CPU		0

/* GIC Parameter */
#define PLAT_BRCM_GICD_BASE	GIC500_BASE
#define PLAT_BRCM_GICR_BASE	(GIC500_BASE + 0x200000)

/* Define secure interrupt as per Group here */
#define PLAT_BRCM_G1S_IRQ_PROPS(grp) \
	INTR_PROP_DESC(BRCM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \
			GIC_INTR_CFG_EDGE), \
	INTR_PROP_DESC(BRCM_IRQ_SEC_SPI_0, GIC_HIGHEST_SEC_PRIORITY, (grp), \
			GIC_INTR_CFG_EDGE)

#define PLAT_BRCM_G0_IRQ_PROPS(grp) \
	INTR_PROP_DESC(BRCM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, (grp), \
			GIC_INTR_CFG_EDGE), \

/*
 *CCN 502 related constants.
 */
#define PLAT_BRCM_CLUSTER_COUNT 4  /* Number of RN-F Masters */
#define PLAT_BRCM_CLUSTER_TO_CCN_ID_MAP	CLUSTER0_NODE_ID, CLUSTER1_NODE_ID, CLUSTER2_NODE_ID, CLUSTER3_NODE_ID
#define CCN_SIZE		0x1000000
#define CLUSTER0_NODE_ID	1
#define CLUSTER1_NODE_ID	7
#define CLUSTER2_NODE_ID	9
#define CLUSTER3_NODE_ID	15

#endif