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