rpi.h 5.9 KB

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