1f9a9fc6fSPeter GriffinIntroduction 2f9a9fc6fSPeter Griffin============ 3f9a9fc6fSPeter Griffin 4f9a9fc6fSPeter GriffinHiKey is the first certified 96Boards Consumer Edition board. The board/SoC has: - 5f9a9fc6fSPeter Griffin* HiSilicon Kirin 6220 eight-core ARM Cortex-A53 64-bit SoC running at 1.2GHz. 6f9a9fc6fSPeter Griffin* ARM Mali 450-MP4 GPU 7f9a9fc6fSPeter Griffin* 1GB 800MHz LPDDR3 DRAM 8f9a9fc6fSPeter Griffin* 4GB eMMC Flash Storage 9f9a9fc6fSPeter Griffin* microSD 10f9a9fc6fSPeter Griffin* 802.11a/b/g/n WiFi, Bluetooth 11f9a9fc6fSPeter Griffin 12f9a9fc6fSPeter GriffinThe HiKey schematic can be found here: - 13*a81f663fSManivannan Sadhasivamhttps://github.com/96boards/documentation/blob/master/consumer/hikey/hikey620/hardware-docs/HiKey_schematics_LeMaker_version_Rev_A1.pdf 14f9a9fc6fSPeter Griffin 15*a81f663fSManivannan SadhasivamThe SoC datasheet can be found here: - 16*a81f663fSManivannan Sadhasivamhttps://github.com/96boards/documentation/blob/master/consumer/hikey/hikey620/hardware-docs/Hi6220V100_Multi-Mode_Application_Processor_Function_Description.pdf 17f9a9fc6fSPeter Griffin 18f9a9fc6fSPeter GriffinCurrently the u-boot port supports: - 19f9a9fc6fSPeter Griffin* USB 20f9a9fc6fSPeter Griffin* eMMC 21f9a9fc6fSPeter Griffin* SD card 22f9a9fc6fSPeter Griffin* GPIO 23f9a9fc6fSPeter Griffin 24532d5203SPeter GriffinThe HiKey U-Boot port has been tested with l-loader, booting ATF, which then boots 25532d5203SPeter GriffinU-Boot as the bl33.bin executable. 26532d5203SPeter Griffin 27532d5203SPeter GriffinCompile from source 28532d5203SPeter Griffin=================== 29532d5203SPeter Griffin 30532d5203SPeter GriffinFirst get all the sources 31532d5203SPeter Griffin 32532d5203SPeter Griffin > mkdir -p ~/hikey/src ~/hikey/bin 33532d5203SPeter Griffin > cd ~/hikey/src 34*a81f663fSManivannan Sadhasivam > git clone https://github.com/96boards-hikey/edk2 -b testing/hikey960_v2.5 35*a81f663fSManivannan Sadhasivam > git clone https://github.com/ARM-software/arm-trusted-firmware 36*a81f663fSManivannan Sadhasivam > git clone https://github.com/96boards-hikey/l-loader -b testing/hikey960_v1.2 37*a81f663fSManivannan Sadhasivam > git clone https://github.com/96boards-hikey/OpenPlatformPkg -b testing/hikey960_v1.3.4 38*a81f663fSManivannan Sadhasivam > git clone https://github.com/96boards-hikey/atf-fastboot 39*a81f663fSManivannan Sadhasivam > wget https://snapshots.linaro.org/96boards/reference-platform/components/uefi-staging/latest/hikey/release/hisi-idt.py 40532d5203SPeter Griffin 41532d5203SPeter GriffinGet the BL30 mcuimage.bin binary. It is shipped as part of the UEFI source. 42*a81f663fSManivannan SadhasivamThe latest version can be obtained from the OpenPlatformPkg repo. 43532d5203SPeter Griffin 44*a81f663fSManivannan Sadhasivam > cp OpenPlatformPkg/Platforms/Hisilicon/HiKey/Binary/mcuimage.bin ~/hikey/bin/ 45532d5203SPeter Griffin 46*a81f663fSManivannan SadhasivamGet nvme.img binary 47*a81f663fSManivannan Sadhasivam > wget -P ~/hikey/bin https://snapshots.linaro.org/96boards/reference-platform/components/uefi-staging/latest/hikey/release/nvme.img 48532d5203SPeter Griffin 49532d5203SPeter GriffinCompile U-Boot 50f9a9fc6fSPeter Griffin============== 51f9a9fc6fSPeter Griffin 52532d5203SPeter Griffin > cd ~/hikey/src/u-boot 539c71a21dSPeter Griffin > make CROSS_COMPILE=aarch64-linux-gnu- hikey_config 549c71a21dSPeter Griffin > make CROSS_COMPILE=aarch64-linux-gnu- 55532d5203SPeter Griffin > cp u-boot.bin ~/hikey/bin 56f9a9fc6fSPeter Griffin 57532d5203SPeter GriffinCompile ARM Trusted Firmware (ATF) 58532d5203SPeter Griffin================================== 59f9a9fc6fSPeter Griffin 60a83afb6bSMichal Simek > cd ~/hikey/src/arm-trusted-firmware 61532d5203SPeter Griffin > make CROSS_COMPILE=aarch64-linux-gnu- all fip \ 62*a81f663fSManivannan Sadhasivam SCP_BL2=~/hikey/bin/mcuimage.bin \ 63532d5203SPeter Griffin BL33=~/hikey/bin/u-boot.bin DEBUG=1 PLAT=hikey 64f9a9fc6fSPeter Griffin 65*a81f663fSManivannan SadhasivamCopy the resulting FIP binary 66532d5203SPeter Griffin > cp build/hikey/debug/fip.bin ~/hikey/bin 67f9a9fc6fSPeter Griffin 68*a81f663fSManivannan SadhasivamCompile ATF Fastboot 69*a81f663fSManivannan Sadhasivam==================== 70*a81f663fSManivannan Sadhasivam 71*a81f663fSManivannan Sadhasivam > cd ~/hikey/src/atf-fastboot 72*a81f663fSManivannan Sadhasivam > make CROSS_COMPILE=aarch64-linux-gnu- PLAT=hikey DEBUG=1 73*a81f663fSManivannan Sadhasivam 74532d5203SPeter GriffinCompile l-loader 75*a81f663fSManivannan Sadhasivam================ 76a83afb6bSMichal Simek > cd ~/hikey/src/l-loader 77*a81f663fSManivannan Sadhasivam > ln -sf ~/hikey/src/arm-trusted-firmware/build/hikey/debug/bl1.bin 78*a81f663fSManivannan Sadhasivam > ln -sf ~/hikey/src/arm-trusted-firmware/build/hikey/debug/bl2.bin 79*a81f663fSManivannan Sadhasivam > ln -sf ~/hikey/src/atf-fastboot/build/hikey/debug/bl1.bin fastboot.bin 80*a81f663fSManivannan Sadhasivam > make hikey PTABLE_LST=aosp-8g 81*a81f663fSManivannan Sadhasivam 82*a81f663fSManivannan SadhasivamCopy the resulting binaries 83532d5203SPeter Griffin > cp *.img ~/hikey/bin 84a83afb6bSMichal Simek > cp l-loader.bin ~/hikey/bin 85*a81f663fSManivannan Sadhasivam > cp recovery.bin ~/hikey/bin 86f9a9fc6fSPeter Griffin 87f9a9fc6fSPeter GriffinThese instructions are adapted from 88*a81f663fSManivannan Sadhasivamhttps://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/plat/hikey.rst 89f9a9fc6fSPeter Griffin 90f9a9fc6fSPeter GriffinFLASHING 91f9a9fc6fSPeter Griffin======== 92f9a9fc6fSPeter Griffin 939c71a21dSPeter Griffin1. Connect the second jumper on J15 BOOT SEL, to go into recovery mode and flash l-loader.bin with 94*a81f663fSManivannan Sadhasivamthe hisi-idt.py utility. Then connect a USB A to B mini cable from your PC to the USB OTG port of HiKey and execute the below command. 95f9a9fc6fSPeter Griffin 969c71a21dSPeter GriffinThe command below assumes HiKey enumerated as the first USB serial port 97f9a9fc6fSPeter Griffin 98*a81f663fSManivannan Sadhasivam > sudo python ~/hikey/src/hisi-idt.py -d /dev/ttyUSB0 --img1 ~/hikey/bin/recovery.bin 99*a81f663fSManivannan Sadhasivam 100*a81f663fSManivannan Sadhasivam2. Once LED 0 comes on solid, HiKey board should be detected as a fastboot device. 1019c71a21dSPeter Griffin 1029c71a21dSPeter Griffin > sudo fastboot devices 1039c71a21dSPeter Griffin 1049c71a21dSPeter Griffin0123456789ABCDEF fastboot 105f9a9fc6fSPeter Griffin 106f9a9fc6fSPeter Griffin3. Flash the images 107532d5203SPeter Griffin 108*a81f663fSManivannan Sadhasivam > sudo fastboot flash ptable ~/hikey/bin/prm_ptable.img 109*a81f663fSManivannan Sadhasivam > sudo fastboot flash loader ~/hikey/bin/l-loader.bin 110532d5203SPeter Griffin > sudo fastboot flash fastboot ~/hikey/bin/fip.bin 111532d5203SPeter Griffin > sudo fastboot flash nvme ~/hikey/bin/nvme.img 112f9a9fc6fSPeter Griffin 1139c71a21dSPeter Griffin4. Disconnect second jumper on J15 BOOT SEL, and reset the board and you will now (hopefully) 114*a81f663fSManivannan Sadhasivam have ATF, booting u-boot from eMMC. 115f9a9fc6fSPeter Griffin 1169c71a21dSPeter Griffin Note: To get USB host working, also disconnect the USB OTG cable used for flashing. Otherwise you 1179c71a21dSPeter Griffin will get 'dwc_otg_core_host_init: Timeout!' errors. 1189c71a21dSPeter Griffin 119*a81f663fSManivannan SadhasivamSee working boot trace below on UART3 available at Low Speed Expansion header: - 120f9a9fc6fSPeter Griffin 121*a81f663fSManivannan SadhasivamNOTICE: BL2: v1.5(debug):v1.5-694-g6d4f6aea 122*a81f663fSManivannan SadhasivamNOTICE: BL2: Built : 09:21:42, Aug 29 2018 123*a81f663fSManivannan SadhasivamINFO: BL2: Doing platform setup 124f9a9fc6fSPeter GriffinINFO: ddr3 rank1 init pass 125*a81f663fSManivannan SadhasivamINFO: succeed to set ddrc 150mhz 126f9a9fc6fSPeter GriffinINFO: ddr3 rank1 init pass 127*a81f663fSManivannan SadhasivamINFO: succeed to set ddrc 266mhz 128*a81f663fSManivannan SadhasivamINFO: ddr3 rank1 init pass 129*a81f663fSManivannan SadhasivamINFO: succeed to set ddrc 400mhz 130*a81f663fSManivannan SadhasivamINFO: ddr3 rank1 init pass 131*a81f663fSManivannan SadhasivamINFO: succeed to set ddrc 533mhz 132*a81f663fSManivannan SadhasivamINFO: ddr3 rank1 init pass 133*a81f663fSManivannan SadhasivamINFO: succeed to set ddrc 800mhz 134*a81f663fSManivannan SadhasivamINFO: Samsung DDR 1359c71a21dSPeter GriffinINFO: ddr test value:0xa5a55a5a 136*a81f663fSManivannan SadhasivamINFO: BL2: TrustZone: protecting 16777216 bytes of memory at 0x3f000000 137*a81f663fSManivannan SadhasivamINFO: BL2: TrustZone: protecting 4194304 bytes of memory at 0x3e800000 138f9a9fc6fSPeter GriffinINFO: [BDID] [fff91c18] midr: 0x410fd033 139f9a9fc6fSPeter GriffinINFO: init_acpu_dvfs: pmic version 17 140f9a9fc6fSPeter GriffinINFO: init_acpu_dvfs: ACPU_CHIP_MAX_FREQ=0x186a00. 141f9a9fc6fSPeter GriffinINFO: acpu_dvfs_volt_init: success! 142f9a9fc6fSPeter GriffinINFO: acpu_dvfs_set_freq: support freq num is 5 143f9a9fc6fSPeter GriffinINFO: acpu_dvfs_set_freq: start prof is 0x4 144f9a9fc6fSPeter GriffinINFO: acpu_dvfs_set_freq: magic is 0x5a5ac5c5 145f9a9fc6fSPeter GriffinINFO: acpu_dvfs_set_freq: voltage: 1469c71a21dSPeter GriffinINFO: - 0: 0x49 1479c71a21dSPeter GriffinINFO: - 1: 0x49 1489c71a21dSPeter GriffinINFO: - 2: 0x50 1499c71a21dSPeter GriffinINFO: - 3: 0x60 1509c71a21dSPeter GriffinINFO: - 4: 0x78 151*a81f663fSManivannan SadhasivamNOTICE: acpu_dvfs_set_freq: set acpu freq success!INFO: BL2: Loading image id 2 152*a81f663fSManivannan SadhasivamINFO: Loading image id=2 at address 0x1000000 153*a81f663fSManivannan SadhasivamINFO: Image id=2 loaded: 0x1000000 - 0x1023d00 1549c71a21dSPeter GriffinINFO: hisi_mcu_load_image: mcu sections 0: 1559c71a21dSPeter GriffinINFO: hisi_mcu_load_image: src = 0x1000200 1569c71a21dSPeter GriffinINFO: hisi_mcu_load_image: dst = 0xf6000000 157*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: size = 31184 158*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [SRC 0x1000200] 0x8000 0x3701 0x7695 0x7689 159*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [DST 0xf6000000] 0x8000 0x3701 0x7695 0x7689 1609c71a21dSPeter GriffinINFO: hisi_mcu_load_image: mcu sections 1: 161*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: src = 0x1007bd0 1629c71a21dSPeter GriffinINFO: hisi_mcu_load_image: dst = 0x5e00000 163*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: size = 93828 164*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [SRC 0x1007bd0] 0xf000b510 0x2103fb3d 0xf0004604 0xf003fb57 165*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [DST 0x5e00000] 0xf000b510 0x2103fb3d 0xf0004604 0xf003fb57 166*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: mcu sections 2: 167*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: src = 0x101ea54 168*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: dst = 0x5e16e84 169*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: size = 15428 170*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [SRC 0x101ea54] 0x9 0x1020640 0x10001 0x8f0d180 171*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [DST 0x5e16e84] 0x9 0x1020640 0x10001 0x8f0d180 172*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: mcu sections 3: 173*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: src = 0x1022698 174*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: dst = 0x5e22a10 1759c71a21dSPeter GriffinINFO: hisi_mcu_load_image: size = 3060 176*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [SRC 0x1022698] 0x0 0x0 0x0 0x0 177*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [DST 0x5e22a10] 0x0 0x0 0x0 0x0 178*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: mcu sections 4: 179*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: src = 0x102328c 180*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: dst = 0x5e23604 1819c71a21dSPeter GriffinINFO: hisi_mcu_load_image: size = 2616 182*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [SRC 0x102328c] 0xf80000a0 0x0 0xf80000ac 0x0 183*a81f663fSManivannan SadhasivamINFO: hisi_mcu_load_image: [DST 0x5e23604] 0xf80000a0 0x0 0xf80000ac 0x0 1849c71a21dSPeter GriffinINFO: hisi_mcu_start_run: AO_SC_SYS_CTRL2=0 185*a81f663fSManivannan SadhasivamINFO: plat_hikey_bl2_handle_scp_bl2: MCU PC is at 0x42933301 186*a81f663fSManivannan SadhasivamINFO: plat_hikey_bl2_handle_scp_bl2: AO_SC_PERIPH_CLKSTAT4 is 0x3b018f09 187*a81f663fSManivannan SadhasivamWARNING: BL2: Platform setup already done!! 188*a81f663fSManivannan SadhasivamINFO: BL2: Loading image id 3 189*a81f663fSManivannan SadhasivamINFO: Loading image id=3 at address 0xf9858000 190*a81f663fSManivannan SadhasivamINFO: Image id=3 loaded: 0xf9858000 - 0xf9860058 191*a81f663fSManivannan SadhasivamINFO: BL2: Loading image id 5 192*a81f663fSManivannan SadhasivamINFO: Loading image id=5 at address 0x35000000 193*a81f663fSManivannan SadhasivamINFO: Image id=5 loaded: 0x35000000 - 0x35061cd2 194*a81f663fSManivannan SadhasivamNOTICE: BL2: Booting BL31 195*a81f663fSManivannan SadhasivamINFO: Entry point address = 0xf9858000 196*a81f663fSManivannan SadhasivamINFO: SPSR = 0x3cd 197*a81f663fSManivannan SadhasivamNOTICE: BL31: v1.5(debug):v1.5-694-g6d4f6aea 198*a81f663fSManivannan SadhasivamNOTICE: BL31: Built : 09:21:44, Aug 29 2018 199*a81f663fSManivannan SadhasivamWARNING: Using deprecated integer interrupt array in gicv2_driver_data_t 200*a81f663fSManivannan SadhasivamWARNING: Please migrate to using an interrupt_prop_t array 201*a81f663fSManivannan SadhasivamINFO: ARM GICv2 driver initialized 202*a81f663fSManivannan SadhasivamINFO: BL31: Initializing runtime services 203*a81f663fSManivannan SadhasivamINFO: BL31: cortex_a53: CPU workaround for disable_non_temporal_hint was applied 204*a81f663fSManivannan SadhasivamINFO: BL31: cortex_a53: CPU workaround for 843419 was applied 205*a81f663fSManivannan SadhasivamINFO: BL31: cortex_a53: CPU workaround for 855873 was applied 206*a81f663fSManivannan SadhasivamINFO: BL31: Preparing for EL3 exit to normal world 207*a81f663fSManivannan SadhasivamINFO: Entry point address = 0x35000000 208*a81f663fSManivannan SadhasivamINFO: SPSR = 0x3c9 209f9a9fc6fSPeter Griffin 210f9a9fc6fSPeter Griffin 211*a81f663fSManivannan SadhasivamU-Boot 2018.09-rc1 (Aug 22 2018 - 14:55:49 +0530)hikey 212*a81f663fSManivannan Sadhasivam 213*a81f663fSManivannan SadhasivamDRAM: 990 MiB 2149c71a21dSPeter GriffinHI6553 PMIC init 215*a81f663fSManivannan SadhasivamMMC: config_sd_carddetect: SD card present 216*a81f663fSManivannan SadhasivamHisilicon DWMMC: 0, Hisilicon DWMMC: 1 217*a81f663fSManivannan SadhasivamLoading Environment from FAT... Unable to use mmc 1:1... Failed (-5) 218*a81f663fSManivannan SadhasivamIn: uart@f7113000 219*a81f663fSManivannan SadhasivamOut: uart@f7113000 220*a81f663fSManivannan SadhasivamErr: uart@f7113000 221f9a9fc6fSPeter GriffinNet: Net Initialization Skipped 222f9a9fc6fSPeter GriffinNo ethernet found. 223f9a9fc6fSPeter GriffinHit any key to stop autoboot: 0 2249c71a21dSPeter Griffinstarting USB... 225*a81f663fSManivannan SadhasivamUSB0: scanning bus 0 for devices... 2 USB Device(s) found 2269c71a21dSPeter Griffin scanning usb for storage devices... 0 Storage Device(s) found 2279c71a21dSPeter Griffin scanning usb for ethernet devices... 0 Ethernet Device(s) found 228