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