xref: /arm-trusted-firmware/plat/imx/imx7/warp7/include/platform_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
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 #define PLATFORM_STACK_SIZE		0x1000
15*91f16700Schasinglulu 
16*91f16700Schasinglulu #define PLATFORM_MAX_CPUS_PER_CLUSTER	U(2)
17*91f16700Schasinglulu #define PLATFORM_CLUSTER_COUNT		U(1)
18*91f16700Schasinglulu #define PLATFORM_CLUSTER0_CORE_COUNT	PLATFORM_MAX_CPUS_PER_CLUSTER
19*91f16700Schasinglulu #define PLATFORM_CLUSTER1_CORE_COUNT	U(0)
20*91f16700Schasinglulu 
21*91f16700Schasinglulu #define PLATFORM_CORE_COUNT		(PLATFORM_CLUSTER0_CORE_COUNT + \
22*91f16700Schasinglulu 					 PLATFORM_CLUSTER1_CORE_COUNT)
23*91f16700Schasinglulu 
24*91f16700Schasinglulu #define WARP7_PRIMARY_CPU		U(0)
25*91f16700Schasinglulu 
26*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS		(PLATFORM_CLUSTER_COUNT + \
27*91f16700Schasinglulu 					PLATFORM_CORE_COUNT)
28*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL		MPIDR_AFFLVL1
29*91f16700Schasinglulu 
30*91f16700Schasinglulu #define PLAT_MAX_RET_STATE		1
31*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE		2
32*91f16700Schasinglulu 
33*91f16700Schasinglulu /* Local power state for power domains in Run state. */
34*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RUN		0
35*91f16700Schasinglulu 
36*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */
37*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RET		1
38*91f16700Schasinglulu 
39*91f16700Schasinglulu /*
40*91f16700Schasinglulu  * Local power state for OFF/power-down. Valid for CPU and cluster power
41*91f16700Schasinglulu  * domains.
42*91f16700Schasinglulu  */
43*91f16700Schasinglulu #define PLAT_LOCAL_STATE_OFF		2
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /*
46*91f16700Schasinglulu  * Macros used to parse state information from State-ID if it is using the
47*91f16700Schasinglulu  * recommended encoding for State-ID.
48*91f16700Schasinglulu  */
49*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_WIDTH		4
50*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_MASK		((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1)
51*91f16700Schasinglulu 
52*91f16700Schasinglulu /*
53*91f16700Schasinglulu  * Some data must be aligned on the biggest cache line size in the platform.
54*91f16700Schasinglulu  * This is known only to the platform as it might have a combination of
55*91f16700Schasinglulu  * integrated and external caches.
56*91f16700Schasinglulu  * i.MX7 has a 32 byte cacheline size
57*91f16700Schasinglulu  * i.MX 7Solo Applications Processor Reference Manual, Rev. 0.1, 08/2016 pg 244
58*91f16700Schasinglulu  */
59*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT		4
60*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE		(1 << CACHE_WRITEBACK_SHIFT)
61*91f16700Schasinglulu 
62*91f16700Schasinglulu /*
63*91f16700Schasinglulu  * Partition memory into secure BootROM, OCRAM_S, non-secure DRAM, secure DRAM
64*91f16700Schasinglulu  */
65*91f16700Schasinglulu #define BOOT_ROM_BASE			0x00000000
66*91f16700Schasinglulu #define BOOT_ROM_SIZE			0x00020000
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #define OCRAM_S_BASE			0x00180000
69*91f16700Schasinglulu #define OCRAM_S_SIZE			0x00008000
70*91f16700Schasinglulu 
71*91f16700Schasinglulu /* Controller maps 2GB, board contains 512 MB. 0x80000000 - 0xa0000000 */
72*91f16700Schasinglulu #define DRAM_BASE			0x80000000
73*91f16700Schasinglulu #define DRAM_SIZE			0x20000000
74*91f16700Schasinglulu #define DRAM_LIMIT			(DRAM_BASE + DRAM_SIZE)
75*91f16700Schasinglulu 
76*91f16700Schasinglulu /* Place OPTEE at minus 32 MB from the end of memory. 0x9e000000 - 0xa0000000 */
77*91f16700Schasinglulu #define IMX7_OPTEE_SIZE			0x02000000
78*91f16700Schasinglulu #define IMX7_OPTEE_BASE			(DRAM_LIMIT - IMX7_OPTEE_SIZE)
79*91f16700Schasinglulu #define IMX7_OPTEE_LIMIT		(IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE)
80*91f16700Schasinglulu 
81*91f16700Schasinglulu /* Place ATF directly beneath OPTEE. 0x9df00000 - 0x9e000000 */
82*91f16700Schasinglulu #define BL2_RAM_SIZE			0x00100000
83*91f16700Schasinglulu #define BL2_RAM_BASE			(IMX7_OPTEE_BASE - BL2_RAM_SIZE)
84*91f16700Schasinglulu #define BL2_RAM_LIMIT			(BL2_RAM_BASE + BL2_RAM_SIZE)
85*91f16700Schasinglulu 
86*91f16700Schasinglulu /* Optional Mailbox. Only relevant on i.MX7D. 0x9deff000 - 0x9df00000*/
87*91f16700Schasinglulu #define SHARED_RAM_SIZE			0x00001000
88*91f16700Schasinglulu #define SHARED_RAM_BASE			(BL2_RAM_BASE - SHARED_RAM_SIZE)
89*91f16700Schasinglulu #define SHARED_RAM_LIMIT		(SHARED_RAM_BASE + SHARED_RAM_SIZE)
90*91f16700Schasinglulu 
91*91f16700Schasinglulu /* Define the absolute location of u-boot 0x87800000 - 0x87900000 */
92*91f16700Schasinglulu #define IMX7_UBOOT_SIZE			0x00100000
93*91f16700Schasinglulu #define IMX7_UBOOT_BASE			(DRAM_BASE + 0x7800000)
94*91f16700Schasinglulu #define IMX7_UBOOT_LIMIT		(IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE)
95*91f16700Schasinglulu 
96*91f16700Schasinglulu /* Define FIP image absolute location 0x80000000 - 0x80100000 */
97*91f16700Schasinglulu #define IMX_FIP_SIZE			0x00100000
98*91f16700Schasinglulu #define IMX_FIP_BASE			(DRAM_BASE)
99*91f16700Schasinglulu #define IMX_FIP_LIMIT			(IMX_FIP_BASE + IMX_FIP_SIZE)
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /* Define FIP image location at 1MB offset */
102*91f16700Schasinglulu #define IMX_FIP_MMC_BASE		(1024 * 1024)
103*91f16700Schasinglulu 
104*91f16700Schasinglulu /* Define the absolute location of DTB 0x83000000 - 0x83100000 */
105*91f16700Schasinglulu #define IMX7_DTB_SIZE			0x00100000
106*91f16700Schasinglulu #define IMX7_DTB_BASE			(DRAM_BASE + 0x03000000)
107*91f16700Schasinglulu #define IMX7_DTB_LIMIT			(IMX7_DTB_BASE + IMX7_DTB_SIZE)
108*91f16700Schasinglulu 
109*91f16700Schasinglulu /* Define the absolute location of DTB Overlay 0x83100000 - 0x83101000 */
110*91f16700Schasinglulu #define IMX7_DTB_OVERLAY_SIZE		0x00001000
111*91f16700Schasinglulu #define IMX7_DTB_OVERLAY_BASE		IMX7_DTB_LIMIT
112*91f16700Schasinglulu #define IMX7_DTB_OVERLAY_LIMIT		(IMX7_DTB_OVERLAY_BASE + \
113*91f16700Schasinglulu 					 IMX7_DTB_OVERLAY_SIZE)
114*91f16700Schasinglulu 
115*91f16700Schasinglulu /*
116*91f16700Schasinglulu  * BL2 specific defines.
117*91f16700Schasinglulu  *
118*91f16700Schasinglulu  * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug
119*91f16700Schasinglulu  * size plus a little space for growth.
120*91f16700Schasinglulu  */
121*91f16700Schasinglulu #define BL2_BASE		BL2_RAM_BASE
122*91f16700Schasinglulu #define BL2_LIMIT		(BL2_RAM_BASE + BL2_RAM_SIZE)
123*91f16700Schasinglulu 
124*91f16700Schasinglulu /*
125*91f16700Schasinglulu  * BL3-2/OPTEE
126*91f16700Schasinglulu  */
127*91f16700Schasinglulu # define BL32_BASE		IMX7_OPTEE_BASE
128*91f16700Schasinglulu # define BL32_LIMIT		(IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE)
129*91f16700Schasinglulu 
130*91f16700Schasinglulu /*
131*91f16700Schasinglulu  * BL3-3/U-BOOT
132*91f16700Schasinglulu  */
133*91f16700Schasinglulu #define BL33_BASE		IMX7_UBOOT_BASE
134*91f16700Schasinglulu #define BL33_LIMIT		(IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE)
135*91f16700Schasinglulu 
136*91f16700Schasinglulu /*
137*91f16700Schasinglulu  * ATF's view of memory
138*91f16700Schasinglulu  *
139*91f16700Schasinglulu  * 0xa0000000 +-----------------+
140*91f16700Schasinglulu  *            |       DDR       | BL32/OPTEE
141*91f16700Schasinglulu  * 0x9e000000 +-----------------+
142*91f16700Schasinglulu  *            |       DDR       | BL23 ATF
143*91f16700Schasinglulu  * 0x9df00000 +-----------------+
144*91f16700Schasinglulu  *            |       DDR       | Shared MBOX RAM
145*91f16700Schasinglulu  * 0x9de00000 +-----------------+
146*91f16700Schasinglulu  *            |       DDR       | Unallocated
147*91f16700Schasinglulu  * 0x87900000 +-----------------+
148*91f16700Schasinglulu  *            |       DDR       | BL33/U-BOOT
149*91f16700Schasinglulu  * 0x87800000 +-----------------+
150*91f16700Schasinglulu  *            |       DDR       | Unallocated
151*91f16700Schasinglulu  * 0x83101000 +-----------------+
152*91f16700Schasinglulu  *            |       DDR       | DTB Overlay
153*91f16700Schasinglulu  * 0x83100000 +-----------------+
154*91f16700Schasinglulu  *            |       DDR       | DTB
155*91f16700Schasinglulu  * 0x83000000 +-----------------+
156*91f16700Schasinglulu  *            |       DDR       | Unallocated
157*91f16700Schasinglulu  * 0x80100000 +-----------------+
158*91f16700Schasinglulu  *            |       DDR       | FIP
159*91f16700Schasinglulu  * 0x80000000 +-----------------+
160*91f16700Schasinglulu  *            |     SOC I/0     |
161*91f16700Schasinglulu  * 0x00a00000 +-----------------+
162*91f16700Schasinglulu  *            |      OCRAM      | Not used
163*91f16700Schasinglulu  * 0x00900000 +-----------------+
164*91f16700Schasinglulu  *            |     SOC I/0     |
165*91f16700Schasinglulu  * 0x00188000 +-----------------+
166*91f16700Schasinglulu  *            |     OCRAM_S     | Not used
167*91f16700Schasinglulu  * 0x00180000 +-----------------+
168*91f16700Schasinglulu  *            |     SOC I/0     |
169*91f16700Schasinglulu  * 0x00020000 +-----------------+
170*91f16700Schasinglulu  *            |     BootROM     | BL1
171*91f16700Schasinglulu  * 0x00000000 +-----------------+
172*91f16700Schasinglulu  */
173*91f16700Schasinglulu 
174*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
175*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
176*91f16700Schasinglulu #define MAX_MMAP_REGIONS		10
177*91f16700Schasinglulu #define MAX_XLAT_TABLES			6
178*91f16700Schasinglulu #define MAX_IO_DEVICES			2
179*91f16700Schasinglulu #define MAX_IO_HANDLES			3
180*91f16700Schasinglulu #define MAX_IO_BLOCK_DEVICES		1U
181*91f16700Schasinglulu 
182*91f16700Schasinglulu /* UART defines */
183*91f16700Schasinglulu #if PLAT_WARP7_UART == 1
184*91f16700Schasinglulu #define PLAT_WARP7_UART_BASE		MXC_UART1_BASE
185*91f16700Schasinglulu #elif PLAT_WARP7_UART == 6
186*91f16700Schasinglulu #define IMX_UART_DTE
187*91f16700Schasinglulu #define PLAT_WARP7_UART_BASE		MXC_UART6_BASE
188*91f16700Schasinglulu #else
189*91f16700Schasinglulu #error "define PLAT_WARP7_UART=1 or PLAT_WARP7_UART=6"
190*91f16700Schasinglulu #endif
191*91f16700Schasinglulu 
192*91f16700Schasinglulu #define PLAT_IMX7_BOOT_UART_BASE	PLAT_WARP7_UART_BASE
193*91f16700Schasinglulu #define PLAT_IMX7_BOOT_UART_CLK_IN_HZ	24000000
194*91f16700Schasinglulu #define PLAT_IMX7_CONSOLE_BAUDRATE	115200
195*91f16700Schasinglulu 
196*91f16700Schasinglulu /* MMC defines */
197*91f16700Schasinglulu #ifndef PLAT_WARP7_SD
198*91f16700Schasinglulu #define PLAT_WARP7_SD 3
199*91f16700Schasinglulu #endif
200*91f16700Schasinglulu 
201*91f16700Schasinglulu #if PLAT_WARP7_SD == 1
202*91f16700Schasinglulu #define PLAT_WARP7_BOOT_MMC_BASE	USDHC1_BASE
203*91f16700Schasinglulu #endif /* PLAT_WARP7_SD == 1 */
204*91f16700Schasinglulu 
205*91f16700Schasinglulu #if PLAT_WARP7_SD == 2
206*91f16700Schasinglulu #define PLAT_WARP7_BOOT_MMC_BASE	USDHC2_BASE
207*91f16700Schasinglulu #endif /* PLAT_WARP7_SD == 2 */
208*91f16700Schasinglulu 
209*91f16700Schasinglulu #if PLAT_WARP7_SD == 3
210*91f16700Schasinglulu #define PLAT_WARP7_BOOT_MMC_BASE	USDHC3_BASE
211*91f16700Schasinglulu #endif /* PLAT_WARP7_SD == 3 */
212*91f16700Schasinglulu 
213*91f16700Schasinglulu /*
214*91f16700Schasinglulu  * System counter
215*91f16700Schasinglulu  */
216*91f16700Schasinglulu #define SYS_COUNTER_FREQ_IN_TICKS	8000000		/* 8 MHz */
217*91f16700Schasinglulu 
218*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */
219