1Introduction
2============
3
4HiKey is the first certified 96Boards Consumer Edition board. The board/SoC has: -
5* HiSilicon Kirin 6220 eight-core ARM Cortex-A53 64-bit SoC running at 1.2GHz.
6* ARM Mali 450-MP4 GPU
7* 1GB 800MHz LPDDR3 DRAM
8* 4GB eMMC Flash Storage
9* microSD
10* 802.11a/b/g/n WiFi, Bluetooth
11
12The HiKey schematic can be found here: -
13https://github.com/96boards/documentation/blob/master/consumer/hikey/hikey620/hardware-docs/HiKey_schematics_LeMaker_version_Rev_A1.pdf
14
15The SoC datasheet can be found here: -
16https://github.com/96boards/documentation/blob/master/consumer/hikey/hikey620/hardware-docs/Hi6220V100_Multi-Mode_Application_Processor_Function_Description.pdf
17
18Currently the u-boot port supports: -
19* USB
20* eMMC
21* SD card
22* GPIO
23
24The HiKey U-Boot port has been tested with l-loader, booting ATF, which then boots
25U-Boot as the bl33.bin executable.
26
27Compile from source
28===================
29
30First get all the sources
31
32  > mkdir -p ~/hikey/src ~/hikey/bin
33  > cd ~/hikey/src
34  > git clone https://github.com/96boards-hikey/edk2 -b testing/hikey960_v2.5
35  > git clone https://github.com/ARM-software/arm-trusted-firmware
36  > git clone https://github.com/96boards-hikey/l-loader -b testing/hikey960_v1.2
37  > git clone https://github.com/96boards-hikey/OpenPlatformPkg -b testing/hikey960_v1.3.4
38  > git clone https://github.com/96boards-hikey/atf-fastboot
39  > wget https://snapshots.linaro.org/96boards/reference-platform/components/uefi-staging/latest/hikey/release/hisi-idt.py
40
41Get the BL30 mcuimage.bin binary. It is shipped as part of the UEFI source.
42The latest version can be obtained from the OpenPlatformPkg repo.
43
44  > cp OpenPlatformPkg/Platforms/Hisilicon/HiKey/Binary/mcuimage.bin ~/hikey/bin/
45
46Get nvme.img binary
47  > wget -P ~/hikey/bin https://snapshots.linaro.org/96boards/reference-platform/components/uefi-staging/latest/hikey/release/nvme.img
48
49Compile U-Boot
50==============
51
52  > cd ~/hikey/src/u-boot
53  > make CROSS_COMPILE=aarch64-linux-gnu- hikey_config
54  > make CROSS_COMPILE=aarch64-linux-gnu-
55  > cp u-boot.bin ~/hikey/bin
56
57Compile ARM Trusted Firmware (ATF)
58==================================
59
60  > cd ~/hikey/src/arm-trusted-firmware
61  > make CROSS_COMPILE=aarch64-linux-gnu- all fip \
62    SCP_BL2=~/hikey/bin/mcuimage.bin \
63    BL33=~/hikey/bin/u-boot.bin DEBUG=1 PLAT=hikey
64
65Copy the resulting FIP binary
66  > cp build/hikey/debug/fip.bin ~/hikey/bin
67
68Compile ATF Fastboot
69====================
70
71  > cd ~/hikey/src/atf-fastboot
72  > make CROSS_COMPILE=aarch64-linux-gnu- PLAT=hikey DEBUG=1
73
74Compile l-loader
75================
76  > cd ~/hikey/src/l-loader
77  > ln -sf ~/hikey/src/arm-trusted-firmware/build/hikey/debug/bl1.bin
78  > ln -sf ~/hikey/src/arm-trusted-firmware/build/hikey/debug/bl2.bin
79  > ln -sf ~/hikey/src/atf-fastboot/build/hikey/debug/bl1.bin fastboot.bin
80  > make hikey PTABLE_LST=aosp-8g
81
82Copy the resulting binaries
83  > cp *.img ~/hikey/bin
84  > cp l-loader.bin ~/hikey/bin
85  > cp recovery.bin ~/hikey/bin
86
87These instructions are adapted from
88https://github.com/ARM-software/arm-trusted-firmware/blob/master/docs/plat/hikey.rst
89
90FLASHING
91========
92
931. Connect the second jumper on J15 BOOT SEL, to go into recovery mode and flash l-loader.bin with
94the 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.
95
96The command below assumes HiKey enumerated as the first USB serial port
97
98  > sudo python ~/hikey/src/hisi-idt.py -d /dev/ttyUSB0 --img1 ~/hikey/bin/recovery.bin
99
1002. Once LED 0 comes on solid, HiKey board should be detected as a fastboot device.
101
102  > sudo fastboot devices
103
1040123456789ABCDEF	fastboot
105
1063. Flash the images
107
108  > sudo fastboot flash ptable ~/hikey/bin/prm_ptable.img
109  > sudo fastboot flash loader ~/hikey/bin/l-loader.bin
110  > sudo fastboot flash fastboot ~/hikey/bin/fip.bin
111  > sudo fastboot flash nvme ~/hikey/bin/nvme.img
112
1134. Disconnect second jumper on J15 BOOT SEL, and reset the board and you will now (hopefully)
114   have ATF, booting u-boot from eMMC.
115
116   Note: To get USB host working, also disconnect the USB OTG cable used for flashing. Otherwise you
117   will get 'dwc_otg_core_host_init: Timeout!' errors.
118
119See working boot trace below on UART3 available at Low Speed Expansion header: -
120
121NOTICE:  BL2: v1.5(debug):v1.5-694-g6d4f6aea
122NOTICE:  BL2: Built : 09:21:42, Aug 29 2018
123INFO:    BL2: Doing platform setup
124INFO:    ddr3 rank1 init pass
125INFO:    succeed to set ddrc 150mhz
126INFO:    ddr3 rank1 init pass
127INFO:    succeed to set ddrc 266mhz
128INFO:    ddr3 rank1 init pass
129INFO:    succeed to set ddrc 400mhz
130INFO:    ddr3 rank1 init pass
131INFO:    succeed to set ddrc 533mhz
132INFO:    ddr3 rank1 init pass
133INFO:    succeed to set ddrc 800mhz
134INFO:    Samsung DDR
135INFO:    ddr test value:0xa5a55a5a
136INFO:    BL2: TrustZone: protecting 16777216 bytes of memory at 0x3f000000
137INFO:    BL2: TrustZone: protecting 4194304 bytes of memory at 0x3e800000
138INFO:    [BDID] [fff91c18] midr: 0x410fd033
139INFO:    init_acpu_dvfs: pmic version 17
140INFO:    init_acpu_dvfs: ACPU_CHIP_MAX_FREQ=0x186a00.
141INFO:    acpu_dvfs_volt_init: success!
142INFO:    acpu_dvfs_set_freq: support freq num is 5
143INFO:    acpu_dvfs_set_freq: start prof is 0x4
144INFO:    acpu_dvfs_set_freq: magic is 0x5a5ac5c5
145INFO:    acpu_dvfs_set_freq: voltage:
146INFO:      - 0: 0x49
147INFO:      - 1: 0x49
148INFO:      - 2: 0x50
149INFO:      - 3: 0x60
150INFO:      - 4: 0x78
151NOTICE:  acpu_dvfs_set_freq: set acpu freq success!INFO:    BL2: Loading image id 2
152INFO:    Loading image id=2 at address 0x1000000
153INFO:    Image id=2 loaded: 0x1000000 - 0x1023d00
154INFO:    hisi_mcu_load_image: mcu sections 0:
155INFO:    hisi_mcu_load_image:  src  = 0x1000200
156INFO:    hisi_mcu_load_image:  dst  = 0xf6000000
157INFO:    hisi_mcu_load_image:  size = 31184
158INFO:    hisi_mcu_load_image:  [SRC 0x1000200] 0x8000 0x3701 0x7695 0x7689
159INFO:    hisi_mcu_load_image:  [DST 0xf6000000] 0x8000 0x3701 0x7695 0x7689
160INFO:    hisi_mcu_load_image: mcu sections 1:
161INFO:    hisi_mcu_load_image:  src  = 0x1007bd0
162INFO:    hisi_mcu_load_image:  dst  = 0x5e00000
163INFO:    hisi_mcu_load_image:  size = 93828
164INFO:    hisi_mcu_load_image:  [SRC 0x1007bd0] 0xf000b510 0x2103fb3d 0xf0004604 0xf003fb57
165INFO:    hisi_mcu_load_image:  [DST 0x5e00000] 0xf000b510 0x2103fb3d 0xf0004604 0xf003fb57
166INFO:    hisi_mcu_load_image: mcu sections 2:
167INFO:    hisi_mcu_load_image:  src  = 0x101ea54
168INFO:    hisi_mcu_load_image:  dst  = 0x5e16e84
169INFO:    hisi_mcu_load_image:  size = 15428
170INFO:    hisi_mcu_load_image:  [SRC 0x101ea54] 0x9 0x1020640 0x10001 0x8f0d180
171INFO:    hisi_mcu_load_image:  [DST 0x5e16e84] 0x9 0x1020640 0x10001 0x8f0d180
172INFO:    hisi_mcu_load_image: mcu sections 3:
173INFO:    hisi_mcu_load_image:  src  = 0x1022698
174INFO:    hisi_mcu_load_image:  dst  = 0x5e22a10
175INFO:    hisi_mcu_load_image:  size = 3060
176INFO:    hisi_mcu_load_image:  [SRC 0x1022698] 0x0 0x0 0x0 0x0
177INFO:    hisi_mcu_load_image:  [DST 0x5e22a10] 0x0 0x0 0x0 0x0
178INFO:    hisi_mcu_load_image: mcu sections 4:
179INFO:    hisi_mcu_load_image:  src  = 0x102328c
180INFO:    hisi_mcu_load_image:  dst  = 0x5e23604
181INFO:    hisi_mcu_load_image:  size = 2616
182INFO:    hisi_mcu_load_image:  [SRC 0x102328c] 0xf80000a0 0x0 0xf80000ac 0x0
183INFO:    hisi_mcu_load_image:  [DST 0x5e23604] 0xf80000a0 0x0 0xf80000ac 0x0
184INFO:    hisi_mcu_start_run: AO_SC_SYS_CTRL2=0
185INFO:    plat_hikey_bl2_handle_scp_bl2: MCU PC is at 0x42933301
186INFO:    plat_hikey_bl2_handle_scp_bl2: AO_SC_PERIPH_CLKSTAT4 is 0x3b018f09
187WARNING: BL2: Platform setup already done!!
188INFO:    BL2: Loading image id 3
189INFO:    Loading image id=3 at address 0xf9858000
190INFO:    Image id=3 loaded: 0xf9858000 - 0xf9860058
191INFO:    BL2: Loading image id 5
192INFO:    Loading image id=5 at address 0x35000000
193INFO:    Image id=5 loaded: 0x35000000 - 0x35061cd2
194NOTICE:  BL2: Booting BL31
195INFO:    Entry point address = 0xf9858000
196INFO:    SPSR = 0x3cd
197NOTICE:  BL31: v1.5(debug):v1.5-694-g6d4f6aea
198NOTICE:  BL31: Built : 09:21:44, Aug 29 2018
199WARNING: Using deprecated integer interrupt array in gicv2_driver_data_t
200WARNING: Please migrate to using an interrupt_prop_t array
201INFO:    ARM GICv2 driver initialized
202INFO:    BL31: Initializing runtime services
203INFO:    BL31: cortex_a53: CPU workaround for disable_non_temporal_hint was applied
204INFO:    BL31: cortex_a53: CPU workaround for 843419 was applied
205INFO:    BL31: cortex_a53: CPU workaround for 855873 was applied
206INFO:    BL31: Preparing for EL3 exit to normal world
207INFO:    Entry point address = 0x35000000
208INFO:    SPSR = 0x3c9
209
210
211U-Boot 2018.09-rc1 (Aug 22 2018 - 14:55:49 +0530)hikey
212
213DRAM:  990 MiB
214HI6553 PMIC init
215MMC:   config_sd_carddetect: SD card present
216Hisilicon DWMMC: 0, Hisilicon DWMMC: 1
217Loading Environment from FAT... Unable to use mmc 1:1... Failed (-5)
218In:    uart@f7113000
219Out:   uart@f7113000
220Err:   uart@f7113000
221Net:   Net Initialization Skipped
222No ethernet found.
223Hit any key to stop autoboot:  0
224starting USB...
225USB0:   scanning bus 0 for devices... 2 USB Device(s) found
226       scanning usb for storage devices... 0 Storage Device(s) found
227       scanning usb for ethernet devices... 0 Ethernet Device(s) found
228