| .. SPDX-License-Identifier: GPL-2.0+ |
| .. Copyright (C) 2018, 2023 Thomas Fitzsimmons <fitzsim@fitzsim.org> |
| |
| BCM7445 and BCM7260 |
| =================== |
| |
| This document describes how to use U-Boot on the Broadcom 7445 and |
| Broadcom 7260 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 implemented 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. |
| |
| Configure |
| --------- |
| |
| BCM7445 |
| ^^^^^^^ |
| |
| .. code-block:: console |
| |
| $ make bcm7445_defconfig |
| |
| BCM7260 |
| ^^^^^^^ |
| |
| .. code-block:: console |
| |
| $ make bcm7260_defconfig |
| |
| Build |
| ----- |
| |
| .. code-block:: console |
| |
| $ 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: |
| |
| .. code-block:: console |
| |
| $ 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"; |
| }; |
| }; |
| }; |