xref: /rk3399_ARM-atf/plat/imx/imx7/picopi/include/platform_def.h (revision caf8fdb712e3491737be2e75e3fb2c3390cf03e0)
1936072edSJun Nie /*
2936072edSJun Nie  * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
3936072edSJun Nie  *
4936072edSJun Nie  * SPDX-License-Identifier: BSD-3-Clause
5936072edSJun Nie  */
6936072edSJun Nie 
7936072edSJun Nie #ifndef PLATFORM_DEF_H
8936072edSJun Nie #define PLATFORM_DEF_H
9936072edSJun Nie 
10936072edSJun Nie #include <arch.h>
11936072edSJun Nie #include <common/tbbr/tbbr_img_def.h>
12936072edSJun Nie #include <plat/common/common_def.h>
13936072edSJun Nie 
14936072edSJun Nie #define PLATFORM_STACK_SIZE		0x1000
15936072edSJun Nie 
167a57188bSDeepika Bhavnani #define PLATFORM_MAX_CPUS_PER_CLUSTER	U(2)
177a57188bSDeepika Bhavnani #define PLATFORM_CLUSTER_COUNT		U(1)
18936072edSJun Nie #define PLATFORM_CLUSTER0_CORE_COUNT	PLATFORM_MAX_CPUS_PER_CLUSTER
19936072edSJun Nie 
20936072edSJun Nie #define PLATFORM_CORE_COUNT		PLATFORM_CLUSTER0_CORE_COUNT
21936072edSJun Nie 
227a57188bSDeepika Bhavnani #define PICOPI_PRIMARY_CPU		U(0)
23936072edSJun Nie 
24936072edSJun Nie #define PLAT_NUM_PWR_DOMAINS	(PLATFORM_CLUSTER_COUNT + \
25936072edSJun Nie 					PLATFORM_CORE_COUNT)
26936072edSJun Nie #define PLAT_MAX_PWR_LVL		MPIDR_AFFLVL1
27936072edSJun Nie 
28936072edSJun Nie #define PLAT_MAX_RET_STATE		1
29936072edSJun Nie #define PLAT_MAX_OFF_STATE		2
30936072edSJun Nie 
31936072edSJun Nie /* Local power state for power domains in Run state. */
32936072edSJun Nie #define PLAT_LOCAL_STATE_RUN		0
33936072edSJun Nie 
34936072edSJun Nie /* Local power state for retention. Valid only for CPU power domains */
35936072edSJun Nie #define PLAT_LOCAL_STATE_RET		1
36936072edSJun Nie 
37936072edSJun Nie /*
38936072edSJun Nie  * Local power state for OFF/power-down. Valid for CPU and cluster power
39936072edSJun Nie  * domains.
40936072edSJun Nie  */
41936072edSJun Nie #define PLAT_LOCAL_STATE_OFF		2
42936072edSJun Nie 
43936072edSJun Nie /*
44936072edSJun Nie  * Macros used to parse state information from State-ID if it is using the
45936072edSJun Nie  * recommended encoding for State-ID.
46936072edSJun Nie  */
47936072edSJun Nie #define PLAT_LOCAL_PSTATE_WIDTH		4
48936072edSJun Nie #define PLAT_LOCAL_PSTATE_MASK		((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1)
49936072edSJun Nie 
50936072edSJun Nie /*
51936072edSJun Nie  * Some data must be aligned on the biggest cache line size in the platform.
52936072edSJun Nie  * This is known only to the platform as it might have a combination of
53936072edSJun Nie  * integrated and external caches.
54936072edSJun Nie  * i.MX7 has a 32 byte cacheline size
55936072edSJun Nie  * i.MX 7Dual Applications Processor Reference Manual, Rev. 1, 01/2018 pg 298
56936072edSJun Nie  */
57936072edSJun Nie #define CACHE_WRITEBACK_SHIFT		4
58936072edSJun Nie #define CACHE_WRITEBACK_GRANULE		(1 << CACHE_WRITEBACK_SHIFT)
59936072edSJun Nie 
60936072edSJun Nie /*
61936072edSJun Nie  * Partition memory into secure BootROM, OCRAM_S, non-secure DRAM, secure DRAM
62936072edSJun Nie  */
63936072edSJun Nie #define BOOT_ROM_BASE			0x00000000
64936072edSJun Nie #define BOOT_ROM_SIZE			0x00020000
65936072edSJun Nie 
66936072edSJun Nie #define OCRAM_S_BASE			0x00180000
67936072edSJun Nie #define OCRAM_S_SIZE			0x00008000
68936072edSJun Nie 
69936072edSJun Nie /* Controller maps 2GB, board contains 512 MB. 0x80000000 - 0xa0000000 */
70936072edSJun Nie #define DRAM_BASE			0x80000000
71936072edSJun Nie #define DRAM_SIZE			0x20000000
72936072edSJun Nie #define DRAM_LIMIT			(DRAM_BASE + DRAM_SIZE)
73936072edSJun Nie 
74936072edSJun Nie /* Place OPTEE at minus 32 MB from the end of memory. 0x9e000000 - 0xa0000000 */
75936072edSJun Nie #define IMX7_OPTEE_SIZE			0x02000000
76936072edSJun Nie #define IMX7_OPTEE_BASE			(DRAM_LIMIT - IMX7_OPTEE_SIZE)
77936072edSJun Nie #define IMX7_OPTEE_LIMIT		(IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE)
78936072edSJun Nie 
79936072edSJun Nie /* Place ATF directly beneath OPTEE. 0x9df00000 - 0x9e000000 */
80936072edSJun Nie #define BL2_RAM_SIZE			0x00100000
81936072edSJun Nie #define BL2_RAM_BASE			(IMX7_OPTEE_BASE - BL2_RAM_SIZE)
82936072edSJun Nie #define BL2_RAM_LIMIT			(BL2_RAM_BASE + BL2_RAM_SIZE)
83936072edSJun Nie 
84936072edSJun Nie /* Optional Mailbox. Only relevant on i.MX7D. 0x9deff000 - 0x9df00000*/
85936072edSJun Nie #define SHARED_RAM_SIZE			0x00001000
86936072edSJun Nie #define SHARED_RAM_BASE			(BL2_RAM_BASE - SHARED_RAM_SIZE)
87936072edSJun Nie #define SHARED_RAM_LIMIT		(SHARED_RAM_BASE + SHARED_RAM_SIZE)
88936072edSJun Nie 
89936072edSJun Nie /* Define the absolute location of u-boot 0x87800000 - 0x87900000 */
90936072edSJun Nie #define IMX7_UBOOT_SIZE			0x00100000
91936072edSJun Nie #define IMX7_UBOOT_BASE			(DRAM_BASE + 0x7800000)
92936072edSJun Nie #define IMX7_UBOOT_LIMIT		(IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE)
93936072edSJun Nie 
94936072edSJun Nie /* Define FIP image absolute location 0x80000000 - 0x80100000 */
95*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_SIZE			0x00100000
96*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_BASE			(DRAM_BASE)
97*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_LIMIT			(IMX_FIP_BASE + IMX_FIP_SIZE)
98936072edSJun Nie 
99936072edSJun Nie /* Define FIP image location at 1MB offset */
100*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_MMC_BASE		(1024 * 1024)
101936072edSJun Nie 
102936072edSJun Nie /* Define the absolute location of DTB 0x83000000 - 0x83100000 */
103936072edSJun Nie #define IMX7_DTB_SIZE			0x00100000
104936072edSJun Nie #define IMX7_DTB_BASE			(DRAM_BASE + 0x03000000)
105936072edSJun Nie #define IMX7_DTB_LIMIT			(IMX7_DTB_BASE + IMX7_DTB_SIZE)
106936072edSJun Nie 
107936072edSJun Nie /* Define the absolute location of DTB Overlay 0x83100000 - 0x83101000 */
108936072edSJun Nie #define IMX7_DTB_OVERLAY_SIZE		0x00001000
109936072edSJun Nie #define IMX7_DTB_OVERLAY_BASE		IMX7_DTB_LIMIT
110936072edSJun Nie #define IMX7_DTB_OVERLAY_LIMIT		(IMX7_DTB_OVERLAY_BASE + \
111936072edSJun Nie 					 IMX7_DTB_OVERLAY_SIZE)
112936072edSJun Nie /*
113936072edSJun Nie  * BL2 specific defines.
114936072edSJun Nie  *
115936072edSJun Nie  * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug
116936072edSJun Nie  * size plus a little space for growth.
117936072edSJun Nie  */
118936072edSJun Nie #define BL2_BASE		BL2_RAM_BASE
119936072edSJun Nie #define BL2_LIMIT		(BL2_RAM_BASE + BL2_RAM_SIZE)
120936072edSJun Nie 
121936072edSJun Nie /*
122936072edSJun Nie  * BL3-2/OPTEE
123936072edSJun Nie  */
124936072edSJun Nie # define BL32_BASE		IMX7_OPTEE_BASE
125936072edSJun Nie # define BL32_LIMIT		(IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE)
126936072edSJun Nie 
127936072edSJun Nie /*
128936072edSJun Nie  * BL3-3/U-BOOT
129936072edSJun Nie  */
130936072edSJun Nie #define BL33_BASE		IMX7_UBOOT_BASE
131936072edSJun Nie #define BL33_LIMIT		(IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE)
132936072edSJun Nie 
133936072edSJun Nie /*
134936072edSJun Nie  * ATF's view of memory
135936072edSJun Nie  *
136936072edSJun Nie  * 0xa0000000 +-----------------+
137936072edSJun Nie  *            |       DDR       | BL32/OPTEE
138936072edSJun Nie  * 0x9e000000 +-----------------+
139936072edSJun Nie  *            |       DDR       | BL23 ATF
140936072edSJun Nie  * 0x9df00000 +-----------------+
141936072edSJun Nie  *            |       DDR       | Shared MBOX RAM
142936072edSJun Nie  * 0x9de00000 +-----------------+
143936072edSJun Nie  *            |       DDR       | Unallocated
144936072edSJun Nie  * 0x87900000 +-----------------+
145936072edSJun Nie  *            |       DDR       | BL33/U-BOOT
146936072edSJun Nie  * 0x87800000 +-----------------+
147936072edSJun Nie  *            |       DDR       | Unallocated
148936072edSJun Nie  * 0x83100000 +-----------------+
149936072edSJun Nie  *            |       DDR       | DTB
150936072edSJun Nie  * 0x83000000 +-----------------+
151936072edSJun Nie  *            |       DDR       | Unallocated
152936072edSJun Nie  * 0x80100000 +-----------------+
153936072edSJun Nie  *            |       DDR       | FIP
154936072edSJun Nie  * 0x80000000 +-----------------+
155936072edSJun Nie  *            |     SOC I/0     |
156936072edSJun Nie  * 0x00a00000 +-----------------+
157936072edSJun Nie  *            |      OCRAM      | Not used
158936072edSJun Nie  * 0x00900000 +-----------------+
159936072edSJun Nie  *            |     SOC I/0     |
160936072edSJun Nie  * 0x00188000 +-----------------+
161936072edSJun Nie  *            |     OCRAM_S     | Not used
162936072edSJun Nie  * 0x00180000 +-----------------+
163936072edSJun Nie  *            |     SOC I/0     |
164936072edSJun Nie  * 0x00020000 +-----------------+
165936072edSJun Nie  *            |     BootROM     | BL1
166936072edSJun Nie  * 0x00000000 +-----------------+
167936072edSJun Nie  */
168936072edSJun Nie 
169936072edSJun Nie #define PLAT_PHY_ADDR_SPACE_SIZE	(1ULL << 32)
170936072edSJun Nie #define PLAT_VIRT_ADDR_SPACE_SIZE	(1ULL << 32)
171936072edSJun Nie #define MAX_MMAP_REGIONS		10
172936072edSJun Nie #define MAX_XLAT_TABLES			6
173936072edSJun Nie #define MAX_IO_DEVICES			2
174936072edSJun Nie #define MAX_IO_HANDLES			3
175936072edSJun Nie #define MAX_IO_BLOCK_DEVICES		1
176936072edSJun Nie 
177936072edSJun Nie /* UART defines */
178936072edSJun Nie #define PLAT_IMX7_BOOT_UART_BASE	MXC_UART5_BASE
179936072edSJun Nie #define PLAT_IMX7_BOOT_UART_CLK_IN_HZ	24000000
180936072edSJun Nie #define PLAT_IMX7_CONSOLE_BAUDRATE	115200
181936072edSJun Nie 
182936072edSJun Nie /* MMC defines */
183936072edSJun Nie #ifndef PLAT_PICOPI_SD
184936072edSJun Nie #define PLAT_PICOPI_SD 3
185936072edSJun Nie #endif
186936072edSJun Nie 
187936072edSJun Nie #if PLAT_PICOPI_SD == 1
188936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE	USDHC1_BASE
189936072edSJun Nie #endif /* PLAT_PICOPI_SD == 1 */
190936072edSJun Nie 
191936072edSJun Nie #if PLAT_PICOPI_SD == 2
192936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE	USDHC2_BASE
193936072edSJun Nie #endif /* PLAT_PICOPI_SD == 2 */
194936072edSJun Nie 
195936072edSJun Nie #if PLAT_PICOPI_SD == 3
196936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE	USDHC3_BASE
197936072edSJun Nie #endif /* PLAT_PICOPI_SD == 3 */
198936072edSJun Nie 
199936072edSJun Nie /*
200936072edSJun Nie  * System counter
201936072edSJun Nie  */
202936072edSJun Nie #define SYS_COUNTER_FREQ_IN_TICKS	8000000		/* 8 MHz */
203936072edSJun Nie 
204936072edSJun Nie #endif /* PLATFORM_DEF_H */
205