xref: /openbmc/u-boot/include/configs/bcmstb.h (revision d1e15041)
1894c3ad2SThomas Fitzsimmons /* SPDX-License-Identifier: GPL-2.0+ */
2894c3ad2SThomas Fitzsimmons /*
3894c3ad2SThomas Fitzsimmons  * (C) Copyright 2018  Cisco Systems, Inc.
4894c3ad2SThomas Fitzsimmons  *
5894c3ad2SThomas Fitzsimmons  * Author: Thomas Fitzsimmons <fitzsim@fitzsim.org>
6894c3ad2SThomas Fitzsimmons  *
7894c3ad2SThomas Fitzsimmons  * Configuration settings for the Broadcom BCMSTB SoC family.
8894c3ad2SThomas Fitzsimmons  */
9894c3ad2SThomas Fitzsimmons 
10894c3ad2SThomas Fitzsimmons #ifndef __BCMSTB_H
11894c3ad2SThomas Fitzsimmons #define __BCMSTB_H
12894c3ad2SThomas Fitzsimmons 
13894c3ad2SThomas Fitzsimmons #include "version.h"
14894c3ad2SThomas Fitzsimmons #include <linux/sizes.h>
15*dc7685e2SThomas Fitzsimmons 
16*dc7685e2SThomas Fitzsimmons #ifndef __ASSEMBLY__
17*dc7685e2SThomas Fitzsimmons 
18*dc7685e2SThomas Fitzsimmons #include <linux/types.h>
19*dc7685e2SThomas Fitzsimmons 
20*dc7685e2SThomas Fitzsimmons struct bcmstb_boot_parameters {
21*dc7685e2SThomas Fitzsimmons 	u32 r0;
22*dc7685e2SThomas Fitzsimmons 	u32 r1;
23*dc7685e2SThomas Fitzsimmons 	u32 r2;
24*dc7685e2SThomas Fitzsimmons 	u32 r3;
25*dc7685e2SThomas Fitzsimmons 	u32 sp;
26*dc7685e2SThomas Fitzsimmons 	u32 lr;
27*dc7685e2SThomas Fitzsimmons };
28*dc7685e2SThomas Fitzsimmons 
29*dc7685e2SThomas Fitzsimmons extern struct bcmstb_boot_parameters bcmstb_boot_parameters;
30*dc7685e2SThomas Fitzsimmons 
31*dc7685e2SThomas Fitzsimmons extern phys_addr_t prior_stage_fdt_address;
32*dc7685e2SThomas Fitzsimmons 
33*dc7685e2SThomas Fitzsimmons #endif /* __ASSEMBLY__ */
34894c3ad2SThomas Fitzsimmons 
35894c3ad2SThomas Fitzsimmons /*
36894c3ad2SThomas Fitzsimmons  * CPU configuration.
37894c3ad2SThomas Fitzsimmons  */
38894c3ad2SThomas Fitzsimmons #define CONFIG_SKIP_LOWLEVEL_INIT
39894c3ad2SThomas Fitzsimmons 
40894c3ad2SThomas Fitzsimmons /*
41894c3ad2SThomas Fitzsimmons  * Memory configuration.
42894c3ad2SThomas Fitzsimmons  *
43894c3ad2SThomas Fitzsimmons  * The prior stage BOLT bootloader sets up memory for us.
44894c3ad2SThomas Fitzsimmons  *
45894c3ad2SThomas Fitzsimmons  * An example boot memory layout after loading everything is:
46894c3ad2SThomas Fitzsimmons  *
47894c3ad2SThomas Fitzsimmons  *	 0x0000 8000	vmlinux.bin.gz
48894c3ad2SThomas Fitzsimmons  *	       :	[~31 MiB uncompressed max]
49894c3ad2SThomas Fitzsimmons  *	 0x01ef f000	FIT containing signed public key
50894c3ad2SThomas Fitzsimmons  *	       :	[~2 KiB in size]
51894c3ad2SThomas Fitzsimmons  *	 0x01f0 0000	DTB copied from prior-stage-provided region
52894c3ad2SThomas Fitzsimmons  *	       :	[~1 MiB max]
53894c3ad2SThomas Fitzsimmons  *	 0x0200 0000	FIT containing ramdisk and device tree
54894c3ad2SThomas Fitzsimmons  *             :	  initramfs.cpio.gz
55894c3ad2SThomas Fitzsimmons  *	       :	  [~208 MiB uncompressed max, to CMA/bmem low address]
56894c3ad2SThomas Fitzsimmons  *	       :	  [~80 MiB compressed max, to PSB low address]
57894c3ad2SThomas Fitzsimmons  *             :	  device tree binary
58894c3ad2SThomas Fitzsimmons  *             :	  [~60 KiB]
59894c3ad2SThomas Fitzsimmons  *	 0x0700 0000	Prior stage bootloader (PSB)
60894c3ad2SThomas Fitzsimmons  *	       :
61894c3ad2SThomas Fitzsimmons  *	 0x0761 7000	Prior-stage-provided device tree binary (DTB)
62894c3ad2SThomas Fitzsimmons  *	       :	[~40 KiB in size]
63894c3ad2SThomas Fitzsimmons  *	 0x0f00 0000	Contiguous memory allocator (CMA/bmem) low address
64894c3ad2SThomas Fitzsimmons  *	       :
65894c3ad2SThomas Fitzsimmons  *	 0x8010 0000	U-Boot code at ELF load address
66894c3ad2SThomas Fitzsimmons  *	       :	[~500 KiB in size, stripped]
67894c3ad2SThomas Fitzsimmons  *	 0xc000 0000	Top of RAM
68894c3ad2SThomas Fitzsimmons  *
69894c3ad2SThomas Fitzsimmons  * Setting gd->relocaddr to CONFIG_SYS_TEXT_BASE in dram_init_banksize
70894c3ad2SThomas Fitzsimmons  * prevents U-Boot from relocating itself when it is run as an ELF
71894c3ad2SThomas Fitzsimmons  * program by the prior stage bootloader.
72894c3ad2SThomas Fitzsimmons  *
73894c3ad2SThomas Fitzsimmons  * We want to keep the ramdisk and FDT in the FIT image in-place, to
74894c3ad2SThomas Fitzsimmons  * accommodate stblinux's bmem and CMA regions.  To accomplish this,
75894c3ad2SThomas Fitzsimmons  * we set initrd_high and fdt_high to 0xffffffff, and the load and
76894c3ad2SThomas Fitzsimmons  * entry addresses of the FIT ramdisk entry to 0x0.
77894c3ad2SThomas Fitzsimmons  *
78894c3ad2SThomas Fitzsimmons  * Overwriting the prior stage bootloader causes memory instability,
79894c3ad2SThomas Fitzsimmons  * so the compressed initramfs needs to fit between the load address
80894c3ad2SThomas Fitzsimmons  * and the PSB low address.  In BOLT's default configuration this
81894c3ad2SThomas Fitzsimmons  * limits the compressed size of the initramfs to approximately 80
82894c3ad2SThomas Fitzsimmons  * MiB.  However, BOLT can be configured to allow loading larger
83894c3ad2SThomas Fitzsimmons  * initramfs images, in which case this limitation is eliminated.
84894c3ad2SThomas Fitzsimmons  */
85894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_SDRAM_BASE		0x00000000
86894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_INIT_RAM_SIZE	0x100000
87894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR +	\
88894c3ad2SThomas Fitzsimmons 					 CONFIG_SYS_INIT_RAM_SIZE -	\
89894c3ad2SThomas Fitzsimmons 					 GENERATED_GBL_DATA_SIZE)
90894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_LOAD_ADDR		0x2000000
91894c3ad2SThomas Fitzsimmons 
92894c3ad2SThomas Fitzsimmons /*
93894c3ad2SThomas Fitzsimmons  * CONFIG_SYS_LOAD_ADDR - 1 MiB.
94894c3ad2SThomas Fitzsimmons  */
95894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_FDT_SAVE_ADDRESS	0x1f00000
96894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_CBSIZE		512
97894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_MAXARGS		32
98894c3ad2SThomas Fitzsimmons 
99894c3ad2SThomas Fitzsimmons /*
100894c3ad2SThomas Fitzsimmons  * Large kernel image bootm configuration.
101894c3ad2SThomas Fitzsimmons  */
102894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_BOOTM_LEN		SZ_64M
103894c3ad2SThomas Fitzsimmons 
104894c3ad2SThomas Fitzsimmons /*
105894c3ad2SThomas Fitzsimmons  * NS16550 configuration.
106894c3ad2SThomas Fitzsimmons  */
107894c3ad2SThomas Fitzsimmons #define V_NS16550_CLK			81000000
108894c3ad2SThomas Fitzsimmons 
109894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550
110894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_SERIAL
111894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_REG_SIZE	(-4)
112894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_NS16550_CLK		V_NS16550_CLK
113894c3ad2SThomas Fitzsimmons 
114894c3ad2SThomas Fitzsimmons /*
115894c3ad2SThomas Fitzsimmons  * Serial console configuration.
116894c3ad2SThomas Fitzsimmons  */
117894c3ad2SThomas Fitzsimmons #define CONFIG_BAUDRATE			115200
118894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_BAUDRATE_TABLE	{4800, 9600, 19200, 38400, 57600, \
119894c3ad2SThomas Fitzsimmons 					 115200}
120894c3ad2SThomas Fitzsimmons 
121894c3ad2SThomas Fitzsimmons /*
122894c3ad2SThomas Fitzsimmons  * Informational display configuration.
123894c3ad2SThomas Fitzsimmons  */
124894c3ad2SThomas Fitzsimmons #define CONFIG_REVISION_TAG
125894c3ad2SThomas Fitzsimmons 
126894c3ad2SThomas Fitzsimmons /*
127894c3ad2SThomas Fitzsimmons  * Command configuration.
128894c3ad2SThomas Fitzsimmons  */
129894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_ASKENV
130894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_CACHE
131894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_EXT2
132894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_MMC
133894c3ad2SThomas Fitzsimmons 
134894c3ad2SThomas Fitzsimmons /*
135894c3ad2SThomas Fitzsimmons  * Flash configuration.
136894c3ad2SThomas Fitzsimmons  */
137894c3ad2SThomas Fitzsimmons #define CONFIG_ST_SMI
138894c3ad2SThomas Fitzsimmons #define CONFIG_SPI_FLASH_STMICRO
139894c3ad2SThomas Fitzsimmons #define CONFIG_SPI_FLASH_MACRONIX
140894c3ad2SThomas Fitzsimmons 
141894c3ad2SThomas Fitzsimmons /*
142894c3ad2SThomas Fitzsimmons  * Filesystem configuration.
143894c3ad2SThomas Fitzsimmons  */
144894c3ad2SThomas Fitzsimmons #define CONFIG_DOS_PARTITION
145894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_EXT4
146894c3ad2SThomas Fitzsimmons #define CONFIG_FS_EXT4
147894c3ad2SThomas Fitzsimmons #define CONFIG_CMD_FS_GENERIC
148894c3ad2SThomas Fitzsimmons 
149894c3ad2SThomas Fitzsimmons /*
150894c3ad2SThomas Fitzsimmons  * Environment configuration.
151894c3ad2SThomas Fitzsimmons  */
152894c3ad2SThomas Fitzsimmons #define CONFIG_SYS_REDUNDAND_ENVIRONMENT
153894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_SIZE			(64 << 10) /* 64 KiB */
154894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_OFFSET_REDUND	(CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
155894c3ad2SThomas Fitzsimmons #define CONFIG_ENV_OVERWRITE
156894c3ad2SThomas Fitzsimmons 
157894c3ad2SThomas Fitzsimmons /*
158894c3ad2SThomas Fitzsimmons  * Save the prior stage provided DTB.
159894c3ad2SThomas Fitzsimmons  */
160894c3ad2SThomas Fitzsimmons #define CONFIG_PREBOOT					\
161894c3ad2SThomas Fitzsimmons 	"fdt addr ${fdtcontroladdr};"			\
162894c3ad2SThomas Fitzsimmons 	"fdt move ${fdtcontroladdr} ${fdtsaveaddr};"	\
163894c3ad2SThomas Fitzsimmons 	"fdt addr ${fdtsaveaddr};"
164894c3ad2SThomas Fitzsimmons /*
165894c3ad2SThomas Fitzsimmons  * Enable in-place RFS with this initrd_high setting.
166894c3ad2SThomas Fitzsimmons  */
167894c3ad2SThomas Fitzsimmons #define CONFIG_EXTRA_ENV_SETTINGS					\
168894c3ad2SThomas Fitzsimmons 	"fdtsaveaddr=" __stringify(CONFIG_SYS_FDT_SAVE_ADDRESS) "\0"	\
169894c3ad2SThomas Fitzsimmons 	"initrd_high=0xffffffff\0"					\
170894c3ad2SThomas Fitzsimmons 	"fdt_high=0xffffffff\0"
171894c3ad2SThomas Fitzsimmons 
172894c3ad2SThomas Fitzsimmons /*
173894c3ad2SThomas Fitzsimmons  * Set fdtaddr to prior stage-provided DTB in board_late_init, when
174894c3ad2SThomas Fitzsimmons  * writeable environment is available.
175894c3ad2SThomas Fitzsimmons  */
176894c3ad2SThomas Fitzsimmons #define CONFIG_BOARD_LATE_INIT
177894c3ad2SThomas Fitzsimmons 
178894c3ad2SThomas Fitzsimmons #endif /* __BCMSTB_H */
179