blob: 73dc32b79b9ad2e4b2409c79746e38e53b849421 [file] [log] [blame]
Neil Armstrong84e5e8e2020-06-11 10:53:49 +02001.. SPDX-License-Identifier: GPL-2.0+
2
3U-Boot for Khadas VIM3
4======================
5
6Khadas VIM3 is a single board computer manufactured by Shenzhen Wesion
7Technology Co., Ltd. with the following specifications:
8
9 - Amlogic A311D Arm Cortex-A53 dual-core + Cortex-A73 quad-core SoC
10 - 4GB LPDDR4 SDRAM
11 - Gigabit Ethernet
12 - HDMI 2.1 display
13 - 40-pin GPIO header
14 - 1 x USB 3.0 Host, 1 x USB 2.0 Host
15 - eMMC, microSD
16 - M.2
17 - Infrared receiver
18
19Schematics are available on the manufacturer website.
20
Neil Armstrong29f59e82020-09-21 09:34:15 +020021PCIe Setup
22----------
23The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential
24lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between
25an USB3.0 Type A connector and a M.2 Key M slot.
26The PHY driving these differential lines is shared between
27the USB3.0 controller and the PCIe Controller, thus only
28a single controller can use it.
29
30To setup for PCIe, run the following commands from U-Boot:
31
32.. code-block:: none
33
34 i2c dev i2c@5000
35 i2c mw 0x18 0x33 1
36
37Then power-cycle the board.
38
39To set back to USB3.0, run the following commands from U-Boot:
40
41.. code-block:: none
42
43 i2c dev i2c@5000
44 i2c mw 0x18 0x33 0
45
46Then power-cycle the board.
47
Neil Armstrong84e5e8e2020-06-11 10:53:49 +020048U-Boot compilation
49------------------
50
51.. code-block:: bash
52
53 $ export CROSS_COMPILE=aarch64-none-elf-
54 $ make khadas-vim3_defconfig
55 $ make
56
57Image creation
58--------------
59
Neil Armstrong2ea98682022-03-02 10:42:22 +010060For simplified usage, pleaser refer to :doc:`pre-generated-fip` with codename `khadas-vim3`
61
Neil Armstrong84e5e8e2020-06-11 10:53:49 +020062Amlogic doesn't provide sources for the firmware and for tools needed
63to create the bootloader image, so it is necessary to obtain them from
64the git tree published by the board vendor:
65
66.. code-block:: bash
67
68 $ wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz
69 $ wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz
70 $ tar xvfJ gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz
71 $ tar xvfJ gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz
72 $ export PATH=$PWD/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin:$PWD/gcc-linaro-arm-none-eabi-4.8-2013.11_linux/bin:$PATH
73
74 $ DIR=vim3-u-boot
75 $ git clone --depth 1 \
76 https://github.com/khadas/u-boot.git -b khadas-vims-v2015.01 \
77 $DIR
78
79 $ cd vim3-u-boot
80 $ make kvim3_defconfig
Neil Armstronge87a7ac2020-11-05 16:18:57 +010081 $ make CROSS_COMPILE=aarch64-none-elf-
Neil Armstrong84e5e8e2020-06-11 10:53:49 +020082 $ export UBOOTDIR=$PWD
83
Neil Armstronge87a7ac2020-11-05 16:18:57 +010084Go back to mainline U-Boot source tree then :
Neil Armstrong84e5e8e2020-06-11 10:53:49 +020085
86.. code-block:: bash
87
88 $ mkdir fip
89
Neil Armstronge87a7ac2020-11-05 16:18:57 +010090 $ wget https://github.com/BayLibre/u-boot/releases/download/v2017.11-libretech-cc/blx_fix_g12a.sh -O fip/blx_fix.sh
Neil Armstrong84e5e8e2020-06-11 10:53:49 +020091 $ cp $UBOOTDIR/build/scp_task/bl301.bin fip/
92 $ cp $UBOOTDIR/build/board/khadas/kvim3/firmware/acs.bin fip/
93 $ cp $UBOOTDIR/fip/g12b/bl2.bin fip/
94 $ cp $UBOOTDIR/fip/g12b/bl30.bin fip/
95 $ cp $UBOOTDIR/fip/g12b/bl31.img fip/
96 $ cp $UBOOTDIR/fip/g12b/ddr3_1d.fw fip/
97 $ cp $UBOOTDIR/fip/g12b/ddr4_1d.fw fip/
98 $ cp $UBOOTDIR/fip/g12b/ddr4_2d.fw fip/
99 $ cp $UBOOTDIR/fip/g12b/diag_lpddr4.fw fip/
100 $ cp $UBOOTDIR/fip/g12b/lpddr3_1d.fw fip/
101 $ cp $UBOOTDIR/fip/g12b/lpddr4_1d.fw fip/
102 $ cp $UBOOTDIR/fip/g12b/lpddr4_2d.fw fip/
103 $ cp $UBOOTDIR/fip/g12b/piei.fw fip/
104 $ cp $UBOOTDIR/fip/g12b/aml_ddr.fw fip/
105 $ cp u-boot.bin fip/bl33.bin
106
Neil Armstronge87a7ac2020-11-05 16:18:57 +0100107 $ bash fip/blx_fix.sh \
Neil Armstrong84e5e8e2020-06-11 10:53:49 +0200108 fip/bl30.bin \
109 fip/zero_tmp \
110 fip/bl30_zero.bin \
111 fip/bl301.bin \
112 fip/bl301_zero.bin \
113 fip/bl30_new.bin \
114 bl30
115
Neil Armstronge87a7ac2020-11-05 16:18:57 +0100116 $ bash fip/blx_fix.sh \
Neil Armstrong84e5e8e2020-06-11 10:53:49 +0200117 fip/bl2.bin \
118 fip/zero_tmp \
119 fip/bl2_zero.bin \
120 fip/acs.bin \
121 fip/bl21_zero.bin \
122 fip/bl2_new.bin \
123 bl2
124
125 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl30sig --input fip/bl30_new.bin \
126 --output fip/bl30_new.bin.g12a.enc \
127 --level v3
128 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl30_new.bin.g12a.enc \
129 --output fip/bl30_new.bin.enc \
130 --level v3 --type bl30
131 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl31.img \
132 --output fip/bl31.img.enc \
133 --level v3 --type bl31
134 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl3sig --input fip/bl33.bin --compress lz4 \
135 --output fip/bl33.bin.enc \
136 --level v3 --type bl33 --compress lz4
137 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bl2sig --input fip/bl2_new.bin \
138 --output fip/bl2.n.bin.sig
139 $ $UBOOTDIR/fip/g12b/aml_encrypt_g12b --bootmk \
140 --output fip/u-boot.bin \
141 --bl2 fip/bl2.n.bin.sig \
142 --bl30 fip/bl30_new.bin.enc \
143 --bl31 fip/bl31.img.enc \
144 --bl33 fip/bl33.bin.enc \
145 --ddrfw1 fip/ddr4_1d.fw \
146 --ddrfw2 fip/ddr4_2d.fw \
147 --ddrfw3 fip/ddr3_1d.fw \
148 --ddrfw4 fip/piei.fw \
149 --ddrfw5 fip/lpddr4_1d.fw \
150 --ddrfw6 fip/lpddr4_2d.fw \
151 --ddrfw7 fip/diag_lpddr4.fw \
152 --ddrfw8 fip/aml_ddr.fw \
153 --ddrfw9 fip/lpddr3_1d.fw \
154 --level v3
155
156and then write the image to SD with:
157
158.. code-block:: bash
159
160 $ DEV=/dev/your_sd_device
161 $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1
162 $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=444