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 1103ca6a39SLinus Walleij /* We use generic board for v8 Versatile Express */ 1203ca6a39SLinus Walleij #define CONFIG_SYS_GENERIC_BOARD 1303ca6a39SLinus Walleij 14f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP 15261d2760SDarwin Rambo #ifndef CONFIG_SEMIHOSTING 16f91afc4dSLinus Walleij #error CONFIG_TARGET_VEXPRESS64_BASE_FVP requires CONFIG_SEMIHOSTING 17261d2760SDarwin Rambo #endif 18261d2760SDarwin Rambo #define CONFIG_BOARD_LATE_INIT 19261d2760SDarwin Rambo #define CONFIG_ARMV8_SWITCH_TO_EL1 20261d2760SDarwin Rambo #endif 21261d2760SDarwin Rambo 2212916829SDavid Feng #define CONFIG_REMAKE_ELF 2312916829SDavid Feng 24ffc10373SLinus Walleij #if !defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) && \ 25ffc10373SLinus Walleij !defined(CONFIG_TARGET_VEXPRESS64_JUNO) 26f91afc4dSLinus Walleij /* Base FVP and Juno not using GICv3 yet */ 27c71645adSDavid Feng #define CONFIG_GICV3 28261d2760SDarwin Rambo #endif 29c71645adSDavid Feng 3012916829SDavid Feng /*#define CONFIG_ARMV8_SWITCH_TO_EL1*/ 3112916829SDavid Feng 3212916829SDavid Feng #define CONFIG_SYS_NO_FLASH 3312916829SDavid Feng 3412916829SDavid Feng #define CONFIG_SUPPORT_RAW_INITRD 3512916829SDavid Feng 3612916829SDavid Feng /* Cache Definitions */ 3712916829SDavid Feng #define CONFIG_SYS_DCACHE_OFF 3812916829SDavid Feng #define CONFIG_SYS_ICACHE_OFF 3912916829SDavid Feng 4012916829SDavid Feng #define CONFIG_IDENT_STRING " vexpress_aemv8a" 4112916829SDavid Feng #define CONFIG_BOOTP_VCI_STRING "U-boot.armv8.vexpress_aemv8a" 4212916829SDavid Feng 4312916829SDavid Feng /* Link Definitions */ 44f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP 45261d2760SDarwin Rambo /* ATF loads u-boot here for BASE_FVP model */ 46261d2760SDarwin Rambo #define CONFIG_SYS_TEXT_BASE 0x88000000 47261d2760SDarwin Rambo #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x03f00000) 48ffc10373SLinus Walleij #elif CONFIG_TARGET_VEXPRESS64_JUNO 49ffc10373SLinus Walleij #define CONFIG_SYS_TEXT_BASE 0xe0000000 50ffc10373SLinus Walleij #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0) 51261d2760SDarwin Rambo #else 5212916829SDavid Feng #define CONFIG_SYS_TEXT_BASE 0x80000000 5312916829SDavid Feng #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0) 54261d2760SDarwin Rambo #endif 5512916829SDavid Feng 5612916829SDavid Feng /* Flat Device Tree Definitions */ 5712916829SDavid Feng #define CONFIG_OF_LIBFDT 5812916829SDavid Feng 5912916829SDavid Feng 6012916829SDavid Feng /* SMP Spin Table Definitions */ 61f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP 62261d2760SDarwin Rambo #define CPU_RELEASE_ADDR (CONFIG_SYS_SDRAM_BASE + 0x03f00000) 63261d2760SDarwin Rambo #else 6412916829SDavid Feng #define CPU_RELEASE_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0) 65261d2760SDarwin Rambo #endif 6612916829SDavid Feng 6712916829SDavid Feng /* CS register bases for the original memory map. */ 6812916829SDavid Feng #define V2M_PA_CS0 0x00000000 6912916829SDavid Feng #define V2M_PA_CS1 0x14000000 7012916829SDavid Feng #define V2M_PA_CS2 0x18000000 7112916829SDavid Feng #define V2M_PA_CS3 0x1c000000 7212916829SDavid Feng #define V2M_PA_CS4 0x0c000000 7312916829SDavid Feng #define V2M_PA_CS5 0x10000000 7412916829SDavid Feng 7512916829SDavid Feng #define V2M_PERIPH_OFFSET(x) (x << 16) 7612916829SDavid Feng #define V2M_SYSREGS (V2M_PA_CS3 + V2M_PERIPH_OFFSET(1)) 7712916829SDavid Feng #define V2M_SYSCTL (V2M_PA_CS3 + V2M_PERIPH_OFFSET(2)) 7812916829SDavid Feng #define V2M_SERIAL_BUS_PCI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(3)) 7912916829SDavid Feng 8012916829SDavid Feng #define V2M_BASE 0x80000000 8112916829SDavid Feng 8212916829SDavid Feng /* 8312916829SDavid Feng * Physical addresses, offset from V2M_PA_CS0-3 8412916829SDavid Feng */ 8512916829SDavid Feng #define V2M_NOR0 (V2M_PA_CS0) 8612916829SDavid Feng #define V2M_NOR1 (V2M_PA_CS4) 8712916829SDavid Feng #define V2M_SRAM (V2M_PA_CS1) 8812916829SDavid Feng 8912916829SDavid Feng /* Common peripherals relative to CS7. */ 9012916829SDavid Feng #define V2M_AACI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(4)) 9112916829SDavid Feng #define V2M_MMCI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(5)) 9212916829SDavid Feng #define V2M_KMI0 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(6)) 9312916829SDavid Feng #define V2M_KMI1 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(7)) 9412916829SDavid Feng 95ffc10373SLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO 96ffc10373SLinus Walleij #define V2M_UART0 0x7ff80000 97ffc10373SLinus Walleij #define V2M_UART1 0x7ff70000 98ffc10373SLinus Walleij #else /* Not Juno */ 9912916829SDavid Feng #define V2M_UART0 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(9)) 10012916829SDavid Feng #define V2M_UART1 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(10)) 10112916829SDavid Feng #define V2M_UART2 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(11)) 10212916829SDavid Feng #define V2M_UART3 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(12)) 103ffc10373SLinus Walleij #endif 10412916829SDavid Feng 10512916829SDavid Feng #define V2M_WDT (V2M_PA_CS3 + V2M_PERIPH_OFFSET(15)) 10612916829SDavid Feng 10712916829SDavid Feng #define V2M_TIMER01 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(17)) 10812916829SDavid Feng #define V2M_TIMER23 (V2M_PA_CS3 + V2M_PERIPH_OFFSET(18)) 10912916829SDavid Feng 11012916829SDavid Feng #define V2M_SERIAL_BUS_DVI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(22)) 11112916829SDavid Feng #define V2M_RTC (V2M_PA_CS3 + V2M_PERIPH_OFFSET(23)) 11212916829SDavid Feng 11312916829SDavid Feng #define V2M_CF (V2M_PA_CS3 + V2M_PERIPH_OFFSET(26)) 11412916829SDavid Feng 11512916829SDavid Feng #define V2M_CLCD (V2M_PA_CS3 + V2M_PERIPH_OFFSET(31)) 11612916829SDavid Feng 11712916829SDavid Feng /* System register offsets. */ 11812916829SDavid Feng #define V2M_SYS_CFGDATA (V2M_SYSREGS + 0x0a0) 11912916829SDavid Feng #define V2M_SYS_CFGCTRL (V2M_SYSREGS + 0x0a4) 12012916829SDavid Feng #define V2M_SYS_CFGSTAT (V2M_SYSREGS + 0x0a8) 12112916829SDavid Feng 12212916829SDavid Feng /* Generic Timer Definitions */ 12312916829SDavid Feng #define COUNTER_FREQUENCY (0x1800000) /* 24MHz */ 12412916829SDavid Feng 12512916829SDavid Feng /* Generic Interrupt Controller Definitions */ 126c71645adSDavid Feng #ifdef CONFIG_GICV3 127c71645adSDavid Feng #define GICD_BASE (0x2f000000) 128c71645adSDavid Feng #define GICR_BASE (0x2f100000) 129c71645adSDavid Feng #else 130261d2760SDarwin Rambo 131f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP 132261d2760SDarwin Rambo #define GICD_BASE (0x2f000000) 133261d2760SDarwin Rambo #define GICC_BASE (0x2c000000) 134ffc10373SLinus Walleij #elif CONFIG_TARGET_VEXPRESS64_JUNO 135ffc10373SLinus Walleij #define GICD_BASE (0x2C010000) 136ffc10373SLinus Walleij #define GICC_BASE (0x2C02f000) 137261d2760SDarwin Rambo #else 13812916829SDavid Feng #define GICD_BASE (0x2C001000) 13912916829SDavid Feng #define GICC_BASE (0x2C002000) 140c71645adSDavid Feng #endif 141261d2760SDarwin Rambo #endif 14212916829SDavid Feng 14312916829SDavid Feng #define CONFIG_SYS_MEMTEST_START V2M_BASE 14412916829SDavid Feng #define CONFIG_SYS_MEMTEST_END (V2M_BASE + 0x80000000) 14512916829SDavid Feng 14612916829SDavid Feng /* Size of malloc() pool */ 1475bcae13eSTom Rini #define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (8 << 20)) 14812916829SDavid Feng 149*b31f9d7aSLinus Walleij /* Ethernet Configuration */ 150*b31f9d7aSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO 151*b31f9d7aSLinus Walleij /* The real hardware Versatile express uses SMSC9118 */ 152*b31f9d7aSLinus Walleij #define CONFIG_SMC911X 1 153*b31f9d7aSLinus Walleij #define CONFIG_SMC911X_32_BIT 1 154*b31f9d7aSLinus Walleij #define CONFIG_SMC911X_BASE (0x018000000) 155*b31f9d7aSLinus Walleij #else 156*b31f9d7aSLinus Walleij /* The Vexpress64 simulators use SMSC91C111 */ 1573865ceb7SBhupesh Sharma #define CONFIG_SMC91111 1 1583865ceb7SBhupesh Sharma #define CONFIG_SMC91111_BASE (0x01A000000) 159*b31f9d7aSLinus Walleij #endif 16012916829SDavid Feng 16112916829SDavid Feng /* PL011 Serial Configuration */ 16212916829SDavid Feng #define CONFIG_PL011_SERIAL 163ffc10373SLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_JUNO 164ffc10373SLinus Walleij #define CONFIG_PL011_CLOCK 7273800 165ffc10373SLinus Walleij #else 16612916829SDavid Feng #define CONFIG_PL011_CLOCK 24000000 167ffc10373SLinus Walleij #endif 16812916829SDavid Feng #define CONFIG_PL01x_PORTS {(void *)CONFIG_SYS_SERIAL0, \ 16912916829SDavid Feng (void *)CONFIG_SYS_SERIAL1} 17012916829SDavid Feng #define CONFIG_CONS_INDEX 0 17112916829SDavid Feng 17212916829SDavid Feng #define CONFIG_BAUDRATE 115200 17312916829SDavid Feng #define CONFIG_SYS_SERIAL0 V2M_UART0 17412916829SDavid Feng #define CONFIG_SYS_SERIAL1 V2M_UART1 17512916829SDavid Feng 17612916829SDavid Feng /* Command line configuration */ 17712916829SDavid Feng #define CONFIG_MENU 17812916829SDavid Feng /*#define CONFIG_MENU_SHOW*/ 17912916829SDavid Feng #define CONFIG_CMD_CACHE 18012916829SDavid Feng #define CONFIG_CMD_BDI 18167172528STom Rini #define CONFIG_CMD_BOOTI 18267172528STom Rini #define CONFIG_CMD_UNZIP 18312916829SDavid Feng #define CONFIG_CMD_DHCP 18412916829SDavid Feng #define CONFIG_CMD_PXE 18512916829SDavid Feng #define CONFIG_CMD_ENV 18612916829SDavid Feng #define CONFIG_CMD_FLASH 18712916829SDavid Feng #define CONFIG_CMD_IMI 188ffc10373SLinus Walleij #define CONFIG_CMD_LOADB 18912916829SDavid Feng #define CONFIG_CMD_MEMORY 19012916829SDavid Feng #define CONFIG_CMD_MII 19112916829SDavid Feng #define CONFIG_CMD_NET 19212916829SDavid Feng #define CONFIG_CMD_PING 19312916829SDavid Feng #define CONFIG_CMD_SAVEENV 19412916829SDavid Feng #define CONFIG_CMD_RUN 19512916829SDavid Feng #define CONFIG_CMD_BOOTD 19612916829SDavid Feng #define CONFIG_CMD_ECHO 19712916829SDavid Feng #define CONFIG_CMD_SOURCE 19812916829SDavid Feng #define CONFIG_CMD_FAT 19912916829SDavid Feng #define CONFIG_DOS_PARTITION 20012916829SDavid Feng 20112916829SDavid Feng /* BOOTP options */ 20212916829SDavid Feng #define CONFIG_BOOTP_BOOTFILESIZE 20312916829SDavid Feng #define CONFIG_BOOTP_BOOTPATH 20412916829SDavid Feng #define CONFIG_BOOTP_GATEWAY 20512916829SDavid Feng #define CONFIG_BOOTP_HOSTNAME 20612916829SDavid Feng #define CONFIG_BOOTP_PXE 20712916829SDavid Feng #define CONFIG_BOOTP_PXE_CLIENTARCH 0x100 20812916829SDavid Feng 20912916829SDavid Feng /* Miscellaneous configurable options */ 21012916829SDavid Feng #define CONFIG_SYS_LOAD_ADDR (V2M_BASE + 0x10000000) 21112916829SDavid Feng 21212916829SDavid Feng /* Physical Memory Map */ 21312916829SDavid Feng #define CONFIG_NR_DRAM_BANKS 1 21412916829SDavid Feng #define PHYS_SDRAM_1 (V2M_BASE) /* SDRAM Bank #1 */ 21512916829SDavid Feng #define PHYS_SDRAM_1_SIZE 0x80000000 /* 2048 MB */ 21612916829SDavid Feng #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 21712916829SDavid Feng 21812916829SDavid Feng /* Initial environment variables */ 219f91afc4dSLinus Walleij #ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP 22012916829SDavid Feng #define CONFIG_EXTRA_ENV_SETTINGS \ 221261d2760SDarwin Rambo "kernel_name=uImage\0" \ 222261d2760SDarwin Rambo "kernel_addr_r=0x80000000\0" \ 223261d2760SDarwin Rambo "initrd_name=ramdisk.img\0" \ 224261d2760SDarwin Rambo "initrd_addr_r=0x88000000\0" \ 225261d2760SDarwin Rambo "fdt_name=devtree.dtb\0" \ 226261d2760SDarwin Rambo "fdt_addr_r=0x83000000\0" \ 227261d2760SDarwin Rambo "fdt_high=0xffffffffffffffff\0" \ 228261d2760SDarwin Rambo "initrd_high=0xffffffffffffffff\0" 229261d2760SDarwin Rambo 230261d2760SDarwin Rambo #define CONFIG_BOOTARGS "console=ttyAMA0 earlyprintk=pl011,"\ 231261d2760SDarwin Rambo "0x1c090000 debug user_debug=31 "\ 232261d2760SDarwin Rambo "loglevel=9" 233261d2760SDarwin Rambo 234261d2760SDarwin Rambo #define CONFIG_BOOTCOMMAND "fdt addr $fdt_addr_r; fdt resize; " \ 235261d2760SDarwin Rambo "fdt chosen $initrd_addr_r $initrd_end; " \ 236261d2760SDarwin Rambo "bootm $kernel_addr_r - $fdt_addr_r" 237261d2760SDarwin Rambo 238261d2760SDarwin Rambo #define CONFIG_BOOTDELAY 1 239261d2760SDarwin Rambo 240261d2760SDarwin Rambo #else 241261d2760SDarwin Rambo 242261d2760SDarwin Rambo #define CONFIG_EXTRA_ENV_SETTINGS \ 2435bcae13eSTom Rini "kernel_addr_r=0x80000000\0" \ 2445bcae13eSTom Rini "initrd_addr_r=0x88000000\0" \ 2455bcae13eSTom Rini "fdt_addr_r=0x83000000\0" \ 24612916829SDavid Feng "fdt_high=0xa0000000\0" 24712916829SDavid Feng 248*b31f9d7aSLinus Walleij #define CONFIG_BOOTARGS "console=ttyAMA0,115200n8 root=/dev/ram0" 249261d2760SDarwin Rambo #define CONFIG_BOOTCOMMAND "bootm $kernel_addr_r " \ 250261d2760SDarwin Rambo "$initrd_addr_r:$initrd_size $fdt_addr_r" 25112916829SDavid Feng #define CONFIG_BOOTDELAY -1 252261d2760SDarwin Rambo #endif 25312916829SDavid Feng 25412916829SDavid Feng /* Do not preserve environment */ 25512916829SDavid Feng #define CONFIG_ENV_IS_NOWHERE 1 25612916829SDavid Feng #define CONFIG_ENV_SIZE 0x1000 25712916829SDavid Feng 25812916829SDavid Feng /* Monitor Command Prompt */ 25912916829SDavid Feng #define CONFIG_SYS_CBSIZE 512 /* Console I/O Buffer Size */ 26012916829SDavid Feng #define CONFIG_SYS_PROMPT "VExpress64# " 26112916829SDavid Feng #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ 26212916829SDavid Feng sizeof(CONFIG_SYS_PROMPT) + 16) 26312916829SDavid Feng #define CONFIG_SYS_HUSH_PARSER 26412916829SDavid Feng #define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE 26512916829SDavid Feng #define CONFIG_SYS_LONGHELP 2665bcae13eSTom Rini #define CONFIG_CMDLINE_EDITING 26712916829SDavid Feng #define CONFIG_SYS_MAXARGS 64 /* max command args */ 26812916829SDavid Feng 26912916829SDavid Feng #endif /* __VEXPRESS_AEMV8A_H */ 270