xref: /arm-trusted-firmware/include/plat/marvell/armada/a3k/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 #define PLAT_MARVELL_NORTHB_COUNT		1
26*91f16700Schasinglulu 
27*91f16700Schasinglulu #define PLAT_MARVELL_CLUSTER_COUNT		1
28*91f16700Schasinglulu 
29*91f16700Schasinglulu #define MARVELL_CACHE_WRITEBACK_SHIFT		6
30*91f16700Schasinglulu 
31*91f16700Schasinglulu /*
32*91f16700Schasinglulu  * Macros mapping the MPIDR Affinity levels to MARVELL Platform Power levels.
33*91f16700Schasinglulu  * The power levels have a 1:1 mapping with the MPIDR affinity levels.
34*91f16700Schasinglulu  */
35*91f16700Schasinglulu #define MARVELL_PWR_LVL0		MPIDR_AFFLVL0
36*91f16700Schasinglulu #define MARVELL_PWR_LVL1		MPIDR_AFFLVL1
37*91f16700Schasinglulu #define MARVELL_PWR_LVL2		MPIDR_AFFLVL2
38*91f16700Schasinglulu 
39*91f16700Schasinglulu /*
40*91f16700Schasinglulu  *  Macros for local power states in Marvell platforms encoded by State-ID field
41*91f16700Schasinglulu  *  within the power-state parameter.
42*91f16700Schasinglulu  */
43*91f16700Schasinglulu /* Local power state for power domains in Run state. */
44*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RUN	0
45*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */
46*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_RET	1
47*91f16700Schasinglulu /* Local power state for OFF/power-down.
48*91f16700Schasinglulu  * Valid for CPU and cluster power domains
49*91f16700Schasinglulu  */
50*91f16700Schasinglulu #define MARVELL_LOCAL_STATE_OFF	2
51*91f16700Schasinglulu 
52*91f16700Schasinglulu /* This leaves a gap between end of DRAM and start of ROM block */
53*91f16700Schasinglulu #define MARVELL_TRUSTED_DRAM_SIZE	0x80000	/* 512 KB */
54*91f16700Schasinglulu 
55*91f16700Schasinglulu /* The first 4KB of Trusted SRAM are used as shared memory */
56*91f16700Schasinglulu #define MARVELL_SHARED_RAM_BASE		PLAT_MARVELL_ATF_BASE
57*91f16700Schasinglulu #define MARVELL_SHARED_RAM_SIZE		0x00001000	/* 4 KB */
58*91f16700Schasinglulu 
59*91f16700Schasinglulu /* The remaining Trusted SRAM is used to load the BL images */
60*91f16700Schasinglulu #define MARVELL_BL_RAM_BASE		(MARVELL_SHARED_RAM_BASE + \
61*91f16700Schasinglulu 					 MARVELL_SHARED_RAM_SIZE)
62*91f16700Schasinglulu #define MARVELL_BL_RAM_SIZE		(MARVELL_TRUSTED_DRAM_SIZE - \
63*91f16700Schasinglulu 					 MARVELL_SHARED_RAM_SIZE)
64*91f16700Schasinglulu 
65*91f16700Schasinglulu #define MARVELL_DRAM_BASE		ULL(0x0)
66*91f16700Schasinglulu #define MARVELL_DRAM_SIZE		ULL(0x20000000)
67*91f16700Schasinglulu #define MARVELL_DRAM_END		(MARVELL_DRAM_BASE + \
68*91f16700Schasinglulu 					 MARVELL_DRAM_SIZE - 1)
69*91f16700Schasinglulu 
70*91f16700Schasinglulu #define MARVELL_IRQ_SEC_PHY_TIMER	29
71*91f16700Schasinglulu 
72*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_0		8
73*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_1		9
74*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_2		10
75*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_3		11
76*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_4		12
77*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_5		13
78*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_6		14
79*91f16700Schasinglulu #define MARVELL_IRQ_SEC_SGI_7		15
80*91f16700Schasinglulu 
81*91f16700Schasinglulu #define MARVELL_MAP_SHARED_RAM		MAP_REGION_FLAT(		 \
82*91f16700Schasinglulu 						MARVELL_SHARED_RAM_BASE, \
83*91f16700Schasinglulu 						MARVELL_SHARED_RAM_SIZE, \
84*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_SECURE)
85*91f16700Schasinglulu 
86*91f16700Schasinglulu #define MARVELL_MAP_DRAM		MAP_REGION_FLAT(		\
87*91f16700Schasinglulu 						MARVELL_DRAM_BASE,	\
88*91f16700Schasinglulu 						MARVELL_DRAM_SIZE,	\
89*91f16700Schasinglulu 						MT_MEMORY | MT_RW | MT_NS)
90*91f16700Schasinglulu 
91*91f16700Schasinglulu /*
92*91f16700Schasinglulu  * The number of regions like RO(code), coherent and data required by
93*91f16700Schasinglulu  * different BL stages which need to be mapped in the MMU.
94*91f16700Schasinglulu  */
95*91f16700Schasinglulu #if USE_COHERENT_MEM
96*91f16700Schasinglulu #define MARVELL_BL_REGIONS		3
97*91f16700Schasinglulu #else
98*91f16700Schasinglulu #define MARVELL_BL_REGIONS		2
99*91f16700Schasinglulu #endif
100*91f16700Schasinglulu 
101*91f16700Schasinglulu #define MAX_MMAP_REGIONS		(PLAT_MARVELL_MMAP_ENTRIES + \
102*91f16700Schasinglulu 					 MARVELL_BL_REGIONS)
103*91f16700Schasinglulu 
104*91f16700Schasinglulu #define MARVELL_CONSOLE_BAUDRATE	115200
105*91f16700Schasinglulu 
106*91f16700Schasinglulu /****************************************************************************
107*91f16700Schasinglulu  * Required platform porting definitions common to all MARVELL std. platforms
108*91f16700Schasinglulu  ****************************************************************************
109*91f16700Schasinglulu  */
110*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
111*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
112*91f16700Schasinglulu 
113*91f16700Schasinglulu /*
114*91f16700Schasinglulu  * This macro defines the deepest retention state possible. A higher state
115*91f16700Schasinglulu  * id will represent an invalid or a power down state.
116*91f16700Schasinglulu  */
117*91f16700Schasinglulu #define PLAT_MAX_RET_STATE		MARVELL_LOCAL_STATE_RET
118*91f16700Schasinglulu 
119*91f16700Schasinglulu /*
120*91f16700Schasinglulu  * This macro defines the deepest power down states possible. Any state ID
121*91f16700Schasinglulu  * higher than this is invalid.
122*91f16700Schasinglulu  */
123*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE		MARVELL_LOCAL_STATE_OFF
124*91f16700Schasinglulu 
125*91f16700Schasinglulu 
126*91f16700Schasinglulu #define PLATFORM_CORE_COUNT		PLAT_MARVELL_CLUSTER_CORE_COUNT
127*91f16700Schasinglulu 
128*91f16700Schasinglulu /*
129*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
130*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
131*91f16700Schasinglulu  * integrated and external caches.
132*91f16700Schasinglulu  */
133*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE		(1 << MARVELL_CACHE_WRITEBACK_SHIFT)
134*91f16700Schasinglulu 
135*91f16700Schasinglulu 
136*91f16700Schasinglulu /*****************************************************************************
137*91f16700Schasinglulu  * BL1 specific defines.
138*91f16700Schasinglulu  * BL1 RW data is relocated from ROM to RAM at runtime so we need 2 sets of
139*91f16700Schasinglulu  * addresses.
140*91f16700Schasinglulu  *****************************************************************************
141*91f16700Schasinglulu  */
142*91f16700Schasinglulu #define BL1_RO_BASE		PLAT_MARVELL_TRUSTED_ROM_BASE
143*91f16700Schasinglulu #define BL1_RO_LIMIT		(PLAT_MARVELL_TRUSTED_ROM_BASE	\
144*91f16700Schasinglulu 					+ PLAT_MARVELL_TRUSTED_ROM_SIZE)
145*91f16700Schasinglulu /*
146*91f16700Schasinglulu  * Put BL1 RW at the top of the Trusted SRAM.
147*91f16700Schasinglulu  */
148*91f16700Schasinglulu #define BL1_RW_BASE		(MARVELL_BL_RAM_BASE +		\
149*91f16700Schasinglulu 					MARVELL_BL_RAM_SIZE -	\
150*91f16700Schasinglulu 					PLAT_MARVELL_MAX_BL1_RW_SIZE)
151*91f16700Schasinglulu #define BL1_RW_LIMIT		(MARVELL_BL_RAM_BASE + MARVELL_BL_RAM_SIZE)
152*91f16700Schasinglulu 
153*91f16700Schasinglulu /*****************************************************************************
154*91f16700Schasinglulu  * BL2 specific defines.
155*91f16700Schasinglulu  *****************************************************************************
156*91f16700Schasinglulu  */
157*91f16700Schasinglulu /*
158*91f16700Schasinglulu  * Put BL2 just below BL31.
159*91f16700Schasinglulu  */
160*91f16700Schasinglulu #define BL2_BASE		(BL31_BASE - PLAT_MARVELL_MAX_BL2_SIZE)
161*91f16700Schasinglulu #define BL2_LIMIT		BL31_BASE
162*91f16700Schasinglulu 
163*91f16700Schasinglulu /*****************************************************************************
164*91f16700Schasinglulu  * BL31 specific defines.
165*91f16700Schasinglulu  *****************************************************************************
166*91f16700Schasinglulu  */
167*91f16700Schasinglulu /*
168*91f16700Schasinglulu  * Put BL31 at the top of the Trusted SRAM.
169*91f16700Schasinglulu  */
170*91f16700Schasinglulu #define BL31_BASE		(MARVELL_BL_RAM_BASE + \
171*91f16700Schasinglulu 					MARVELL_BL_RAM_SIZE - \
172*91f16700Schasinglulu 					PLAT_MARVEL_MAX_BL31_SIZE)
173*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT	BL1_RW_BASE
174*91f16700Schasinglulu #define BL31_LIMIT			(MARVELL_BL_RAM_BASE +	\
175*91f16700Schasinglulu 					 MARVELL_BL_RAM_SIZE)
176*91f16700Schasinglulu 
177*91f16700Schasinglulu /*****************************************************************************
178*91f16700Schasinglulu  * BL32 specific defines.
179*91f16700Schasinglulu  *****************************************************************************
180*91f16700Schasinglulu  */
181*91f16700Schasinglulu #define BL32_BASE		PLAT_MARVELL_TRUSTED_RAM_BASE
182*91f16700Schasinglulu #define BL32_LIMIT		(BL32_BASE + PLAT_MARVELL_TRUSTED_RAM_SIZE)
183*91f16700Schasinglulu 
184*91f16700Schasinglulu #ifdef SPD_none
185*91f16700Schasinglulu #undef BL32_BASE
186*91f16700Schasinglulu #endif /* SPD_none */
187*91f16700Schasinglulu 
188*91f16700Schasinglulu #endif /* MARVELL_DEF_H */
189