U-Boot for UniPhier SoC family
==============================


Recommended toolchains
----------------------

The UniPhier platform is well tested with Linaro toolchains.
You can download pre-built toolchains from:

    http://www.linaro.org/downloads/


Compile the source
------------------

The source can be configured and built with the following commands:

    $ make <defconfig>
    $ make CROSS_COMPILE=<toolchain-prefix> DEVICE_TREE=<device-tree>

The recommended <toolchain-prefix> is `arm-linux-gnueabihf-` for 32bit SoCs,
`aarch64-linux-gnu-` for 64bit SoCs, but you may wish to change it to use your
favorite compiler.

The following tables show <defconfig> and <device-tree> for each board.

32bit SoC boards:

 Board         | <defconfig>                 | <device-tree>
---------------|-----------------------------|------------------------------
LD4 reference  | uniphier_ld4_sld8_defconfig | uniphier-ld4-ref (default)
sld8 reference | uniphier_ld4_sld8_defconfig | uniphier-sld8-def
Pro4 reference | uniphier_v7_defconfig       | uniphier-pro4-ref
Pro4 Ace       | uniphier_v7_defconfig       | uniphier-pro4-ace
Pro4 Sanji     | uniphier_v7_defconfig       | uniphier-pro4-sanji
Pro5 4KBOX     | uniphier_v7_defconfig       | uniphier-pro5-4kbox
PXs2 Gentil    | uniphier_v7_defconfig       | uniphier-pxs2-gentil
PXs2 Vodka     | uniphier_v7_defconfig       | uniphier-pxs2-vodka (default)
LD6b reference | uniphier_v7_defconfig       | uniphier-ld6b-ref

64bit SoC boards:

 Board         | <defconfig>           | <device-tree>
---------------|-----------------------|----------------------------
LD11 reference | uniphier_v8_defconfig | uniphier-ld11-ref
LD11 Global    | uniphier_v8_defconfig | uniphier-ld11-global
LD20 reference | uniphier_v8_defconfig | uniphier-ld20-ref (default)
LD20 Global    | uniphier_v8_defconfig | uniphier-ld20-global
PXs3 reference | uniphier_v8_defconfig | uniphier-pxs3-ref

For example, to compile the source for PXs2 Vodka board, run the following:

    $ make uniphier_v7_defconfig
    $ make CROSS_COMPILE=arm-linux-gnueabihf- DEVICE_TREE=uniphier-pxs2-vodka

The device tree marked as (default) can be omitted.  `uniphier-pxs2-vodka` is
the default device tree for the configuration `uniphier_v7_defconfig`, so the
following gives the same result.

    $ make uniphier_v7_defconfig
    $ make CROSS_COMPILE=arm-linux-gnueabihf-


Booting 32bit SoC boards
------------------------

The build command will generate the following:
- u-boot.bin
- spl/u-boot.bin

U-Boot can boot UniPhier 32bit SoC boards by itself.  Flash the generated images
to the storage device (NAND or eMMC) on your board.

 - spl/u-boot-spl.bin at the offset address 0x00000000
 - u-boot.bin         at the offset address 0x00020000

The `u-boot-with-spl.bin` is the concatenation of the two (with appropriate
padding), so you can also do:

 - u-boot-with-spl.bin at the offset address 0x00000000

If a TFTP server is available, the images can be easily updated.
Just copy the u-boot-spl.bin and u-boot.bin to the TFTP public directory,
and run the following command at the U-Boot command line:

To update the images in NAND:

    => run nandupdate

To update the images in eMMC:

    => run emmcupdate


Booting 64bit SoC boards
------------------------

The build command will generate the following:
- u-boot.bin

However, U-Boot is not the first stage loader for UniPhier 64bit SoC boards.
U-Boot serves as a non-secure boot loader loaded by [ARM Trusted Firmware],
so you need to provide the `u-boot.bin` to the build command of ARM Trusted
Firmware.

[ARM Trusted Firmware]: https://github.com/ARM-software/arm-trusted-firmware


Verified Boot
-------------

U-Boot supports an image verification method called "Verified Boot".
This is a brief tutorial to utilize this feature for the UniPhier platform.
You will find details documents in the doc/uImage.FIT directory.

Here, we take LD20 reference board for example, but it should work for any
other boards including 32 bit SoCs.

1. Generate key to sign with

  $ mkdir keys
  $ openssl genpkey -algorithm RSA -out keys/dev.key \
    -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537
  $ openssl req -batch -new -x509 -key keys/dev.key -out keys/dev.crt

Two files "dev.key" and "dev.crt" will be created.  The base name is arbitrary,
but need to match to the "key-name-hint" property described below.

2. Describe FIT source

You need to write an FIT (Flattened Image Tree) source file to describe the
structure of the image container.

The following is an example for a simple usecase:

---------------------------------------->8----------------------------------------
/dts-v1/;

/ {
	description = "Kernel, DTB and Ramdisk for UniPhier LD20 Reference Board";
	#address-cells = <1>;

	images {
		kernel {
			description = "linux";
			data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/Image.gz");
			type = "kernel";
			arch = "arm64";
			os = "linux";
			compression = "gzip";
			load = <0x82080000>;
			entry = <0x82080000>;
			hash-1 {
				algo = "sha256";
			};
		};

		fdt-1 {
			description = "fdt";
			data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/dts/socionext/uniphier-ld20-ref.dtb");
			type = "flat_dt";
			arch = "arm64";
			compression = "none";
			hash-1 {
				algo = "sha256";
			};
		};

		ramdisk {
			description = "ramdisk";
			data = /incbin/("PATH/TO/YOUR/ROOTFS/DIR/rootfs.cpio");
			type = "ramdisk";
			arch = "arm64";
			os = "linux";
			compression = "none";
			hash-1 {
				algo = "sha256";
			};
		};
	};

	configurations {
		default = "config-1";

		config-1 {
			description = "Configuration0";
			kernel = "kernel";
			fdt = "fdt-1";
			ramdisk = "ramdisk";
			signature-1 {
				algo = "sha256,rsa2048";
				key-name-hint = "dev";
				sign-images = "kernel", "fdt", "ramdisk";
			};
		};
	};
};
---------------------------------------->8----------------------------------------

You need to change the three '/incbin/' lines, depending on the location of
your kernel image, device tree blob, and init ramdisk.  The "load" and "entry"
properties also need to be adjusted if you want to change the physical placement
of the kernel.

The "key-name-hint" must specify the key name you have created in the step 1.

The FIT file name is arbitrary.  Let's say you saved it into "fit.its".

3. Compile U-Boot with FIT and signature enabled

To use the Verified Boot, you need to enable the following two options:
  CONFIG_FIT
  CONFIG_FIT_SIGNATURE

They are disabled by default for UniPhier defconfig files.  So, you need to
tweak the configuration from "make menuconfig" or friends.

  $ make uniphier_v8_defconfig
  $ make menuconfig
      [ enable CONFIG_FIT and CONFIG_FIT_SIGNATURE ]
  $ make CROSS_COMPILE=aarch64-linux-gnu-

4. Build the image tree blob

After building U-Boot, you will see tools/mkimage.  With this tool, you can
create an image tree blob as follows:

  $ tools/mkimage -f fit.its -k keys -K dts/dt.dtb -r -F fitImage

The -k option must specify the key directory you have created in step 1.

A file "fitImage" will be created.  This includes kernel, DTB, Init-ramdisk,
hash data for each of the three, and signature data.

The public key needed for the run-time verification is stored in "dts/dt.dtb".

5. Compile U-Boot again

Since the "dt.dtb" has been updated in step 4, you need to re-compile the
U-Boot.

  $ make CROSS_COMPILE=aarch64-linux-gnu-

The re-compiled "u-boot.bin" is appended with DTB that contains the public key.

6. Flash the image

Flash the "fitImage" to a storage device (NAND, eMMC, or whatever) on your
board.

Please note the "u-boot.bin" must be signed, and verified by someone when it is
loaded.  For ARMv8 SoCs, the "someone" is generally ARM Trusted Firmware BL2.
ARM Trusted Firmware supports an image authentication mechanism called Trusted
Board Boot (TBB).  The verification process must be chained from the moment of
the system reset.  If the Chain of Trust has a breakage somewhere, the verified
boot process is entirely pointless.

7. Boot verified kernel

Load the fitImage to memory and run the following from the U-Boot command line.

  > bootm <addr>

Here, <addr> is the base address of the fitImage.

If it is successful, you will see messages like follows:

---------------------------------------->8----------------------------------------
## Loading kernel from FIT Image at 84100000 ...
   Using 'config-1' configuration
   Verifying Hash Integrity ... sha256,rsa2048:dev+ OK
   Trying 'kernel' kernel subimage
     Description:  linux
     Created:      2017-10-20  14:32:29 UTC
     Type:         Kernel Image
     Compression:  gzip compressed
     Data Start:   0x841000c8
     Data Size:    6957818 Bytes = 6.6 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: 0x82080000
     Entry Point:  0x82080000
     Hash algo:    sha256
     Hash value:   82a37b7f11ae55f4e07aa25bf77e4067cb9dc1014d52d6cd4d588f92eee3aaad
   Verifying Hash Integrity ... sha256+ OK
## Loading ramdisk from FIT Image at 84100000 ...
   Using 'config-1' configuration
   Trying 'ramdisk' ramdisk subimage
     Description:  ramdisk
     Created:      2017-10-20  14:32:29 UTC
     Type:         RAMDisk Image
     Compression:  uncompressed
     Data Start:   0x847a5cc0
     Data Size:    5264365 Bytes = 5 MiB
     Architecture: AArch64
     OS:           Linux
     Load Address: unavailable
     Entry Point:  unavailable
     Hash algo:    sha256
     Hash value:   44980a2874154a2e31ed59222c9f8ea968867637f35c81e4107a984de7014deb
   Verifying Hash Integrity ... sha256+ OK
## Loading fdt from FIT Image at 84100000 ...
   Using 'config-1' configuration
   Trying 'fdt-1' fdt subimage
     Description:  fdt
     Created:      2017-10-20  14:32:29 UTC
     Type:         Flat Device Tree
     Compression:  uncompressed
     Data Start:   0x847a2cb0
     Data Size:    12111 Bytes = 11.8 KiB
     Architecture: AArch64
     Hash algo:    sha256
     Hash value:   c517099db537f6d325e6be46b25c871a41331ad5af0283883fd29d40bfc14e1d
   Verifying Hash Integrity ... sha256+ OK
   Booting using the fdt blob at 0x847a2cb0
   Uncompressing Kernel Image ... OK
   reserving fdt memory region: addr=80000000 size=2000000
   Loading Device Tree to 000000009fffa000, end 000000009fffff4e ... OK

Starting kernel ...
---------------------------------------->8----------------------------------------

Please pay attention to the lines that start with "Verifying Hash Integrity".

"Verifying Hash Integrity ... sha256,rsa2048:dev+ OK" means the signature check
passed.

"Verifying Hash Integrity ... sha256+ OK" (3 times) means the hash check passed
for kernel, DTB, and Init ramdisk.

If they are not displayed, the Verified Boot is not working.


Deployment for Distro Boot
--------------------------

UniPhier SoC family boot the kernel in a generic manner as described in
doc/README.distro .

To boot the kernel, you need to deploy necesssary components to a file
system on one of your block devices (eMMC, NAND, USB drive, etc.).

The components depend on the kernel image format.

[1] Bare images

  - kernel
  - init ramdisk
  - device tree blob
  - boot configuration file (extlinux.conf)

Here is an exmple of the configuration file.

-------------------->8--------------------
menu title UniPhier Boot Options.

timeout 50
default UniPhier

label UniPhier
      kernel ../Image
      initrd ../rootfs.cpio.gz
      fdtdir ..
-------------------->8--------------------

Then, write 'Image', 'rootfs.cpio.gz', 'uniphier-ld20-ref.dtb' (DTB depends on
your board), and 'extlinux/extlinux.conf' to the file system.

[2] FIT

  - FIT blob
  - boot configuration file (extlinux.conf)

-------------------->8--------------------
menu title UniPhier Boot Options.

timeout 50
default UniPhier

label UniPhier
      kernel ../fitImage
-------------------->8--------------------

Since the init ramdisk and DTB are contained in the FIT blob,
you do not need to describe them in the configuration file.
Write 'fitImage' and 'extlinux/extlinux.conf' to the file system.


UniPhier specific commands
--------------------------

 - pinmon (enabled by CONFIG_CMD_PINMON)
     shows the boot mode pins that has been latched at the power-on reset

 - ddrphy (enabled by CONFIG_CMD_DDRPHY_DUMP)
     shows the DDR PHY parameters set by the PHY training

 - ddrmphy (enabled by CONFIG_CMD_DDRMPHY_DUMP)
     shows the DDR Multi PHY parameters set by the PHY training


Supported devices
-----------------

 - UART (on-chip)
 - NAND
 - SD/eMMC
 - USB 2.0 (EHCI)
 - USB 3.0 (xHCI)
 - GPIO
 - LAN (on-board SMSC9118)
 - I2C
 - EEPROM (connected to the on-board I2C bus)
 - Support card (SRAM, NOR flash, some peripherals)


Micro Support Card
------------------

The recommended bit switch settings are as follows:

 SW2    OFF(1)/ON(0)   Description
 ------------------------------------------
 bit 1   <----         BKSZ[0]
 bit 2   ---->         BKSZ[1]
 bit 3   <----         SoC Bus Width 16/32
 bit 4   <----         SERIAL_SEL[0]
 bit 5   ---->         SERIAL_SEL[1]
 bit 6   ---->         BOOTSWAP_EN
 bit 7   <----         CS1/CS5
 bit 8   <----         SOC_SERIAL_DISABLE

 SW8    OFF(1)/ON(0)   Description
 ------------------------------------------
 bit 1    <----        CS1_SPLIT
 bit 2    <----        CASE9_ON
 bit 3    <----        CASE10_ON
 bit 4  Don't Care     Reserve
 bit 5  Don't Care     Reserve
 bit 6  Don't Care     Reserve
 bit 7    ---->        BURST_EN
 bit 8    ---->        FLASHBUS32_16

The BKSZ[1:0] specifies the address range of memory slot and peripherals
as follows:

 BKSZ    Description              RAM slot            Peripherals
 --------------------------------------------------------------------
 0b00   15MB RAM / 1MB Peri    00000000-00efffff    00f00000-00ffffff
 0b01   31MB RAM / 1MB Peri    00000000-01efffff    01f00000-01ffffff
 0b10   64MB RAM / 1MB Peri    00000000-03efffff    03f00000-03ffffff
 0b11  127MB RAM / 1MB Peri    00000000-07efffff    07f00000-07ffffff

Set BSKZ[1:0] to 0b01 for U-Boot.
This mode is the most handy because EA[24] is always supported by the save pin
mode of the system bus.  On the other hand, EA[25] is not supported for some
newer SoCs.  Even if it is, EA[25] is not connected on most of the boards.

--
Masahiro Yamada <yamada.masahiro@socionext.com>
Oct. 2017
