1# SPDX-License-Identifier: GPL-2.0+ 2# 3# Copyright (C) 2018 MediaTek Inc. 4# Ryder Lee <ryder.lee@kernel.org> 5 6 7This document describes how to compile the U-Boot and how to change U-Boot 8configuration about the MediaTek SoCs. 9 10 11Build Procedure 12=============== 13 -Set the cross compiler: 14 15 # export CROSS_COMPILE=/path/to/toolchain/arm-linux-gnueabi- 16 17 -Clean-up old residuals: 18 19 # make mrproper 20 21 -Configure the U-Boot: 22 23 # make <defconfig_file> 24 # make 25 26 - For the MT7623n bananapi R2 board use "mt7623n_bpir2_defconfig" 27 - For the MT7629 reference board use "mt7629_rfb_defconfig" 28 29 30Boot sequence 31============= 32 -Bootrom -> MTK preloader -> U-Boot 33 34 - MT7623n 35 36 This version of U-Boot doesn't implement SPL. So, MTK preloader binary 37 is needed to boot up: 38 39 https://github.com/BPI-SINOVOIP/BPI-R2-bsp/tree/master/mt-pack/mtk/bpi-r2/bin 40 41 42 -Bootrom -> SPL -> U-Boot 43 44 - MT7629 45 46 47Configuration update 48==================== 49 To update the U-Boot configuration, please refer to doc/README.kconfig 50 51 52MediaTek image header 53===================== 54Currently there are two image headers used for MediaTek chips: 55 56 - BootROM image header. This header is used by the first stage bootloader. It records 57 the desired compatible boot device, integrity information and its load address. 58 59 The on-chip BootROM will firstly verify integrity and compatibility of the bootloader. 60 61 If verification passed, the BootROM will then load the bootloader into on-chip SRAM, 62 and pass control to it. 63 64 Note that this header is actually a combination of three independent headers: 65 Device header, BRLYT header and GFH header. 66 67 Used by U-Boot SPL of MT7629 and preloader of MT7623. 68 69 70 - MediaTek legacy image header. This header was originally used by the legacy image. It 71 basically records the load address, image size and image name. 72 73 After all low level initializations passed, the preloader will locate the LK image and 74 load it into DRAM, and pass control to it. 75 76 Now this header is used by U-Boot of MT7623. 77 78 79To generate these two headers with mkimage: 80 81 # mkimage -T mtk_image -a <load_addr> -n <option_string> -d <input_file> <image_file> 82 83 - mtk_image means using MediaTek's header generation method. 84 85 86 - load_addr is the load address of this image. 87 For first stage bootloader like U-Boot SPL or preloader, it usually points to the 88 on-chip SRAM. 89 90 For second stage bootloader like U-Boot, it usually points to the DRAM. 91 92 93 - option_string contains options to generate the header. 94 95 The option string is using the follow format: 96 key1=value1;key2=value2;... 97 98 The following key names are valid: 99 lk: If lk=1, LK image header is used. Otherwise BootROM image header is used. 100 101 lkname: The name of the LK image header. The maximum length is 32. 102 The default value is "U-Boot". 103 104 media: Desired boot device. The valid values are: 105 nand : Parallel NAND 106 snand: Serial NAND 107 nor : Serial NOR 108 emmc : eMMC 109 sdmmc: SD 110 111 nandinfo: Desired NAND device type, a combination of page size, oob size and 112 optional device capacity. Valid types are: 113 2k+64 : for Serial NAND, 2KiB page size + 64B oob size 114 2k+120 : for Serial NAND, 2KiB page size + 120B oob size 115 2k+128 : for Serial NAND, 2KiB page size + 128B oob size 116 4k+256 : for Serial NAND, 4KiB page size + 256B oob size 117 1g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 1Gbit size 118 2g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 2Gbit size 119 4g:2k+64 : for Parallel NAND, 2KiB page size + 64B oob size, total 4Gbit size 120 2g:2k+128: for Parallel NAND, 2KiB page size + 128B oob size, total 2Gbit size 121 4g:2k+128: for Parallel NAND, 2KiB page size + 128B oob size, total 4Gbit size 122 123 124MT7629 partitions on Serial NOR 125=============================== 126 127 Start End Size Description 128 00000000 - 0000ffff: 64KiB U-Boot SPL 129 00010000 - 0005ffff: 320KiB U-Boot 130 00060000 - 0006ffff: 64KiB U-Boot env / MediaTek NVRAM 131 00070000 - 000affff: 256KiB RF calibration data 132 000b0000 - xxxxxxxx: all left Firmware image 133 134 135BPi-R2 (MT7623N) partitions on SD 136================================= 137 Please note that the last two partitions can vary from different Linux distributions 138 depending on the MBR partition table. 139 140 Start End Size Description 141 00000000 - 000001ff: 512B Device header (with MBR partition table) 142 00000200 - 000007ff: 1536B BRLYT header 143 00000800 - 0004ffff: 318KiB Preloader (with GFH header) 144 00050000 - 000fffff: 704KiB U-Boot 145 00100000 - 063fffff: 99MiB Reserved 146 06400000 - 163fffff: 256MiB Partition 1 (FAT32) 147 16400000 - xxxxxxxx: all left Partition 2 (ext4) 148 149 150Upgrading notice on Serial NOR 151============================== 152Example: MT7629 153 154 The command sf is used to operate the Serial NOR device: 155 156 - To probe current NOR flash: 157 158 # sf probe 159 160 - To erase a region: 161 162 # sf erase <offset> <len> 163 164 - To write data to an offset: 165 166 # sf write <data_addr> <offset> <len> 167 168 - To boot kernel: 169 170 # bootm 0x300b0000 171 172 The memory address range 0x30000000 - 0x3fffffff is mapped to the NOR flash. 173 The DRAM starts at 0x40000000. 174 175 Please note that the output binary u-boot-mtk.bin is a combination of SPL and U-Boot, 176 and it should be write to beginning of the flash. 177 178 Otherwise you should use standalone files: 179 180 spl/u-boot-spl-mtk.bin for SPL, 181 u-boot.img for U-Boot. 182 183 184Upgrading notice on SD / eMMC 185============================= 186Example: MT7623 187 188 Normally only Preloader and U-Boot can be upgraded within U-Boot, and other partitions 189 should be written in PC. 190 191 - To probe current SD card / eMMC: 192 193 # mmc dev 0 for eMMC 194 # mmc dev 1 for SD 195 196 - To erase a region: 197 198 # mmc erase <blk_offset> <blk_num> 199 200 - To write data to a block offset: 201 202 # mmc write <data_addr> <blk_offset> <blk_num> 203 204 - To load kernel image from partition 1: 205 206 # fatload mmc 0:1 <load_address> <path_to_kernel_uImage> for eMMC 207 # fatload mmc 1:1 <load_address> <path_to_kernel_uImage> for SD 208 209 - To boot kernel: 210 211 # bootm <load_address> 212 213 The DRAM starts at 0x80000000. 214 215 Please note that we use block offset and block count for SD card, not the byte offset. 216 The block size is always 512 bytes for SD card. 217 218 219Documentation 220============= 221 http://wiki.banana-pi.org/Banana_Pi_BPI-R2 222