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