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