123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- # SPDX-License-Identifier: GPL-2.0+
- #
- # Copyright (C) 2018 MediaTek Inc.
- # Ryder Lee <ryder.lee@kernel.org>
- This document describes how to compile the U-Boot and how to change U-Boot
- configuration about the MediaTek SoCs.
- Build Procedure
- ===============
- -Set the cross compiler:
- # export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi-
- -Clean-up old residuals:
- # make mrproper
- -Configure the U-Boot:
- # make <defconfig_file>
- # make
- - For the MT7623n bananapi R2 board use "mt7623n_bpir2_defconfig"
- - For the MT7629 reference board use "mt7629_rfb_defconfig"
- Boot sequence
- =============
- -Bootrom -> MTK preloader -> U-Boot
- - MT7623n
- This version of U-Boot doesn't implement SPL. So, MTK preloader binary
- is needed to boot up:
- https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/mt-pack/mtk/bpi-r2/bin
- -Bootrom -> SPL -> U-Boot
- - MT7629
- Configuration update
- ====================
- To update the U-Boot configuration, please refer to doc/README.kconfig
- MediaTek image header
- =====================
- Currently there are two image headers used for MediaTek chips:
- - BootROM image header. This header is used by the first stage bootloader. It records
- the desired compatible boot device, integrity information and its load address.
- The on-chip BootROM will firstly verify integrity and compatibility of the bootloader.
- If verification passed, the BootROM will then load the bootloader into on-chip SRAM,
- and pass control to it.
- Note that this header is actually a combination of three independent headers:
- Device header, BRLYT header and GFH header.
- Used by U-Boot SPL of MT7629 and preloader of MT7623.
- - MediaTek legacy image header. This header was originally used by the legacy image. It
- basically records the load address, image size and image name.
- After all low level initializations passed, the preloader will locate the LK image and
- load it into DRAM, and pass control to it.
- Now this header is used by U-Boot of MT7623.
- To generate these two headers with mkimage:
- # mkimage -T mtk_image -a <load_addr> -n <option_string> -d <input_file> <image_file>
- - mtk_image means using MediaTek's header generation method.
- - load_addr is the load address of this image.
- For first stage bootloader like U-Boot SPL or preloader, it usually points to the
- on-chip SRAM.
- For second stage bootloader like U-Boot, it usually points to the DRAM.
- - option_string contains options to generate the header.
- The option string is using the follow format:
- key1=value1;key2=value2;...
- The following key names are valid:
- lk: If lk=1, LK image header is used. Otherwise BootROM image header is used.
- lkname: The name of the LK image header. The maximum length is 32.
- The default value is "U-Boot".
- media: Desired boot device. The valid values are:
- nand : Parallel NAND
- snand: Serial NAND
- nor : Serial NOR
- emmc : eMMC
- sdmmc: SD
- nandinfo: Desired NAND device type, a combination of page size, oob size and
- optional device capacity. Valid types are:
- 2k+64 : for Serial NAND, 2KiB page size + 64B oob size
- 2k+120 : for Serial NAND, 2KiB page size + 120B oob size
- 2k+128 : for Serial NAND, 2KiB page size + 128B oob size
- 4k+256 : for Serial NAND, 4KiB page size + 256B oob size
- 1g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 1Gbit size
- 2g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 2Gbit size
- 4g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 4Gbit size
- 2g:2k+128: for Parallel NAND, 2KiB page size + 128B oob size, total 2Gbit size
- 4g:2k+128: for Parallel NAND, 2KiB page size + 128B oob size, total 4Gbit size
- MT7629 partitions on Serial NOR
- ===============================
- Start End Size Description
- 00000000 - 0000ffff: 64KiB U-Boot SPL
- 00010000 - 0005ffff: 320KiB U-Boot
- 00060000 - 0006ffff: 64KiB U-Boot env / MediaTek NVRAM
- 00070000 - 000affff: 256KiB RF calibration data
- 000b0000 - xxxxxxxx: all left Firmware image
- BPi-R2 (MT7623N) partitions on SD
- =================================
- Please note that the last two partitions can vary from different Linux distributions
- depending on the MBR partition table.
- Start End Size Description
- 00000000 - 000001ff: 512B Device header (with MBR partition table)
- 00000200 - 000007ff: 1536B BRLYT header
- 00000800 - 0004ffff: 318KiB Preloader (with GFH header)
- 00050000 - 000fffff: 704KiB U-Boot
- 00100000 - 063fffff: 99MiB Reserved
- 06400000 - 163fffff: 256MiB Partition 1 (FAT32)
- 16400000 - xxxxxxxx: all left Partition 2 (ext4)
- Upgrading notice on Serial NOR
- ==============================
- Example: MT7629
- The command sf is used to operate the Serial NOR device:
- - To probe current NOR flash:
- # sf probe
- - To erase a region:
- # sf erase <offset> <len>
- - To write data to an offset:
- # sf write <data_addr> <offset> <len>
- - To boot kernel:
- # bootm 0x300b0000
- The memory address range 0x30000000 - 0x3fffffff is mapped to the NOR flash.
- The DRAM starts at 0x40000000.
- Please note that the output binary u-boot-mtk.bin is a combination of SPL and U-Boot,
- and it should be write to beginning of the flash.
- Otherwise you should use standalone files:
- spl/u-boot-spl-mtk.bin for SPL,
- u-boot.img for U-Boot.
- Upgrading notice on SD / eMMC
- =============================
- Example: MT7623
- Normally only Preloader and U-Boot can be upgraded within U-Boot, and other partitions
- should be written in PC.
- - To probe current SD card / eMMC:
- # mmc dev 0 for eMMC
- # mmc dev 1 for SD
- - To erase a region:
- # mmc erase <blk_offset> <blk_num>
- - To write data to a block offset:
- # mmc write <data_addr> <blk_offset> <blk_num>
- - To load kernel image from partition 1:
- # fatload mmc 0:1 <load_address> <path_to_kernel_uImage> for eMMC
- # fatload mmc 1:1 <load_address> <path_to_kernel_uImage> for SD
- - To boot kernel:
- # bootm <load_address>
- The DRAM starts at 0x80000000.
- Please note that we use block offset and block count for SD card, not the byte offset.
- The block size is always 512 bytes for SD card.
- Documentation
- =============
- http://wiki.banana-pi.org/Banana_Pi_BPI-R2
|