1Summary
2=======
3
4This document describes how to use U-Boot on the Broadcom 7445 SoC, as
5a third stage bootloader loaded by Broadcom's BOLT bootloader.
6
7BOLT loads U-Boot as a generic ELF binary.  Some U-Boot features such
8as networking are not yet available but other important features are,
9including:
10
11   - ext4 file system traversal
12
13   - support for loading FIT images
14
15   - advanced scripting
16
17   - support for FIT-provided DTBs instead of relying on the
18     BOLT-provided DTB
19
20A customized version of this port has been used in production.  The
21same approach may work on other BCM7xxx boards, with some
22configuration adjustments and memory layout experimentation.
23
24Build
25=====
26
27make bcm7445_defconfig
28make
29${CROSS_COMPILE}strip u-boot
30
31Run
32===
33
34Flash the u-boot binary into board storage, then invoke it from BOLT.
35For example:
36
37BOLT> boot -bsu -elf flash0.u-boot1
38
39This port assumes that I-cache and D-cache are already enabled when
40U-Boot is entered.
41
42Flattened Image Tree Support
43============================
44
45What follows is an example FIT image source file.  Build it with:
46
47mkimage -f image.its image.itb
48
49Booting the resulting image.itb was tested on BOLT v1.20, with the
50following kernels:
51
52https://github.com/Broadcom/stblinux-3.14
53https://github.com/Broadcom/stblinux-4.1
54https://github.com/Broadcom/stblinux-4.9
55
56and with a generic ARMv7 root file system.
57
58image.its:
59/dts-v1/;
60/ {
61	description = "BCM7445 FIT";
62	images {
63		kernel@1 {
64			description = "Linux kernel";
65			/*
66			 * This kernel image output format can be
67			 * generated with:
68			 *
69			 * make vmlinux
70			 * ${CROSS_COMPILE}objcopy -O binary -S vmlinux vmlinux.bin
71			 * gzip -9 vmlinux.bin
72			 *
73			 * For stblinux-3.14, the specific Broadcom
74			 * board type should be configured in the
75			 * kernel, for example CONFIG_BCM7445D0=y.
76			 */
77			data = /incbin/("<vmlinux.bin.gz>");
78			type = "kernel";
79			arch = "arm";
80			os = "linux";
81			compression = "gzip";
82			load = <0x8000>;
83			entry = <0x8000>;
84			hash@1 {
85				algo = "sha256";
86			};
87		};
88		ramdisk@1 {
89			description = "Initramfs root file system";
90			data = /incbin/("<initramfs.cpio.gz>");
91			type = "ramdisk";
92			arch = "arm";
93			os = "linux";
94			compression = "gzip";
95			/*
96			 * Set the environment variable initrd_high to
97			 * 0xffffffff, and set "load" and "entry" here
98			 * to 0x0 to keep initramfs in-place and to
99			 * accommodate stblinux bmem/CMA reservations.
100			 */
101			load = <0x0>;
102			entry = <0x0>;
103			hash@1 {
104				algo = "sha256";
105			};
106		};
107		fdt@1 {
108			description = "Device tree dumped from BOLT";
109			/*
110			 * This DTB should be similar to the
111			 * BOLT-generated device tree, after BOLT has
112			 * done its runtime modifications to it.  For
113			 * example, it can be dumped from within
114			 * U-Boot (at ${fdtcontroladdr}), after BOLT
115			 * has loaded U-Boot.  The result can be added
116			 * to the Linux source tree as a .dts file.
117			 *
118			 * To support modifications to the device tree
119			 * in-place in U-Boot, add to Linux's
120			 * arch/arm/boot/dts/Makefile:
121			 *
122			 * DTC_FLAGS ?= -p 4096
123			 *
124			 * This will leave some padding in the DTB and
125			 * thus reserve room for node additions.
126			 *
127			 * Also, set the environment variable fdt_high
128			 * to 0xffffffff to keep the DTB in-place and
129			 * to accommodate stblinux bmem/CMA
130			 * reservations.
131			 */
132			data = /incbin/("<bolt-<version>.dtb");
133			type = "flat_dt";
134			arch = "arm";
135			compression = "none";
136			hash@1 {
137				algo = "sha256";
138			};
139		};
140	};
141	configurations {
142		default = "conf@bcm7445";
143		conf@bcm7445 {
144			description = "BCM7445 configuration";
145			kernel = "kernel@1";
146			ramdisk = "ramdisk@1";
147			fdt = "fdt@1";
148		};
149	};
150};
151