]>
Commit | Line | Data |
---|---|---|
3ba286e0 RL |
1 | # SPDX-License-Identifier: GPL-2.0+ |
2 | # | |
3 | # Copyright (C) 2018 MediaTek Inc. | |
4 | # Ryder Lee <[email protected]> | |
5 | ||
6 | ||
7 | This document describes how to compile the U-Boot and how to change U-Boot | |
8 | configuration about the MediaTek SoCs. | |
9 | ||
10 | ||
11 | Build 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 | ||
30 | Boot 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 | ||
47 | Configuration update | |
48 | ==================== | |
49 | To update the U-Boot configuration, please refer to doc/README.kconfig | |
50 | ||
51 | ||
52 | MediaTek image header | |
53 | ===================== | |
54 | Currently 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 | ||
79 | To 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 | ||
124 | MT7629 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 | ||
135 | BPi-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 | ||
150 | Upgrading notice on Serial NOR | |
151 | ============================== | |
152 | Example: 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 | ||
184 | Upgrading notice on SD / eMMC | |
185 | ============================= | |
186 | Example: 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 | ||
219 | Documentation | |
220 | ============= | |
221 | http://wiki.banana-pi.org/Banana_Pi_BPI-R2 |