19316e144SStephen Warren /* 2*fe84ebf0SStephen Warren * (C) Copyright 2012-2016 Stephen Warren 39316e144SStephen Warren * 4a033171bSStephen Warren * SPDX-License-Identifier: GPL-2.0 59316e144SStephen Warren */ 69316e144SStephen Warren 79316e144SStephen Warren #ifndef __CONFIG_H 89316e144SStephen Warren #define __CONFIG_H 99316e144SStephen Warren 10*fe84ebf0SStephen Warren #include <linux/sizes.h> 11*fe84ebf0SStephen Warren #include <asm/arch/timer.h> 12060f9bf5SAlexander Stein 13*fe84ebf0SStephen Warren #if defined(CONFIG_TARGET_RPI_2) || defined(CONFIG_TARGET_RPI_3_32B) 14*fe84ebf0SStephen Warren #define CONFIG_SKIP_LOWLEVEL_INIT 15*fe84ebf0SStephen Warren #endif 16*fe84ebf0SStephen Warren 17*fe84ebf0SStephen Warren #ifdef CONFIG_BCM2835 18*fe84ebf0SStephen Warren #define CONFIG_SYS_CACHELINE_SIZE 32 19*fe84ebf0SStephen Warren #else 20*fe84ebf0SStephen Warren #define CONFIG_SYS_CACHELINE_SIZE 64 21*fe84ebf0SStephen Warren #endif 22*fe84ebf0SStephen Warren 23*fe84ebf0SStephen Warren /* Architecture, CPU, etc.*/ 24*fe84ebf0SStephen Warren #define CONFIG_ARCH_CPU_INIT 25*fe84ebf0SStephen Warren 26*fe84ebf0SStephen Warren /* Use SoC timer for AArch32, but architected timer for AArch64 */ 27*fe84ebf0SStephen Warren #ifndef CONFIG_ARM64 28*fe84ebf0SStephen Warren #define CONFIG_SYS_TIMER_RATE 1000000 29*fe84ebf0SStephen Warren #define CONFIG_SYS_TIMER_COUNTER \ 30*fe84ebf0SStephen Warren (&((struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR)->clo) 31*fe84ebf0SStephen Warren #endif 32*fe84ebf0SStephen Warren 33*fe84ebf0SStephen Warren /* 34*fe84ebf0SStephen Warren * 2835 is a SKU in a series for which the 2708 is the first or primary SoC, 35*fe84ebf0SStephen Warren * so 2708 has historically been used rather than a dedicated 2835 ID. 36*fe84ebf0SStephen Warren * 37*fe84ebf0SStephen Warren * We don't define a machine type for bcm2709/bcm2836 since the RPi Foundation 38*fe84ebf0SStephen Warren * chose to use someone else's previously registered machine ID (3139, MX51_GGC) 39*fe84ebf0SStephen Warren * rather than obtaining a valid ID:-/ 40*fe84ebf0SStephen Warren * 41*fe84ebf0SStephen Warren * For the bcm2837, hopefully a machine type is not needed, since everything 42*fe84ebf0SStephen Warren * is DT. 43*fe84ebf0SStephen Warren */ 44*fe84ebf0SStephen Warren #ifdef CONFIG_BCM2835 45*fe84ebf0SStephen Warren #define CONFIG_MACH_TYPE MACH_TYPE_BCM2708 46*fe84ebf0SStephen Warren #endif 47*fe84ebf0SStephen Warren 48*fe84ebf0SStephen Warren /* Memory layout */ 49*fe84ebf0SStephen Warren #define CONFIG_NR_DRAM_BANKS 1 50*fe84ebf0SStephen Warren #define CONFIG_SYS_SDRAM_BASE 0x00000000 51*fe84ebf0SStephen Warren #define CONFIG_SYS_TEXT_BASE 0x00008000 52*fe84ebf0SStephen Warren #define CONFIG_SYS_UBOOT_BASE CONFIG_SYS_TEXT_BASE 53*fe84ebf0SStephen Warren /* 54*fe84ebf0SStephen Warren * The board really has 256M. However, the VC (VideoCore co-processor) shares 55*fe84ebf0SStephen Warren * the RAM, and uses a configurable portion at the top. We tell U-Boot that a 56*fe84ebf0SStephen Warren * smaller amount of RAM is present in order to avoid stomping on the area 57*fe84ebf0SStephen Warren * the VC uses. 58*fe84ebf0SStephen Warren */ 59*fe84ebf0SStephen Warren #define CONFIG_SYS_SDRAM_SIZE SZ_128M 60*fe84ebf0SStephen Warren #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + \ 61*fe84ebf0SStephen Warren CONFIG_SYS_SDRAM_SIZE - \ 62*fe84ebf0SStephen Warren GENERATED_GBL_DATA_SIZE) 63*fe84ebf0SStephen Warren #define CONFIG_SYS_MALLOC_LEN SZ_4M 64*fe84ebf0SStephen Warren #define CONFIG_SYS_MEMTEST_START 0x00100000 65*fe84ebf0SStephen Warren #define CONFIG_SYS_MEMTEST_END 0x00200000 66*fe84ebf0SStephen Warren #define CONFIG_LOADADDR 0x00200000 67*fe84ebf0SStephen Warren 68*fe84ebf0SStephen Warren /* Flash */ 69*fe84ebf0SStephen Warren #define CONFIG_SYS_NO_FLASH 70*fe84ebf0SStephen Warren 71*fe84ebf0SStephen Warren /* Devices */ 72*fe84ebf0SStephen Warren /* GPIO */ 73*fe84ebf0SStephen Warren #define CONFIG_BCM2835_GPIO 74*fe84ebf0SStephen Warren /* LCD */ 75*fe84ebf0SStephen Warren #define CONFIG_LCD 76*fe84ebf0SStephen Warren #define CONFIG_LCD_DT_SIMPLEFB 77*fe84ebf0SStephen Warren #define LCD_BPP LCD_COLOR16 78*fe84ebf0SStephen Warren /* 79*fe84ebf0SStephen Warren * Prevent allocation of RAM for FB; the real FB address is queried 80*fe84ebf0SStephen Warren * dynamically from the VideoCore co-processor, and comes from RAM 81*fe84ebf0SStephen Warren * not owned by the ARM CPU. 82*fe84ebf0SStephen Warren */ 83*fe84ebf0SStephen Warren #define CONFIG_FB_ADDR 0 84*fe84ebf0SStephen Warren #define CONFIG_VIDEO_BCM2835 85*fe84ebf0SStephen Warren #define CONFIG_SYS_WHITE_ON_BLACK 86*fe84ebf0SStephen Warren #define CONFIG_CONSOLE_SCROLL_LINES 10 87*fe84ebf0SStephen Warren 88*fe84ebf0SStephen Warren /* SD/MMC configuration */ 89*fe84ebf0SStephen Warren #define CONFIG_GENERIC_MMC 90*fe84ebf0SStephen Warren #define CONFIG_MMC 91*fe84ebf0SStephen Warren #define CONFIG_SDHCI 92*fe84ebf0SStephen Warren #define CONFIG_MMC_SDHCI_IO_ACCESSORS 93*fe84ebf0SStephen Warren #define CONFIG_BCM2835_SDHCI 94*fe84ebf0SStephen Warren 95*fe84ebf0SStephen Warren #define CONFIG_CMD_USB 96*fe84ebf0SStephen Warren #ifdef CONFIG_CMD_USB 97*fe84ebf0SStephen Warren #define CONFIG_USB_DWC2 98*fe84ebf0SStephen Warren #ifndef CONFIG_BCM2835 99*fe84ebf0SStephen Warren #define CONFIG_USB_DWC2_REG_ADDR 0x3f980000 100*fe84ebf0SStephen Warren #else 101*fe84ebf0SStephen Warren #define CONFIG_USB_DWC2_REG_ADDR 0x20980000 102*fe84ebf0SStephen Warren #endif 103*fe84ebf0SStephen Warren #define CONFIG_USB_STORAGE 104*fe84ebf0SStephen Warren #define CONFIG_USB_HOST_ETHER 105*fe84ebf0SStephen Warren #define CONFIG_USB_ETHER_SMSC95XX 106*fe84ebf0SStephen Warren #define CONFIG_MISC_INIT_R 107*fe84ebf0SStephen Warren #define CONFIG_USB_KEYBOARD 108*fe84ebf0SStephen Warren #define CONFIG_SYS_USB_EVENT_POLL 109*fe84ebf0SStephen Warren #define CONFIG_SYS_STDIO_DEREGISTER 110*fe84ebf0SStephen Warren #endif 111*fe84ebf0SStephen Warren 112*fe84ebf0SStephen Warren /* Console UART */ 113*fe84ebf0SStephen Warren #ifdef CONFIG_BCM2837 114*fe84ebf0SStephen Warren #define CONFIG_BCM283X_MU_SERIAL 115*fe84ebf0SStephen Warren #else 116*fe84ebf0SStephen Warren #define CONFIG_PL01X_SERIAL 117*fe84ebf0SStephen Warren #endif 118*fe84ebf0SStephen Warren #define CONFIG_CONS_INDEX 0 119*fe84ebf0SStephen Warren #define CONFIG_BAUDRATE 115200 120*fe84ebf0SStephen Warren 121*fe84ebf0SStephen Warren /* Console configuration */ 122*fe84ebf0SStephen Warren #define CONFIG_SYS_CBSIZE 1024 123*fe84ebf0SStephen Warren #define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ 124*fe84ebf0SStephen Warren sizeof(CONFIG_SYS_PROMPT) + 16) 125*fe84ebf0SStephen Warren 126*fe84ebf0SStephen Warren /* Environment */ 127*fe84ebf0SStephen Warren #define CONFIG_ENV_SIZE SZ_16K 128*fe84ebf0SStephen Warren #define CONFIG_ENV_IS_IN_FAT 129*fe84ebf0SStephen Warren #define FAT_ENV_INTERFACE "mmc" 130*fe84ebf0SStephen Warren #define FAT_ENV_DEVICE_AND_PART "0:1" 131*fe84ebf0SStephen Warren #define FAT_ENV_FILE "uboot.env" 132*fe84ebf0SStephen Warren #define CONFIG_FAT_WRITE 133*fe84ebf0SStephen Warren #define CONFIG_ENV_VARS_UBOOT_CONFIG 134*fe84ebf0SStephen Warren #define CONFIG_SYS_LOAD_ADDR 0x1000000 135*fe84ebf0SStephen Warren #define CONFIG_CONSOLE_MUX 136*fe84ebf0SStephen Warren #define CONFIG_SYS_CONSOLE_IS_IN_ENV 137*fe84ebf0SStephen Warren #define CONFIG_PREBOOT "usb start" 138*fe84ebf0SStephen Warren 139*fe84ebf0SStephen Warren /* Shell */ 140*fe84ebf0SStephen Warren #define CONFIG_SYS_MAXARGS 16 141*fe84ebf0SStephen Warren #define CONFIG_COMMAND_HISTORY 142*fe84ebf0SStephen Warren 143*fe84ebf0SStephen Warren /* Commands */ 144*fe84ebf0SStephen Warren #define CONFIG_CMD_MMC 145*fe84ebf0SStephen Warren #define CONFIG_PARTITION_UUIDS 146*fe84ebf0SStephen Warren #define CONFIG_CMD_PART 147*fe84ebf0SStephen Warren 148*fe84ebf0SStephen Warren /* ATAGs support for bootm/bootz */ 149*fe84ebf0SStephen Warren #define CONFIG_SETUP_MEMORY_TAGS 150*fe84ebf0SStephen Warren #define CONFIG_CMDLINE_TAG 151*fe84ebf0SStephen Warren #define CONFIG_INITRD_TAG 152*fe84ebf0SStephen Warren 153*fe84ebf0SStephen Warren #include <config_distro_defaults.h> 154*fe84ebf0SStephen Warren 155*fe84ebf0SStephen Warren /* Environment */ 156*fe84ebf0SStephen Warren #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 157*fe84ebf0SStephen Warren #define ENV_DEVICE_SETTINGS \ 158*fe84ebf0SStephen Warren "stdin=serial,usbkbd\0" \ 159*fe84ebf0SStephen Warren "stdout=serial,lcd\0" \ 160*fe84ebf0SStephen Warren "stderr=serial,lcd\0" 161*fe84ebf0SStephen Warren 162*fe84ebf0SStephen Warren /* 163*fe84ebf0SStephen Warren * Memory layout for where various images get loaded by boot scripts: 164*fe84ebf0SStephen Warren * 165*fe84ebf0SStephen Warren * I suspect address 0 is used as the SMP pen on the RPi2, so avoid this. 166*fe84ebf0SStephen Warren * 167*fe84ebf0SStephen Warren * fdt_addr_r simply shouldn't overlap anything else. However, the RPi's 168*fe84ebf0SStephen Warren * binary firmware loads a DT to address 0x100, so we choose this address to 169*fe84ebf0SStephen Warren * match it. This allows custom boot scripts to pass this DT on to Linux 170*fe84ebf0SStephen Warren * simply by not over-writing the data at this address. When using U-Boot, 171*fe84ebf0SStephen Warren * U-Boot (and scripts it executes) typicaly ignore the DT loaded by the FW 172*fe84ebf0SStephen Warren * and loads its own DT from disk (triggered by boot.scr or extlinux.conf). 173*fe84ebf0SStephen Warren * 174*fe84ebf0SStephen Warren * pxefile_addr_r can be pretty much anywhere that doesn't conflict with 175*fe84ebf0SStephen Warren * something else. Put it low in memory to avoid conflicts. 176*fe84ebf0SStephen Warren * 177*fe84ebf0SStephen Warren * kernel_addr_r must be within the first 128M of RAM in order for the 178*fe84ebf0SStephen Warren * kernel's CONFIG_AUTO_ZRELADDR option to work. Since the kernel will 179*fe84ebf0SStephen Warren * decompress itself to 0x8000 after the start of RAM, kernel_addr_r 180*fe84ebf0SStephen Warren * should not overlap that area, or the kernel will have to copy itself 181*fe84ebf0SStephen Warren * somewhere else before decompression. Similarly, the address of any other 182*fe84ebf0SStephen Warren * data passed to the kernel shouldn't overlap the start of RAM. Pushing 183*fe84ebf0SStephen Warren * this up to 16M allows for a sizable kernel to be decompressed below the 184*fe84ebf0SStephen Warren * compressed load address. 185*fe84ebf0SStephen Warren * 186*fe84ebf0SStephen Warren * scriptaddr can be pretty much anywhere that doesn't conflict with something 187*fe84ebf0SStephen Warren * else. Choosing 32M allows for the compressed kernel to be up to 16M. 188*fe84ebf0SStephen Warren * 189*fe84ebf0SStephen Warren * ramdisk_addr_r simply shouldn't overlap anything else. Choosing 33M allows 190*fe84ebf0SStephen Warren * for any boot script to be up to 1M, which is hopefully plenty. 191*fe84ebf0SStephen Warren */ 192*fe84ebf0SStephen Warren #define ENV_MEM_LAYOUT_SETTINGS \ 193*fe84ebf0SStephen Warren "fdt_high=ffffffff\0" \ 194*fe84ebf0SStephen Warren "initrd_high=ffffffff\0" \ 195*fe84ebf0SStephen Warren "fdt_addr_r=0x00000100\0" \ 196*fe84ebf0SStephen Warren "pxefile_addr_r=0x00100000\0" \ 197*fe84ebf0SStephen Warren "kernel_addr_r=0x01000000\0" \ 198*fe84ebf0SStephen Warren "scriptaddr=0x02000000\0" \ 199*fe84ebf0SStephen Warren "ramdisk_addr_r=0x02100000\0" \ 200*fe84ebf0SStephen Warren 201*fe84ebf0SStephen Warren #define BOOT_TARGET_DEVICES(func) \ 202*fe84ebf0SStephen Warren func(MMC, mmc, 0) \ 203*fe84ebf0SStephen Warren func(USB, usb, 0) \ 204*fe84ebf0SStephen Warren func(PXE, pxe, na) \ 205*fe84ebf0SStephen Warren func(DHCP, dhcp, na) 206*fe84ebf0SStephen Warren #include <config_distro_bootcmd.h> 207*fe84ebf0SStephen Warren 208*fe84ebf0SStephen Warren #define CONFIG_EXTRA_ENV_SETTINGS \ 209*fe84ebf0SStephen Warren "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \ 210*fe84ebf0SStephen Warren ENV_DEVICE_SETTINGS \ 211*fe84ebf0SStephen Warren ENV_MEM_LAYOUT_SETTINGS \ 212*fe84ebf0SStephen Warren BOOTENV 213*fe84ebf0SStephen Warren 214*fe84ebf0SStephen Warren #define CONFIG_BOOTDELAY 2 2159316e144SStephen Warren 2169316e144SStephen Warren #endif 217