blob: 6839da5f9742c28755eed46aa90dde74469f7d28 [file] [log] [blame]
Summary
=======
This document describes how to use U-Boot on the Broadcom 7445 SoC, as
a third stage bootloader loaded by Broadcom's BOLT bootloader.
BOLT loads U-Boot as a generic ELF binary. Some U-Boot features such
as networking are not yet available but other important features are,
including:
- ext4 file system traversal
- support for loading FIT images
- advanced scripting
- support for FIT-provided DTBs instead of relying on the
BOLT-provided DTB
A customized version of this port has been used in production. The
same approach may work on other BCM7xxx boards, with some
configuration adjustments and memory layout experimentation.
Build
=====
make bcm7445_defconfig
make
${CROSS_COMPILE}strip u-boot
Run
===
To tell U-Boot which serial port to use for its console, set the
"stdout-path" property in the "/chosen" node of the BOLT-generated
device tree. For example:
BOLT> dt add prop chosen stdout-path s serial0:115200n8
Flash the u-boot binary into board storage, then invoke it from BOLT.
For example:
BOLT> boot -bsu -elf flash0.u-boot1
This port assumes that I-cache and D-cache are already enabled when
U-Boot is entered.
Flattened Image Tree Support
============================
What follows is an example FIT image source file. Build it with:
mkimage -f image.its image.itb
Booting the resulting image.itb was tested on BOLT v1.20, with the
following kernels:
https://github.com/Broadcom/stblinux-3.14
https://github.com/Broadcom/stblinux-4.1
https://github.com/Broadcom/stblinux-4.9
and with a generic ARMv7 root file system.
image.its:
/dts-v1/;
/ {
description = "BCM7445 FIT";
images {
kernel@1 {
description = "Linux kernel";
/*
* This kernel image output format can be
* generated with:
*
* make vmlinux
* ${CROSS_COMPILE}objcopy -O binary -S vmlinux vmlinux.bin
* gzip -9 vmlinux.bin
*
* For stblinux-3.14, the specific Broadcom
* board type should be configured in the
* kernel, for example CONFIG_BCM7445D0=y.
*/
data = /incbin/("<vmlinux.bin.gz>");
type = "kernel";
arch = "arm";
os = "linux";
compression = "gzip";
load = <0x8000>;
entry = <0x8000>;
hash@1 {
algo = "sha256";
};
};
ramdisk@1 {
description = "Initramfs root file system";
data = /incbin/("<initramfs.cpio.gz>");
type = "ramdisk";
arch = "arm";
os = "linux";
compression = "gzip";
/*
* Set the environment variable initrd_high to
* 0xffffffff, and set "load" and "entry" here
* to 0x0 to keep initramfs in-place and to
* accommodate stblinux bmem/CMA reservations.
*/
load = <0x0>;
entry = <0x0>;
hash@1 {
algo = "sha256";
};
};
fdt@1 {
description = "Device tree dumped from BOLT";
/*
* This DTB should be similar to the
* BOLT-generated device tree, after BOLT has
* done its runtime modifications to it. For
* example, it can be dumped from within
* U-Boot (at ${fdtcontroladdr}), after BOLT
* has loaded U-Boot. The result can be added
* to the Linux source tree as a .dts file.
*
* To support modifications to the device tree
* in-place in U-Boot, add to Linux's
* arch/arm/boot/dts/Makefile:
*
* DTC_FLAGS ?= -p 4096
*
* This will leave some padding in the DTB and
* thus reserve room for node additions.
*
* Also, set the environment variable fdt_high
* to 0xffffffff to keep the DTB in-place and
* to accommodate stblinux bmem/CMA
* reservations.
*/
data = /incbin/("<bolt-<version>.dtb");
type = "flat_dt";
arch = "arm";
compression = "none";
hash@1 {
algo = "sha256";
};
};
};
configurations {
default = "conf@bcm7445";
conf@bcm7445 {
description = "BCM7445 configuration";
kernel = "kernel@1";
ramdisk = "ramdisk@1";
fdt = "fdt@1";
};
};
};