mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 20:18:18 +00:00 
			
		
		
		
	Add support for loading U-Boot on the Broadcom 7445 SoC. This port assumes Broadcom's BOLT bootloader is acting as the second stage bootloader, and U-Boot is acting as the third stage bootloader, loaded as an ELF program by BOLT. Signed-off-by: Thomas Fitzsimmons <fitzsim@fitzsim.org> Cc: Stefan Roese <sr@denx.de> Cc: Tom Rini <trini@konsulko.com> Cc: Florian Fainelli <f.fainelli@gmail.com>
		
			
				
	
	
		
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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
 | |
| ===
 | |
| 
 | |
| 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";
 | |
| 		};
 | |
| 	};
 | |
| };
 |