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