xref: /openbmc/u-boot/doc/README.mediatek (revision e16c888fab5014b022d5781dc534f204460a073b)
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