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