xref: /rk3399_rockchip-uboot/include/configs/rpi.h (revision fe84ebf0214cfc1766fb467268f056bed32a08ab)
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