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