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