xref: /arm-trusted-firmware/include/plat/marvell/armada/a8k/common/marvell_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (C) 2018 Marvell International Ltd.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier:     BSD-3-Clause
5*91f16700Schasinglulu  * https://spdx.org/licenses
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef MARVELL_DEF_H
9*91f16700Schasinglulu #define MARVELL_DEF_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <platform_def.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <arch.h>
14*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h>
15*91f16700Schasinglulu #include <lib/xlat_tables/xlat_tables_v2.h>
16*91f16700Schasinglulu #include <plat/common/common_def.h>
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /******************************************************************************
19*91f16700Schasinglulu  * Definitions common to all MARVELL standard platforms
20*91f16700Schasinglulu  *****************************************************************************/
21*91f16700Schasinglulu 
22*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */
23*91f16700Schasinglulu #define MARVELL_BL31_PLAT_PARAM_VAL		0x0f1e2d3c4b5a6978ULL
24*91f16700Schasinglulu 
25*91f16700Schasinglulu 
26*91f16700Schasinglulu #define MARVELL_CACHE_WRITEBACK_SHIFT	6
27*91f16700Schasinglulu 
28*91f16700Schasinglulu /*
29*91f16700Schasinglulu  * Macros mapping the MPIDR Affinity levels to MARVELL Platform Power levels.
30*91f16700Schasinglulu  * The power levels have a 1:1 mapping with the MPIDR affinity levels.
31*91f16700Schasinglulu  */
32*91f16700Schasinglulu #define MARVELL_PWR_LVL0		MPIDR_AFFLVL0
33*91f16700Schasinglulu #define MARVELL_PWR_LVL1		MPIDR_AFFLVL1
34*91f16700Schasinglulu #define MARVELL_PWR_LVL2		MPIDR_AFFLVL2
35*91f16700Schasinglulu 
36*91f16700Schasinglulu /*
37*91f16700Schasinglulu  *  Macros for local power states in Marvell platforms encoded by
38*91f16700Schasinglulu  *  State-ID field within the power-state parameter.
39*91f16700Schasinglulu  */
40*91f16700Schasinglulu /* Local power state for power domains in Run state. */
41*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RUN	0
42*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */
43*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RET	1
44*91f16700Schasinglulu /*
45*91f16700Schasinglulu  * Local power state for OFF/power-down. Valid for CPU
46*91f16700Schasinglulu  * and cluster power domains
47*91f16700Schasinglulu  */
48*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_OFF	2
49*91f16700Schasinglulu 
50*91f16700Schasinglulu /* This leaves a gap between end of DRAM and start of ROM block */
51*91f16700Schasinglulu #define MARVELL_TRUSTED_DRAM_SIZE	0x80000	/* 512 KB */
52*91f16700Schasinglulu 
53*91f16700Schasinglulu /* The first 4KB of Trusted SRAM are used as shared memory */
54*91f16700Schasinglulu #define MARVELL_SHARED_RAM_BASE		PLAT_MARVELL_ATF_BASE
55*91f16700Schasinglulu #define MARVELL_SHARED_RAM_SIZE		0x00001000	/* 4 KB */
56*91f16700Schasinglulu 
57*91f16700Schasinglulu /* The remaining Trusted SRAM is used to load the BL images */
58*91f16700Schasinglulu #define MARVELL_BL_RAM_BASE		(MARVELL_SHARED_RAM_BASE +	\
59*91f16700Schasinglulu 					 MARVELL_SHARED_RAM_SIZE)
60*91f16700Schasinglulu #define MARVELL_BL_RAM_SIZE		(MARVELL_TRUSTED_DRAM_SIZE - \
61*91f16700Schasinglulu 					 MARVELL_SHARED_RAM_SIZE)
62*91f16700Schasinglulu /* Non-shared DRAM */
63*91f16700Schasinglulu #define MARVELL_DRAM_BASE		ULL(0x0)
64*91f16700Schasinglulu #define MARVELL_DRAM_SIZE		ULL(0x80000000)
65*91f16700Schasinglulu #define MARVELL_DRAM_END		(MARVELL_DRAM_BASE + \
66*91f16700Schasinglulu 					 MARVELL_DRAM_SIZE - 1)
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #define MARVELL_IRQ_PIC0		28
69*91f16700Schasinglulu #define MARVELL_IRQ_SEC_PHY_TIMER	29
70*91f16700Schasinglulu 
71*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_0		8
72*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_1		9
73*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_2		10
74*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_3		11
75*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_4		12
76*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_5		13
77*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_6		14
78*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_7		15
79*91f16700Schasinglulu 
80*91f16700Schasinglulu #ifdef SPD_opteed
81*91f16700Schasinglulu /*
82*91f16700Schasinglulu  * BL2 needs to map 4MB at the end of TZC_DRAM1 in order to
83*91f16700Schasinglulu  * load/authenticate the trusted os extra image. The first 512KB of
84*91f16700Schasinglulu  * TZC_DRAM1 are reserved for trusted os (OPTEE). The extra image loading
85*91f16700Schasinglulu  * for OPTEE is paged image which only include the paging part using
86*91f16700Schasinglulu  * virtual memory but without "init" data. OPTEE will copy the "init" data
87*91f16700Schasinglulu  * (from pager image) to the first 512KB of TZC_DRAM, and then copy the
88*91f16700Schasinglulu  * extra image behind the "init" data.
89*91f16700Schasinglulu  */
90*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_BASE	\
91*91f16700Schasinglulu 					(PLAT_MARVELL_TRUSTED_RAM_BASE + \
92*91f16700Schasinglulu 					 PLAT_MARVELL_TRUSTED_RAM_SIZE - \
93*91f16700Schasinglulu 					 MARVELL_OPTEE_PAGEABLE_LOAD_SIZE)
94*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_SIZE	0x400000
95*91f16700Schasinglulu #define MARVELL_OPTEE_PAGEABLE_LOAD_MEM		\
96*91f16700Schasinglulu 					MAP_REGION_FLAT(		  \
97*91f16700Schasinglulu 					MARVELL_OPTEE_PAGEABLE_LOAD_BASE, \
98*91f16700Schasinglulu 					MARVELL_OPTEE_PAGEABLE_LOAD_SIZE, \
99*91f16700Schasinglulu 					MT_MEMORY | MT_RW | MT_SECURE)
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /*
102*91f16700Schasinglulu  * Map the memory for the OP-TEE core (also known as OP-TEE pager when paging
103*91f16700Schasinglulu  * support is enabled).
104*91f16700Schasinglulu  */
105*91f16700Schasinglulu #define MARVELL_MAP_OPTEE_CORE_MEM	MAP_REGION_FLAT(		\
106*91f16700Schasinglulu 						BL32_BASE,		\
107*91f16700Schasinglulu 						BL32_LIMIT - BL32_BASE,	\
108*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_SECURE)
109*91f16700Schasinglulu #endif /* SPD_opteed */
110*91f16700Schasinglulu 
111*91f16700Schasinglulu #define MARVELL_MAP_SECURE_RAM		MAP_REGION_FLAT(		 \
112*91f16700Schasinglulu 						MARVELL_SHARED_RAM_BASE, \
113*91f16700Schasinglulu 						MARVELL_SHARED_RAM_SIZE, \
114*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_SECURE)
115*91f16700Schasinglulu 
116*91f16700Schasinglulu #define MARVELL_MAP_DRAM		MAP_REGION_FLAT(		\
117*91f16700Schasinglulu 						MARVELL_DRAM_BASE,	\
118*91f16700Schasinglulu 						MARVELL_DRAM_SIZE,	\
119*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_NS)
120*91f16700Schasinglulu 
121*91f16700Schasinglulu /*
122*91f16700Schasinglulu  * The number of regions like RO(code), coherent and data required by
123*91f16700Schasinglulu  * different BL stages which need to be mapped in the MMU.
124*91f16700Schasinglulu  */
125*91f16700Schasinglulu #if USE_COHERENT_MEM
126*91f16700Schasinglulu #define MARVELL_BL_REGIONS		3
127*91f16700Schasinglulu #else
128*91f16700Schasinglulu #define MARVELL_BL_REGIONS		2
129*91f16700Schasinglulu #endif
130*91f16700Schasinglulu 
131*91f16700Schasinglulu #define MAX_MMAP_REGIONS		(PLAT_MARVELL_MMAP_ENTRIES +	\
132*91f16700Schasinglulu 					 MARVELL_BL_REGIONS)
133*91f16700Schasinglulu 
134*91f16700Schasinglulu #define MARVELL_CONSOLE_BAUDRATE	115200
135*91f16700Schasinglulu 
136*91f16700Schasinglulu /******************************************************************************
137*91f16700Schasinglulu  * Required platform porting definitions common to all MARVELL std. platforms
138*91f16700Schasinglulu  *****************************************************************************/
139*91f16700Schasinglulu 
140*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
141*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
142*91f16700Schasinglulu 
143*91f16700Schasinglulu /*
144*91f16700Schasinglulu  * This macro defines the deepest retention state possible. A higher state
145*91f16700Schasinglulu  * id will represent an invalid or a power down state.
146*91f16700Schasinglulu  */
147*91f16700Schasinglulu #define PLAT_MAX_RET_STATE		MARVELL_LOCAL_STATE_RET
148*91f16700Schasinglulu 
149*91f16700Schasinglulu /*
150*91f16700Schasinglulu  * This macro defines the deepest power down states possible. Any state ID
151*91f16700Schasinglulu  * higher than this is invalid.
152*91f16700Schasinglulu  */
153*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE		MARVELL_LOCAL_STATE_OFF
154*91f16700Schasinglulu 
155*91f16700Schasinglulu 
156*91f16700Schasinglulu #define PLATFORM_CORE_COUNT		PLAT_MARVELL_CORE_COUNT
157*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS		(PLAT_MARVELL_CLUSTER_COUNT +	\
158*91f16700Schasinglulu 					 PLATFORM_CORE_COUNT)
159*91f16700Schasinglulu 
160*91f16700Schasinglulu /*
161*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
162*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
163*91f16700Schasinglulu  * integrated and external caches.
164*91f16700Schasinglulu  */
165*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE		(1 << MARVELL_CACHE_WRITEBACK_SHIFT)
166*91f16700Schasinglulu 
167*91f16700Schasinglulu 
168*91f16700Schasinglulu /*******************************************************************************
169*91f16700Schasinglulu  * BL1 specific defines.
170*91f16700Schasinglulu  * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of
171*91f16700Schasinglulu  * addresses.
172*91f16700Schasinglulu  ******************************************************************************/
173*91f16700Schasinglulu #define BL1_RO_BASE			PLAT_MARVELL_TRUSTED_ROM_BASE
174*91f16700Schasinglulu #define BL1_RO_LIMIT			(PLAT_MARVELL_TRUSTED_ROM_BASE	\
175*91f16700Schasinglulu 					 + PLAT_MARVELL_TRUSTED_ROM_SIZE)
176*91f16700Schasinglulu /*
177*91f16700Schasinglulu  * Put BL1 RW at the top of the Trusted SRAM.
178*91f16700Schasinglulu  */
179*91f16700Schasinglulu #define BL1_RW_BASE		(MARVELL_BL_RAM_BASE +		\
180*91f16700Schasinglulu 					MARVELL_BL_RAM_SIZE -	\
181*91f16700Schasinglulu 					PLAT_MARVELL_MAX_BL1_RW_SIZE)
182*91f16700Schasinglulu #define BL1_RW_LIMIT		(MARVELL_BL_RAM_BASE + MARVELL_BL_RAM_SIZE)
183*91f16700Schasinglulu 
184*91f16700Schasinglulu /*******************************************************************************
185*91f16700Schasinglulu  * BLE specific defines.
186*91f16700Schasinglulu  ******************************************************************************/
187*91f16700Schasinglulu #define BLE_BASE			PLAT_MARVELL_SRAM_BASE
188*91f16700Schasinglulu #define BLE_LIMIT			PLAT_MARVELL_SRAM_END
189*91f16700Schasinglulu 
190*91f16700Schasinglulu /*******************************************************************************
191*91f16700Schasinglulu  * BL2 specific defines.
192*91f16700Schasinglulu  ******************************************************************************/
193*91f16700Schasinglulu /*
194*91f16700Schasinglulu  * Put BL2 just below BL31.
195*91f16700Schasinglulu  */
196*91f16700Schasinglulu #define BL2_BASE			(BL31_BASE - PLAT_MARVELL_MAX_BL2_SIZE)
197*91f16700Schasinglulu #define BL2_LIMIT			BL31_BASE
198*91f16700Schasinglulu 
199*91f16700Schasinglulu /*******************************************************************************
200*91f16700Schasinglulu  * BL31 specific defines.
201*91f16700Schasinglulu  ******************************************************************************/
202*91f16700Schasinglulu /*
203*91f16700Schasinglulu  * Put BL31 at the top of the Trusted SRAM.
204*91f16700Schasinglulu  */
205*91f16700Schasinglulu #define BL31_BASE			(MARVELL_BL_RAM_BASE +		\
206*91f16700Schasinglulu 						MARVELL_BL_RAM_SIZE -	\
207*91f16700Schasinglulu 						PLAT_MARVEL_MAX_BL31_SIZE)
208*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT		BL1_RW_BASE
209*91f16700Schasinglulu #define BL31_LIMIT			(MARVELL_BL_RAM_BASE +	\
210*91f16700Schasinglulu 					 MARVELL_BL_RAM_SIZE)
211*91f16700Schasinglulu 
212*91f16700Schasinglulu /*******************************************************************************
213*91f16700Schasinglulu  * BL32 specific defines.
214*91f16700Schasinglulu  ******************************************************************************/
215*91f16700Schasinglulu #define BL32_BASE		PLAT_MARVELL_TRUSTED_RAM_BASE
216*91f16700Schasinglulu #define BL32_LIMIT		(BL32_BASE + PLAT_MARVELL_TRUSTED_RAM_SIZE)
217*91f16700Schasinglulu 
218*91f16700Schasinglulu #ifdef SPD_none
219*91f16700Schasinglulu #undef BL32_BASE
220*91f16700Schasinglulu #endif /* SPD_none */
221*91f16700Schasinglulu 
222*91f16700Schasinglulu #endif /* MARVELL_DEF_H */
223