1.. SPDX-License-Identifier: GPL-2.0+ 2 3U-Boot for Khadas VIM3L 4======================= 5 6Khadas VIM3L is a single board computer manufactured by Shenzhen Wesion 7Technology Co., Ltd. with the following specifications: 8 9 - Amlogic S905D3 Arm Cortex-A55 quad-core SoC 10 - 2GB 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 21PCIe 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 48U-Boot compilation 49------------------ 50 51.. code-block:: bash 52 53 $ export CROSS_COMPILE=aarch64-none-elf- 54 $ make khadas-vim3l_defconfig 55 $ make 56 57Image creation 58-------------- 59 60Amlogic doesn't provide sources for the firmware and for tools needed 61to create the bootloader image, so it is necessary to obtain them from 62the git tree published by the board vendor: 63 64.. code-block:: bash 65 66 $ wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz 67 $ wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz 68 $ tar xvfJ gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz 69 $ tar xvfJ gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz 70 $ 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 71 72 $ DIR=vim3l-u-boot 73 $ git clone --depth 1 \ 74 https://github.com/khadas/u-boot.git -b khadas-vims-v2015.01 \ 75 $DIR 76 77 $ cd vim3l-u-boot 78 $ make kvim3l_defconfig 79 $ make CROSS_COMPILE=aarch64-none-elf- 80 $ export UBOOTDIR=$PWD 81 82Go back to mainline U-Boot source tree then : 83 84.. code-block:: bash 85 86 $ mkdir fip 87 88 $ wget https://github.com/BayLibre/u-boot/releases/download/v2017.11-libretech-cc/blx_fix_g12a.sh -O fip/blx_fix.sh 89 $ cp $UBOOTDIR/build/scp_task/bl301.bin fip/ 90 $ cp $UBOOTDIR/build/board/khadas/kvim3l/firmware/acs.bin fip/ 91 $ cp $UBOOTDIR/fip/g12a/bl2.bin fip/ 92 $ cp $UBOOTDIR/fip/g12a/bl30.bin fip/ 93 $ cp $UBOOTDIR/fip/g12a/bl31.img fip/ 94 $ cp $UBOOTDIR/fip/g12a/ddr3_1d.fw fip/ 95 $ cp $UBOOTDIR/fip/g12a/ddr4_1d.fw fip/ 96 $ cp $UBOOTDIR/fip/g12a/ddr4_2d.fw fip/ 97 $ cp $UBOOTDIR/fip/g12a/diag_lpddr4.fw fip/ 98 $ cp $UBOOTDIR/fip/g12a/lpddr3_1d.fw fip/ 99 $ cp $UBOOTDIR/fip/g12a/lpddr4_1d.fw fip/ 100 $ cp $UBOOTDIR/fip/g12a/lpddr4_2d.fw fip/ 101 $ cp $UBOOTDIR/fip/g12a/piei.fw fip/ 102 $ cp $UBOOTDIR/fip/g12a/aml_ddr.fw fip/ 103 $ cp u-boot.bin fip/bl33.bin 104 105 $ bash fip/blx_fix.sh \ 106 fip/bl30.bin \ 107 fip/zero_tmp \ 108 fip/bl30_zero.bin \ 109 fip/bl301.bin \ 110 fip/bl301_zero.bin \ 111 fip/bl30_new.bin \ 112 bl30 113 114 $ bash fip/blx_fix.sh \ 115 fip/bl2.bin \ 116 fip/zero_tmp \ 117 fip/bl2_zero.bin \ 118 fip/acs.bin \ 119 fip/bl21_zero.bin \ 120 fip/bl2_new.bin \ 121 bl2 122 123 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bl30sig --input fip/bl30_new.bin \ 124 --output fip/bl30_new.bin.g12a.enc \ 125 --level v3 126 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bl3sig --input fip/bl30_new.bin.g12a.enc \ 127 --output fip/bl30_new.bin.enc \ 128 --level v3 --type bl30 129 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bl3sig --input fip/bl31.img \ 130 --output fip/bl31.img.enc \ 131 --level v3 --type bl31 132 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bl3sig --input fip/bl33.bin --compress lz4 \ 133 --output fip/bl33.bin.enc \ 134 --level v3 --type bl33 --compress lz4 135 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bl2sig --input fip/bl2_new.bin \ 136 --output fip/bl2.n.bin.sig 137 $ $UBOOTDIR/fip/g12a/aml_encrypt_g12a --bootmk \ 138 --output fip/u-boot.bin \ 139 --bl2 fip/bl2.n.bin.sig \ 140 --bl30 fip/bl30_new.bin.enc \ 141 --bl31 fip/bl31.img.enc \ 142 --bl33 fip/bl33.bin.enc \ 143 --ddrfw1 fip/ddr4_1d.fw \ 144 --ddrfw2 fip/ddr4_2d.fw \ 145 --ddrfw3 fip/ddr3_1d.fw \ 146 --ddrfw4 fip/piei.fw \ 147 --ddrfw5 fip/lpddr4_1d.fw \ 148 --ddrfw6 fip/lpddr4_2d.fw \ 149 --ddrfw7 fip/diag_lpddr4.fw \ 150 --ddrfw8 fip/aml_ddr.fw \ 151 --ddrfw9 fip/lpddr3_1d.fw \ 152 --level v3 153 154and then write the image to SD with: 155 156.. code-block:: bash 157 158 $ DEV=/dev/your_sd_device 159 $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1 160 $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=444 161