xref: /rk3399_rockchip-uboot/include/configs/vexpress_aemv8a.h (revision e090579d0a2d1aa38eab94b98877de9bcdd4f31d)
112916829SDavid Feng /*
212916829SDavid Feng  * Configuration for Versatile Express. Parts were derived from other ARM
312916829SDavid Feng  *   configurations.
412916829SDavid Feng  *
512916829SDavid Feng  * SPDX-License-Identifier:	GPL-2.0+
612916829SDavid Feng  */
712916829SDavid Feng 
812916829SDavid Feng #ifndef __VEXPRESS_AEMV8A_H
912916829SDavid Feng #define __VEXPRESS_AEMV8A_H
1012916829SDavid Feng 
11f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
12261d2760SDarwin Rambo #ifndef CONFIG_SEMIHOSTING
13f91afc4dSLinus Walleij #error CONFIG_TARGET_VEXPRESS64_BASE_FVP requires CONFIG_SEMIHOSTING
14261d2760SDarwin Rambo #endif
15261d2760SDarwin Rambo #define CONFIG_ARMV8_SWITCH_TO_EL1
16261d2760SDarwin Rambo #endif
17261d2760SDarwin Rambo 
1812916829SDavid Feng #define CONFIG_REMAKE_ELF
1912916829SDavid Feng 
2012916829SDavid Feng #define CONFIG_SUPPORT_RAW_INITRD
2112916829SDavid Feng 
2212916829SDavid Feng /* Link Definitions */
23fc04b923SRyan Harkin #if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
24fc04b923SRyan Harkin 	defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
25261d2760SDarwin Rambo /* ATF loads u-boot here for BASE_FVP model */
26261d2760SDarwin Rambo #define CONFIG_SYS_TEXT_BASE		0x88000000
27261d2760SDarwin Rambo #define CONFIG_SYS_INIT_SP_ADDR         (CONFIG_SYS_SDRAM_BASE + 0x03f00000)
28ffc10373SLinus Walleij #elif CONFIG_TARGET_VEXPRESS64_JUNO
29ffc10373SLinus Walleij #define CONFIG_SYS_TEXT_BASE		0xe0000000
30ffc10373SLinus Walleij #define CONFIG_SYS_INIT_SP_ADDR         (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
31261d2760SDarwin Rambo #endif
3212916829SDavid Feng 
330d3012afSRyan Harkin #define CONFIG_SYS_BOOTM_LEN (64 << 20)      /* Increase max gunzip size */
340d3012afSRyan Harkin 
3512916829SDavid Feng /* CS register bases for the original memory map. */
3612916829SDavid Feng #define V2M_PA_CS0			0x00000000
3712916829SDavid Feng #define V2M_PA_CS1			0x14000000
3812916829SDavid Feng #define V2M_PA_CS2			0x18000000
3912916829SDavid Feng #define V2M_PA_CS3			0x1c000000
4012916829SDavid Feng #define V2M_PA_CS4			0x0c000000
4112916829SDavid Feng #define V2M_PA_CS5			0x10000000
4212916829SDavid Feng 
4312916829SDavid Feng #define V2M_PERIPH_OFFSET(x)		(x << 16)
4412916829SDavid Feng #define V2M_SYSREGS			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(1))
4512916829SDavid Feng #define V2M_SYSCTL			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(2))
4612916829SDavid Feng #define V2M_SERIAL_BUS_PCI		(V2M_PA_CS3 + V2M_PERIPH_OFFSET(3))
4712916829SDavid Feng 
4812916829SDavid Feng #define V2M_BASE			0x80000000
4912916829SDavid Feng 
5012916829SDavid Feng /* Common peripherals relative to CS7. */
5112916829SDavid Feng #define V2M_AACI			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(4))
5212916829SDavid Feng #define V2M_MMCI			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(5))
5312916829SDavid Feng #define V2M_KMI0			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(6))
5412916829SDavid Feng #define V2M_KMI1			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(7))
5512916829SDavid Feng 
56ffc10373SLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
57ffc10373SLinus Walleij #define V2M_UART0			0x7ff80000
58ffc10373SLinus Walleij #define V2M_UART1			0x7ff70000
59ffc10373SLinus Walleij #else /* Not Juno */
6012916829SDavid Feng #define V2M_UART0			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(9))
6112916829SDavid Feng #define V2M_UART1			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(10))
6212916829SDavid Feng #define V2M_UART2			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(11))
6312916829SDavid Feng #define V2M_UART3			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(12))
64ffc10373SLinus Walleij #endif
6512916829SDavid Feng 
6612916829SDavid Feng #define V2M_WDT				(V2M_PA_CS3 + V2M_PERIPH_OFFSET(15))
6712916829SDavid Feng 
6812916829SDavid Feng #define V2M_TIMER01			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(17))
6912916829SDavid Feng #define V2M_TIMER23			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(18))
7012916829SDavid Feng 
7112916829SDavid Feng #define V2M_SERIAL_BUS_DVI		(V2M_PA_CS3 + V2M_PERIPH_OFFSET(22))
7212916829SDavid Feng #define V2M_RTC				(V2M_PA_CS3 + V2M_PERIPH_OFFSET(23))
7312916829SDavid Feng 
7412916829SDavid Feng #define V2M_CF				(V2M_PA_CS3 + V2M_PERIPH_OFFSET(26))
7512916829SDavid Feng 
7612916829SDavid Feng #define V2M_CLCD			(V2M_PA_CS3 + V2M_PERIPH_OFFSET(31))
7712916829SDavid Feng 
7812916829SDavid Feng /* System register offsets. */
7912916829SDavid Feng #define V2M_SYS_CFGDATA			(V2M_SYSREGS + 0x0a0)
8012916829SDavid Feng #define V2M_SYS_CFGCTRL			(V2M_SYSREGS + 0x0a4)
8112916829SDavid Feng #define V2M_SYS_CFGSTAT			(V2M_SYSREGS + 0x0a8)
8212916829SDavid Feng 
8312916829SDavid Feng /* Generic Timer Definitions */
8412916829SDavid Feng #define COUNTER_FREQUENCY		(0x1800000)	/* 24MHz */
8512916829SDavid Feng 
8612916829SDavid Feng /* Generic Interrupt Controller Definitions */
87c71645adSDavid Feng #ifdef CONFIG_GICV3
88c71645adSDavid Feng #define GICD_BASE			(0x2f000000)
89c71645adSDavid Feng #define GICR_BASE			(0x2f100000)
90c71645adSDavid Feng #else
91261d2760SDarwin Rambo 
92fc04b923SRyan Harkin #if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) || \
93fc04b923SRyan Harkin 	defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM)
94261d2760SDarwin Rambo #define GICD_BASE			(0x2f000000)
95261d2760SDarwin Rambo #define GICC_BASE			(0x2c000000)
96ffc10373SLinus Walleij #elif CONFIG_TARGET_VEXPRESS64_JUNO
97ffc10373SLinus Walleij #define GICD_BASE			(0x2C010000)
98ffc10373SLinus Walleij #define GICC_BASE			(0x2C02f000)
99c71645adSDavid Feng #endif
10003314f0eSLinus Walleij #endif /* !CONFIG_GICV3 */
10112916829SDavid Feng 
10212916829SDavid Feng /* Size of malloc() pool */
1035bcae13eSTom Rini #define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + (8 << 20))
10412916829SDavid Feng 
105b31f9d7aSLinus Walleij /* Ethernet Configuration */
106b31f9d7aSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
107b31f9d7aSLinus Walleij /* The real hardware Versatile express uses SMSC9118 */
108b31f9d7aSLinus Walleij #define CONFIG_SMC911X			1
109b31f9d7aSLinus Walleij #define CONFIG_SMC911X_32_BIT		1
110b31f9d7aSLinus Walleij #define CONFIG_SMC911X_BASE		(0x018000000)
111b31f9d7aSLinus Walleij #else
112b31f9d7aSLinus Walleij /* The Vexpress64 simulators use SMSC91C111 */
1133865ceb7SBhupesh Sharma #define CONFIG_SMC91111			1
1143865ceb7SBhupesh Sharma #define CONFIG_SMC91111_BASE		(0x01A000000)
115b31f9d7aSLinus Walleij #endif
11612916829SDavid Feng 
11712916829SDavid Feng /* PL011 Serial Configuration */
118d8bafe13SDavid Feng #define CONFIG_CONS_INDEX		0
119d280ea00SLinus Walleij #define CONFIG_PL01X_SERIAL
12012916829SDavid Feng #define CONFIG_PL011_SERIAL
121ffc10373SLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
122ffc10373SLinus Walleij #define CONFIG_PL011_CLOCK		7273800
123ffc10373SLinus Walleij #else
12412916829SDavid Feng #define CONFIG_PL011_CLOCK		24000000
125ffc10373SLinus Walleij #endif
12612916829SDavid Feng 
12712916829SDavid Feng /*#define CONFIG_MENU_SHOW*/
12812916829SDavid Feng 
12912916829SDavid Feng /* BOOTP options */
13012916829SDavid Feng #define CONFIG_BOOTP_BOOTFILESIZE
13112916829SDavid Feng #define CONFIG_BOOTP_BOOTPATH
13212916829SDavid Feng #define CONFIG_BOOTP_GATEWAY
13312916829SDavid Feng #define CONFIG_BOOTP_HOSTNAME
13412916829SDavid Feng #define CONFIG_BOOTP_PXE
13512916829SDavid Feng 
13612916829SDavid Feng /* Miscellaneous configurable options */
13712916829SDavid Feng #define CONFIG_SYS_LOAD_ADDR		(V2M_BASE + 0x10000000)
13812916829SDavid Feng 
13912916829SDavid Feng /* Physical Memory Map */
14012916829SDavid Feng #define PHYS_SDRAM_1			(V2M_BASE)	/* SDRAM Bank #1 */
14130355708SLinus Walleij /* Top 16MB reserved for secure world use */
14230355708SLinus Walleij #define DRAM_SEC_SIZE		0x01000000
14330355708SLinus Walleij #define PHYS_SDRAM_1_SIZE	0x80000000 - DRAM_SEC_SIZE
14412916829SDavid Feng #define CONFIG_SYS_SDRAM_BASE	PHYS_SDRAM_1
14512916829SDavid Feng 
1462c2b2183SRyan Harkin #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
1472c2b2183SRyan Harkin #define CONFIG_NR_DRAM_BANKS		2
1482c2b2183SRyan Harkin #define PHYS_SDRAM_2			(0x880000000)
1492c2b2183SRyan Harkin #define PHYS_SDRAM_2_SIZE		0x180000000
1502c2b2183SRyan Harkin #else
1512c2b2183SRyan Harkin #define CONFIG_NR_DRAM_BANKS		1
1522c2b2183SRyan Harkin #endif
1532c2b2183SRyan Harkin 
15430355708SLinus Walleij /* Enable memtest */
15530355708SLinus Walleij #define CONFIG_SYS_MEMTEST_START	PHYS_SDRAM_1
15630355708SLinus Walleij #define CONFIG_SYS_MEMTEST_END		(PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE)
15730355708SLinus Walleij 
15812916829SDavid Feng /* Initial environment variables */
15910d1491bSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
16010d1491bSLinus Walleij /*
16110d1491bSLinus Walleij  * Defines where the kernel and FDT exist in NOR flash and where it will
16210d1491bSLinus Walleij  * be copied into DRAM
16310d1491bSLinus Walleij  */
16410d1491bSLinus Walleij #define CONFIG_EXTRA_ENV_SETTINGS	\
165ecbed5d6SRyan Harkin 				"kernel_name=norkern\0"	\
166ecbed5d6SRyan Harkin 				"kernel_alt_name=Image\0"	\
1677babe482SAndre Przywara 				"kernel_addr=0x80080000\0" \
1684a6bdb59SRyan Harkin 				"initrd_name=ramdisk.img\0"	\
1694a6bdb59SRyan Harkin 				"initrd_addr=0x84000000\0"	\
170*da3e620dSAlexander Graf 				"fdtfile=board.dtb\0" \
171ecbed5d6SRyan Harkin 				"fdt_alt_name=juno\0" \
17210d1491bSLinus Walleij 				"fdt_addr=0x83000000\0" \
17310d1491bSLinus Walleij 				"fdt_high=0xffffffffffffffff\0" \
17410d1491bSLinus Walleij 				"initrd_high=0xffffffffffffffff\0" \
17510d1491bSLinus Walleij 
17610d1491bSLinus Walleij /* Copy the kernel and FDT to DRAM memory and boot */
17710d1491bSLinus Walleij #define CONFIG_BOOTCOMMAND	"afs load ${kernel_name} ${kernel_addr} ; " \
178ecbed5d6SRyan Harkin 				"if test $? -eq 1; then "\
179ecbed5d6SRyan Harkin 				"  echo Loading ${kernel_alt_name} instead of "\
180ecbed5d6SRyan Harkin 				"${kernel_name}; "\
181ecbed5d6SRyan Harkin 				"  afs load ${kernel_alt_name} ${kernel_addr};"\
182ecbed5d6SRyan Harkin 				"fi ; "\
183*da3e620dSAlexander Graf 				"afs load  ${fdtfile} ${fdt_addr} ; " \
184ecbed5d6SRyan Harkin 				"if test $? -eq 1; then "\
185ecbed5d6SRyan Harkin 				"  echo Loading ${fdt_alt_name} instead of "\
186*da3e620dSAlexander Graf 				"${fdtfile}; "\
187ecbed5d6SRyan Harkin 				"  afs load ${fdt_alt_name} ${fdt_addr}; "\
188ecbed5d6SRyan Harkin 				"fi ; "\
18910d1491bSLinus Walleij 				"fdt addr ${fdt_addr}; fdt resize; " \
1904a6bdb59SRyan Harkin 				"if afs load  ${initrd_name} ${initrd_addr} ; "\
1914a6bdb59SRyan Harkin 				"then "\
1924a6bdb59SRyan Harkin 				"  setenv initrd_param ${initrd_addr}; "\
1934a6bdb59SRyan Harkin 				"  else setenv initrd_param -; "\
1944a6bdb59SRyan Harkin 				"fi ; " \
1954a6bdb59SRyan Harkin 				"booti ${kernel_addr} ${initrd_param} ${fdt_addr}"
19610d1491bSLinus Walleij 
19710d1491bSLinus Walleij 
19810d1491bSLinus Walleij #elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
19912916829SDavid Feng #define CONFIG_EXTRA_ENV_SETTINGS	\
2001fd0f92eSLinus Walleij 				"kernel_name=Image\0"		\
2017babe482SAndre Przywara 				"kernel_addr=0x80080000\0"	\
202261d2760SDarwin Rambo 				"initrd_name=ramdisk.img\0"	\
20349995ffeSLinus Walleij 				"initrd_addr=0x88000000\0"	\
204*da3e620dSAlexander Graf 				"fdtfile=devtree.dtb\0"		\
20549995ffeSLinus Walleij 				"fdt_addr=0x83000000\0"		\
206261d2760SDarwin Rambo 				"fdt_high=0xffffffffffffffff\0"	\
207261d2760SDarwin Rambo 				"initrd_high=0xffffffffffffffff\0"
208261d2760SDarwin Rambo 
20949995ffeSLinus Walleij #define CONFIG_BOOTCOMMAND	"smhload ${kernel_name} ${kernel_addr}; " \
210*da3e620dSAlexander Graf 				"smhload ${fdtfile} ${fdt_addr}; " \
211c0ae9703SRyan Harkin 				"smhload ${initrd_name} ${initrd_addr} "\
212c0ae9703SRyan Harkin 				"initrd_end; " \
2131fd0f92eSLinus Walleij 				"fdt addr ${fdt_addr}; fdt resize; " \
2141fd0f92eSLinus Walleij 				"fdt chosen ${initrd_addr} ${initrd_end}; " \
2151fd0f92eSLinus Walleij 				"booti $kernel_addr - $fdt_addr"
216261d2760SDarwin Rambo 
217261d2760SDarwin Rambo 
218fc04b923SRyan Harkin #elif CONFIG_TARGET_VEXPRESS64_BASE_FVP_DRAM
219fc04b923SRyan Harkin #define CONFIG_EXTRA_ENV_SETTINGS	\
220fc04b923SRyan Harkin 				"kernel_addr=0x80080000\0"	\
221fc04b923SRyan Harkin 				"initrd_addr=0x84000000\0"	\
222fc04b923SRyan Harkin 				"fdt_addr=0x83000000\0"		\
223fc04b923SRyan Harkin 				"fdt_high=0xffffffffffffffff\0"	\
224fc04b923SRyan Harkin 				"initrd_high=0xffffffffffffffff\0"
225fc04b923SRyan Harkin 
226fc04b923SRyan Harkin #define CONFIG_BOOTCOMMAND	"booti $kernel_addr $initrd_addr $fdt_addr"
227fc04b923SRyan Harkin 
228fc04b923SRyan Harkin 
229261d2760SDarwin Rambo #endif
23012916829SDavid Feng 
23112916829SDavid Feng /* Monitor Command Prompt */
23212916829SDavid Feng #define CONFIG_SYS_CBSIZE		512	/* Console I/O Buffer Size */
23312916829SDavid Feng #define CONFIG_SYS_LONGHELP
2345bcae13eSTom Rini #define CONFIG_CMDLINE_EDITING
23512916829SDavid Feng #define CONFIG_SYS_MAXARGS		64	/* max command args */
23612916829SDavid Feng 
237f3c71c93SRyan Harkin #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
238f3c71c93SRyan Harkin #define CONFIG_SYS_FLASH_BASE		0x08000000
239f3c71c93SRyan Harkin /* 255 x 256KiB sectors + 4 x 64KiB sectors at the end = 259 */
240f3c71c93SRyan Harkin #define CONFIG_SYS_MAX_FLASH_SECT	259
241f3c71c93SRyan Harkin /* Store environment at top of flash in the same location as blank.img */
242f3c71c93SRyan Harkin /* in the Juno firmware. */
243f3c71c93SRyan Harkin #define CONFIG_ENV_ADDR			0x0BFC0000
244f3c71c93SRyan Harkin #define CONFIG_ENV_SECT_SIZE		0x00010000
24514f264e6SLinus Walleij #else
246f3c71c93SRyan Harkin #define CONFIG_SYS_FLASH_BASE		0x0C000000
247f3c71c93SRyan Harkin /* 256 x 256KiB sectors */
248f3c71c93SRyan Harkin #define CONFIG_SYS_MAX_FLASH_SECT	256
249f3c71c93SRyan Harkin /* Store environment at top of flash */
250f3c71c93SRyan Harkin #define CONFIG_ENV_ADDR			0x0FFC0000
251f3c71c93SRyan Harkin #define CONFIG_ENV_SECT_SIZE		0x00040000
252f3c71c93SRyan Harkin #endif
253f3c71c93SRyan Harkin 
25414f264e6SLinus Walleij #define CONFIG_SYS_FLASH_CFI		1
25514f264e6SLinus Walleij #define CONFIG_FLASH_CFI_DRIVER		1
256f19f389fSRyan Harkin #define CONFIG_SYS_FLASH_CFI_WIDTH	FLASH_CFI_32BIT
257f3c71c93SRyan Harkin #define CONFIG_SYS_MAX_FLASH_BANKS	1
25814f264e6SLinus Walleij 
25914f264e6SLinus Walleij #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE /* use buffered writes */
26014f264e6SLinus Walleij #define CONFIG_SYS_FLASH_PROTECTION	/* The devices have real protection */
26114f264e6SLinus Walleij #define CONFIG_SYS_FLASH_EMPTY_INFO	/* flinfo indicates empty blocks */
262f3c71c93SRyan Harkin #define FLASH_MAX_SECTOR_SIZE		0x00040000
263f3c71c93SRyan Harkin #define CONFIG_ENV_SIZE			CONFIG_ENV_SECT_SIZE
26414f264e6SLinus Walleij 
26512916829SDavid Feng #endif /* __VEXPRESS_AEMV8A_H */
266