u-boot/board/hisilicon/hikey
Peter Griffin 9c71bcdc81 ARM: hikey: hi6220: Migrate over to DM_SERIAL and use UART3 by default.
Use DM for the pl01x serial driver on hikey. Also allow UART0 or
UART3 to be chosen via Kconfig.

By default we now output to UART3 as the latest version of ATF outputs
to this UART. Also UART3 comes out on the LS connector, as opposed to
UART0 which goes to a unpopulated header.

As part of this change we also enable CONFIG_BOARD_EARLY_INIT_F and
call the pinmux configuration code for the UART. Before we were
relying on ATF having already configured the pin configuration.

NB: Upstream Linux kernel doesn't yet support UART3, so serial console
will still be output on UART0 when booting a upstream kernel.

Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
2015-09-28 10:48:22 -04:00
..
build-tf.mak ARM: hikey: Add ATF makefile referenced by README 2015-09-28 10:48:20 -04:00
hikey.c ARM: hikey: hi6220: Migrate over to DM_SERIAL and use UART3 by default. 2015-09-28 10:48:22 -04:00
Kconfig ARM: hikey: hi6220: Migrate over to DM_SERIAL and use UART3 by default. 2015-09-28 10:48:22 -04:00
Makefile
README ARM: hikey: Update README with various corrections 2015-09-28 10:48:20 -04:00

Introduction
============

HiKey is the first certified 96Boards Consumer Edition board. The board/SoC has: -
* HiSilicon Kirin 6220 eight-core ARM Cortex-A53 64-bit SoC running at 1.2GHz.
* ARM Mali 450-MP4 GPU
* 1GB 800MHz LPDDR3 DRAM
* 4GB eMMC Flash Storage
* microSD
* 802.11a/b/g/n WiFi, Bluetooth

The HiKey schematic can be found here: -
https://github.com/96boards/documentation/blob/master/hikey/96Boards-Hikey-Rev-A1.pdf

A SoC datasheet can be found here: -
https://github.com/96boards/documentation/blob/master/hikey/
Hi6220V100_Multi-Mode_Application_Processor_Function_Description.pdf

Currently the u-boot port supports: -
* USB
* eMMC
* SD card
* GPIO

Compile u-boot
==============

  > mkdir -p ./aarch64/bin
  > cd ./aarch64
  > git clone http://git.denx.de/u-boot.git
  > make CROSS_COMPILE=aarch64-linux-gnu- hikey_config
  > make CROSS_COMPILE=aarch64-linux-gnu-
  > cp u-boot.bin ./aarch64/bin/u-boot-hikey.bin

ARM Trusted Firmware (ATF) & l-loader
=====================================

This u-boot port has been tested with l-loader, booting ATF, which then boots
u-boot as the bl33.bin executable.

Get the BL30 mcu binary.
  > wget -P aarch64/bin https://builds.96boards.org/releases/hikey/linaro/binaries/15.05/mcuimage.bin

1. Get ATF source code
  > cd ./aarch64
  > git clone https://github.com/96boards/arm-trusted-firmware.git
  > cd ./arm-trusted-firmware

2. Compile ATF, I use the build-tf.mak in the directory with this README, and copy it to ATF directory
  > cp ../u-boot/board/hisilicon/hikey/build-tf.mak .
  > make -f  build-tf.mak build

3. Get l-loader
  > cd ../
  > git clone https://github.com/96boards/l-loader.git
  > cd ./l-loader

4. Make sym links to ATF bl1 / fip binaries
  > ln -s ../bin/bl1-hikey.bin bl1.bin
  > ln -s ../bin/fip-hikey.bin fip.bin

  > arm-linux-gnueabihf-gcc -c -o start.o start.S
  > arm-linux-gnueabihf-gcc -c -o debug.o debug.S
  > arm-linux-gnueabihf-ld -Bstatic -Tl-loader.lds -Ttext 0xf9800800 start.o debug.o -o loader
  > arm-linux-gnueabihf-objcopy -O binary loader temp
  > python gen_loader.py -o ../bin/l-loader.bin --img_loader=temp --img_bl1=bl1.bin
  > sudo bash -x generate_ptable.sh
  > python gen_loader.py -o ../bin/ptable.img --img_prm_ptable=./prm_ptable.img --img_sec_ptable=./sec_ptable.img

These instructions are adapted from
https://github.com/96boards/documentation/wiki/HiKeyUEFI

FLASHING
========

1. Connect the second jumper on J15 BOOT SEL, to go into recovery mode and flash l-loader.bin with
fastboot using the hisi-idt.py utility.

  > cd ../
  > git clone https://github.com/96boards/burn-boot.git

The command below assumes HiKey enumerated as the first USB serial port
  > sudo ./burn-boot/hisi-idt.py -d /dev/ttyUSB0 --img1=./bin/l-loader.bin

2. Once LED 0 comes on solid, it should be detected as a fastboot device by plugging a USB A to mini B
   cable from your PC to the USB OTG port of HiKey (on some boards I've found this to be unreliable).

  > sudo fastboot devices

0123456789ABCDEF	fastboot

3. Flash the images
  > wget -P aarch64/bin wget https://builds.96boards.org/releases/hikey/linaro/binaries/latest/nvme.img
  > sudo fastboot flash ptable ./bin/ptable.img
  > sudo fastboot flash fastboot ./bin/fip-hikey.bin
  > sudo fastboot flash nvme ./bin/nvme.img

4. Disconnect second jumper on J15 BOOT SEL, and reset the board and you will now (hopefully)
   have ATF, booting u-boot from eMMC. On 'new' boards I've had to do the
   flashing twice in the past to avoid an ATF error.

   Note: To get USB host working, also disconnect the USB OTG cable used for flashing. Otherwise you
   will get 'dwc_otg_core_host_init: Timeout!' errors.

See working boot trace below: -

debug EMMC boot: send RST_N .
debug EMMC boot: start eMMC boot......
load fastboot1!

Switch to aarch64 mode. CPU0 executes at 0xf9801000!

INFO:    BL1: 0xf9810000 - 0xf9817000 [size = 28672]
NOTICE:  Booting Trusted Firmware
NOTICE:  BL1: v1.1(debug):e8b7174
NOTICE:  BL1: Built : 19:16:44, Sep  8 2015
INFO:    BL1: RAM 0xf9810000 - 0xf9817000
NOTICE:  syspll frequency:1190494208Hz
NOTICE:  succeed to init lpddr3 rank0 dram phy
INFO:    lpddr3_freq_init, set ddrc 533mhz
INFO:    init ddr3 rank0
INFO:    ddr3 rank1 init pass
INFO:    lpddr3_freq_init, set ddrc 800mhz
INFO:    init ddr3 rank0
INFO:    ddr3 rank1 init pass
INFO:    Elpida DDR
INFO:    ddr test value:0xa5a55a5a
INFO:    Hisilicon HiKey platform is initialized
INFO:    Using FIP
INFO:    Loading file 'bl2.bin' at address 0xf9818000
INFO:    File 'bl2.bin' loaded: 0xf9818000 - 0xf9821100
NOTICE:  BL1: Booting BL2
INFO:    BL1: BL2 address = 0xf9818000
INFO:    BL1: BL2 spsr = 0x3c5
INFO:    [BDID] [fff91c18] midr: 0x410fd033
INFO:    [BDID] [fff91c1c] board type: 0
INFO:    [BDID] [fff91c20] board id: 0x2b
INFO:    init_acpu_dvfs: pmic version 17
INFO:    init_acpu_dvfs: ACPU_CHIP_MAX_FREQ=0x186a00.
INFO:    acpu_dvfs_volt_init: success!
INFO:    acpu_dvfs_set_freq: support freq num is 5
INFO:    acpu_dvfs_set_freq: start prof is 0x4
INFO:    acpu_dvfs_set_freq: magic is 0x5a5ac5c5
INFO:    acpu_dvfs_set_freq: voltage:
INFO:      - 0: 0x49
INFO:      - 1: 0x49
INFO:      - 2: 0x50
INFO:      - 3: 0x60
INFO:      - 4: 0x78
NOTICE:  acpu_dvfs_set_freq: set acpu freq success!NOTICE:  BL2: v1.1(debug):e8b7174
NOTICE:  BL2: Built : 19:16:46, Sep  8 2015
INFO:    BL2: Loading BL3-0
INFO:    Using FIP
INFO:    Loading file 'bl30.bin' at address 0x1000000
INFO:    Skip reserving memory: 0x1000000 - 0x1023270
INFO:    File 'bl30.bin' loaded: 0x1000000 - 0x1023270
INFO:    bl2_plat_handle_bl30: [1000000] 3a334d43 34313032 2f38302f 30203133
INFO:    bl2_plat_handle_bl30: [10000c8] 0 0 b 0
INFO:    bl2_plat_handle_bl30: [1000190] 17 0 0 0
INFO:    bl2_plat_handle_bl30: [1023260] 0 0 0 0
INFO:    hisi_mcu_load_image: mcu sections 0:
INFO:    hisi_mcu_load_image:  src  = 0x1000200
INFO:    hisi_mcu_load_image:  dst  = 0xf6000000
INFO:    hisi_mcu_load_image:  size = 512
INFO:    hisi_mcu_load_image:  [SRC 0x1000200] 0x7600 0x201 0x1eae1 0x1ea71
INFO:    hisi_mcu_load_image:  [DST 0xf6000000] 0x7600 0x201 0x1eae1 0x1ea71
INFO:    hisi_mcu_load_image: mcu sections 1:
INFO:    hisi_mcu_load_image:  src  = 0x1000400
INFO:    hisi_mcu_load_image:  dst  = 0xf6000200
INFO:    hisi_mcu_load_image:  size = 27828
INFO:    hisi_mcu_load_image:  [SRC 0x1000400] 0xbf00bf00 0x4815b672 0x48154780 0x60014915
INFO:    hisi_mcu_load_image:  [DST 0xf6000200] 0xbf00bf00 0x4815b672 0x48154780 0x60014915
INFO:    hisi_mcu_load_image: mcu sections 2:
INFO:    hisi_mcu_load_image:  src  = 0x10070b4
INFO:    hisi_mcu_load_image:  dst  = 0xf6007200
INFO:    hisi_mcu_load_image:  size = 1024
INFO:    hisi_mcu_load_image:  [SRC 0x10070b4] 0x55 0x0 0x0 0x0
INFO:    hisi_mcu_load_image:  [DST 0xf6007200] 0x55 0x0 0x0 0x0
INFO:    hisi_mcu_load_image: mcu sections 3:
INFO:    hisi_mcu_load_image:  src  = 0x10074b4
INFO:    hisi_mcu_load_image:  dst  = 0xfff8e000
INFO:    hisi_mcu_load_image:  size = 12704
INFO:    hisi_mcu_load_image:  [SRC 0x10074b4] 0x55 0x0 0x0 0x0
INFO:    hisi_mcu_load_image:  [DST 0xfff8e000] 0x55 0x0 0x0 0x0
INFO:    hisi_mcu_load_image: mcu sections 4:
INFO:    hisi_mcu_load_image:  src  = 0x100a654
INFO:    hisi_mcu_load_image:  dst  = 0x5e00000
INFO:    hisi_mcu_load_image:  size = 82912
INFO:    hisi_mcu_load_image:  [SRC 0x100a654] 0x4ff0e92d 0x2cc5f645 0x2600b0ab 0x2c7cf6c0
INFO:    hisi_mcu_load_image:  [DST 0x5e00000] 0x4ff0e92d 0x2cc5f645 0x2600b0ab 0x2c7cf6c0
INFO:    hisi_mcu_load_image: mcu sections 5:
INFO:    hisi_mcu_load_image:  src  = 0x101ea34
INFO:    hisi_mcu_load_image:  dst  = 0x5e143e0
INFO:    hisi_mcu_load_image:  size = 12816
INFO:    hisi_mcu_load_image:  [SRC 0x101ea34] 0x33323130 0x37363534 0x42413938 0x46454443
INFO:    hisi_mcu_load_image:  [DST 0x5e143e0] 0x33323130 0x37363534 0x42413938 0x46454443
INFO:    hisi_mcu_load_image: mcu sections 6:
INFO:    hisi_mcu_load_image:  src  = 0x1021c44
INFO:    hisi_mcu_load_image:  dst  = 0x5e1c1d0
INFO:    hisi_mcu_load_image:  size = 3060
INFO:    hisi_mcu_load_image:  [SRC 0x1021c44] 0x0 0x0 0x0 0x0
INFO:    hisi_mcu_load_image:  [DST 0x5e1c1d0] 0x0 0x0 0x0 0x0
INFO:    hisi_mcu_load_image: mcu sections 7:
INFO:    hisi_mcu_load_image:  src  = 0x1022838
INFO:    hisi_mcu_load_image:  dst  = 0x5e1cdc4
INFO:    hisi_mcu_load_image:  size = 2616
INFO:    hisi_mcu_load_image:  [SRC 0x1022838] 0xf80000a0 0x0 0xf80000ac 0x0
INFO:    hisi_mcu_load_image:  [DST 0x5e1cdc4] 0xf80000a0 0x0 0xf80000ac 0x0
INFO:    hisi_mcu_start_run: AO_SC_SYS_CTRL2=0
INFO:    bl2_plat_handle_bl30: mcu pc is 42933301
INFO:    bl2_plat_handle_bl30: AO_SC_PERIPH_CLKSTAT4	is 39018f09
INFO:    BL2: TrustZone: protecting 16777216 bytes of memory at 0x3f000000
INFO:    BL2: Loading BL3-1
INFO:    Using FIP
INFO:    Loading file 'bl31.bin' at address 0xf9858000
INFO:    File 'bl31.bin' loaded: 0xf9858000 - 0xf9861010
INFO:    BL2: Loading BL3-2
INFO:    Using FIP
WARNING: Failed to access image 'bl32.bin' (-1)
WARNING: Failed to load BL3-2 (-1)
INFO:    BL2: Loading BL3-3
INFO:    Using FIP
INFO:    Loading file 'bl33.bin' at address 0x35000000
INFO:    File 'bl33.bin' loaded: 0x35000000 - 0x3504c468
NOTICE:  BL1: Booting BL3-1
INFO:    BL1: BL3-1 address = 0xf9858000
INFO:    BL1: BL3-1 spsr = 0x3cd
INFO:    BL1: BL3-1 params address = 0xf9821920
INFO:    BL1: BL3-1 plat params address = 0x0
NOTICE:  BL3-1: v1.1(debug):e8b7174
NOTICE:  BL3-1: Built : 19:16:49, Sep  8 2015
INFO:    BL3-1: Initializing runtime services
INFO:    BL3-1: Preparing for EL3 exit to normal world
INFO:    BL3-1: Next image address = 0x35000000
INFO:    BL3-1: Next image spsr = 0x3c9

U-Boot 2015.10-rc2 (Sep 08 2015 - 20:29:33 +0100)hikey

DRAM:  1008 MiB
HI6553 PMIC init
MMC:   config_sd_carddetect: SD card not present
HiKey DWMMC: 0, HiKey DWMMC: 1
Card did not respond to voltage select!
** Bad device mmc 1 **
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0
starting USB...
USB0:   Core Release: 3.00a
scanning bus 0 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
       scanning usb for ethernet devices... 0 Ethernet Device(s) found