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