1 U-Boot for UniPhier SoC family
2 ==============================
8 The UniPhier platform is well tested with Linaro toolchains.
9 You can download pre-built toolchains from:
11 http://www.linaro.org/downloads/
17 The source can be configured and built with the following commands:
20 $ make CROSS_COMPILE=<toolchain-prefix> DEVICE_TREE=<device-tree>
22 The recommended <toolchain-prefix> is `arm-linux-gnueabihf-` for 32bit SoCs,
23 `aarch64-linux-gnu-` for 64bit SoCs, but you may wish to change it to use your
26 The following tables show <defconfig> and <device-tree> for each board.
30 Board | <defconfig> | <device-tree>
31 ---------------|-----------------------------|------------------------------
32 LD4 reference | uniphier_ld4_sld8_defconfig | uniphier-ld4-ref (default)
33 sld8 reference | uniphier_ld4_sld8_defconfig | uniphier-sld8-def
34 Pro4 reference | uniphier_v7_defconfig | uniphier-pro4-ref
35 Pro4 Ace | uniphier_v7_defconfig | uniphier-pro4-ace
36 Pro4 Sanji | uniphier_v7_defconfig | uniphier-pro4-sanji
37 Pro5 4KBOX | uniphier_v7_defconfig | uniphier-pro5-4kbox
38 PXs2 Gentil | uniphier_v7_defconfig | uniphier-pxs2-gentil
39 PXs2 Vodka | uniphier_v7_defconfig | uniphier-pxs2-vodka (default)
40 LD6b reference | uniphier_v7_defconfig | uniphier-ld6b-ref
44 Board | <defconfig> | <device-tree>
45 ---------------|-----------------------|----------------------------
46 LD11 reference | uniphier_v8_defconfig | uniphier-ld11-ref
47 LD11 Global | uniphier_v8_defconfig | uniphier-ld11-global
48 LD20 reference | uniphier_v8_defconfig | uniphier-ld20-ref (default)
49 LD20 Global | uniphier_v8_defconfig | uniphier-ld20-global
50 PXs3 reference | uniphier_v8_defconfig | uniphier-pxs3-ref
52 For example, to compile the source for PXs2 Vodka board, run the following:
54 $ make uniphier_v7_defconfig
55 $ make CROSS_COMPILE=arm-linux-gnueabihf- DEVICE_TREE=uniphier-pxs2-vodka
57 The device tree marked as (default) can be omitted. `uniphier-pxs2-vodka` is
58 the default device tree for the configuration `uniphier_v7_defconfig`, so the
59 following gives the same result.
61 $ make uniphier_v7_defconfig
62 $ make CROSS_COMPILE=arm-linux-gnueabihf-
65 Booting 32bit SoC boards
66 ------------------------
68 The build command will generate the following:
72 U-Boot can boot UniPhier 32bit SoC boards by itself. Flash the generated images
73 to the storage device (NAND or eMMC) on your board.
75 - spl/u-boot-spl.bin at the offset address 0x00000000
76 - u-boot.bin at the offset address 0x00020000
78 The `u-boot-with-spl.bin` is the concatenation of the two (with appropriate
79 padding), so you can also do:
81 - u-boot-with-spl.bin at the offset address 0x00000000
83 If a TFTP server is available, the images can be easily updated.
84 Just copy the u-boot-spl.bin and u-boot.bin to the TFTP public directory,
85 and run the following command at the U-Boot command line:
87 To update the images in NAND:
91 To update the images in eMMC:
96 Booting 64bit SoC boards
97 ------------------------
99 The build command will generate the following:
102 However, U-Boot is not the first stage loader for UniPhier 64bit SoC boards.
103 U-Boot serves as a non-secure boot loader loaded by [ARM Trusted Firmware],
104 so you need to provide the `u-boot.bin` to the build command of ARM Trusted
107 [ARM Trusted Firmware]: https://github.com/ARM-software/arm-trusted-firmware
113 U-Boot supports an image verification method called "Verified Boot".
114 This is a brief tutorial to utilize this feature for the UniPhier platform.
115 You will find details documents in the doc/uImage.FIT directory.
117 Here, we take LD20 reference board for example, but it should work for any
118 other boards including 32 bit SoCs.
120 1. Generate key to sign with
123 $ openssl genpkey -algorithm RSA -out keys/dev.key \
124 -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:65537
125 $ openssl req -batch -new -x509 -key keys/dev.key -out keys/dev.crt
127 Two files "dev.key" and "dev.crt" will be created. The base name is arbitrary,
128 but need to match to the "key-name-hint" property described below.
130 2. Describe FIT source
132 You need to write an FIT (Flattened Image Tree) source file to describe the
133 structure of the image container.
135 The following is an example for a simple usecase:
137 ---------------------------------------->8----------------------------------------
141 description = "Kernel, DTB and Ramdisk for UniPhier LD20 Reference Board";
142 #address-cells = <1>;
146 description = "linux";
147 data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/Image.gz");
151 compression = "gzip";
153 entry = <0x82080000>;
161 data = /incbin/("PATH/TO/YOUR/LINUX/DIR/arch/arm64/boot/dts/socionext/uniphier-ld20-ref.dtb");
164 compression = "none";
171 description = "ramdisk";
172 data = /incbin/("PATH/TO/YOUR/ROOTFS/DIR/rootfs.cpio");
176 compression = "none";
184 default = "config-1";
187 description = "Configuration0";
192 algo = "sha256,rsa2048";
193 key-name-hint = "dev";
194 sign-images = "kernel", "fdt", "ramdisk";
199 ---------------------------------------->8----------------------------------------
201 You need to change the three '/incbin/' lines, depending on the location of
202 your kernel image, device tree blob, and init ramdisk. The "load" and "entry"
203 properties also need to be adjusted if you want to change the physical placement
206 The "key-name-hint" must specify the key name you have created in the step 1.
208 The FIT file name is arbitrary. Let's say you saved it into "fit.its".
210 3. Compile U-Boot with FIT and signature enabled
212 To use the Verified Boot, you need to enable the following two options:
216 They are disabled by default for UniPhier defconfig files. So, you need to
217 tweak the configuration from "make menuconfig" or friends.
219 $ make uniphier_v8_defconfig
221 [ enable CONFIG_FIT and CONFIG_FIT_SIGNATURE ]
222 $ make CROSS_COMPILE=aarch64-linux-gnu-
224 4. Build the image tree blob
226 After building U-Boot, you will see tools/mkimage. With this tool, you can
227 create an image tree blob as follows:
229 $ tools/mkimage -f fit.its -k keys -K dts/dt.dtb -r -F fitImage
231 The -k option must specify the key directory you have created in step 1.
233 A file "fitImage" will be created. This includes kernel, DTB, Init-ramdisk,
234 hash data for each of the three, and signature data.
236 The public key needed for the run-time verification is stored in "dts/dt.dtb".
238 5. Compile U-Boot again
240 Since the "dt.dtb" has been updated in step 4, you need to re-compile the
243 $ make CROSS_COMPILE=aarch64-linux-gnu-
245 The re-compiled "u-boot.bin" is appended with DTB that contains the public key.
249 Flash the "fitImage" to a storage device (NAND, eMMC, or whatever) on your
252 Please note the "u-boot.bin" must be signed, and verified by someone when it is
253 loaded. For ARMv8 SoCs, the "someone" is generally ARM Trusted Firmware BL2.
254 ARM Trusted Firmware supports an image authentication mechanism called Trusted
255 Board Boot (TBB). The verification process must be chained from the moment of
256 the system reset. If the Chain of Trust has a breakage somewhere, the verified
257 boot process is entirely pointless.
259 7. Boot verified kernel
261 Load the fitImage to memory and run the following from the U-Boot command line.
265 Here, <addr> is the base address of the fitImage.
267 If it is successful, you will see messages like follows:
269 ---------------------------------------->8----------------------------------------
270 ## Loading kernel from FIT Image at 84100000 ...
271 Using 'config-1' configuration
272 Verifying Hash Integrity ... sha256,rsa2048:dev+ OK
273 Trying 'kernel' kernel subimage
275 Created: 2017-10-20 14:32:29 UTC
277 Compression: gzip compressed
278 Data Start: 0x841000c8
279 Data Size: 6957818 Bytes = 6.6 MiB
280 Architecture: AArch64
282 Load Address: 0x82080000
283 Entry Point: 0x82080000
285 Hash value: 82a37b7f11ae55f4e07aa25bf77e4067cb9dc1014d52d6cd4d588f92eee3aaad
286 Verifying Hash Integrity ... sha256+ OK
287 ## Loading ramdisk from FIT Image at 84100000 ...
288 Using 'config-1' configuration
289 Trying 'ramdisk' ramdisk subimage
291 Created: 2017-10-20 14:32:29 UTC
293 Compression: uncompressed
294 Data Start: 0x847a5cc0
295 Data Size: 5264365 Bytes = 5 MiB
296 Architecture: AArch64
298 Load Address: unavailable
299 Entry Point: unavailable
301 Hash value: 44980a2874154a2e31ed59222c9f8ea968867637f35c81e4107a984de7014deb
302 Verifying Hash Integrity ... sha256+ OK
303 ## Loading fdt from FIT Image at 84100000 ...
304 Using 'config-1' configuration
305 Trying 'fdt-1' fdt subimage
307 Created: 2017-10-20 14:32:29 UTC
308 Type: Flat Device Tree
309 Compression: uncompressed
310 Data Start: 0x847a2cb0
311 Data Size: 12111 Bytes = 11.8 KiB
312 Architecture: AArch64
314 Hash value: c517099db537f6d325e6be46b25c871a41331ad5af0283883fd29d40bfc14e1d
315 Verifying Hash Integrity ... sha256+ OK
316 Booting using the fdt blob at 0x847a2cb0
317 Uncompressing Kernel Image ... OK
318 reserving fdt memory region: addr=80000000 size=2000000
319 Loading Device Tree to 000000009fffa000, end 000000009fffff4e ... OK
322 ---------------------------------------->8----------------------------------------
324 Please pay attention to the lines that start with "Verifying Hash Integrity".
326 "Verifying Hash Integrity ... sha256,rsa2048:dev+ OK" means the signature check
329 "Verifying Hash Integrity ... sha256+ OK" (3 times) means the hash check passed
330 for kernel, DTB, and Init ramdisk.
332 If they are not displayed, the Verified Boot is not working.
335 Deployment for Distro Boot
336 --------------------------
338 UniPhier SoC family boot the kernel in a generic manner as described in
341 To boot the kernel, you need to deploy necesssary components to a file
342 system on one of your block devices (eMMC, NAND, USB drive, etc.).
344 The components depend on the kernel image format.
351 - boot configuration file (extlinux.conf)
353 Here is an exmple of the configuration file.
355 -------------------->8--------------------
356 menu title UniPhier Boot Options.
363 initrd ../rootfs.cpio.gz
365 -------------------->8--------------------
367 Then, write 'Image', 'rootfs.cpio.gz', 'uniphier-ld20-ref.dtb' (DTB depends on
368 your board), and 'extlinux/extlinux.conf' to the file system.
373 - boot configuration file (extlinux.conf)
375 -------------------->8--------------------
376 menu title UniPhier Boot Options.
383 -------------------->8--------------------
385 Since the init ramdisk and DTB are contained in the FIT blob,
386 you do not need to describe them in the configuration file.
387 Write 'fitImage' and 'extlinux/extlinux.conf' to the file system.
390 UniPhier specific commands
391 --------------------------
393 - pinmon (enabled by CONFIG_CMD_PINMON)
394 shows the boot mode pins that has been latched at the power-on reset
396 - ddrphy (enabled by CONFIG_CMD_DDRPHY_DUMP)
397 shows the DDR PHY parameters set by the PHY training
399 - ddrmphy (enabled by CONFIG_CMD_DDRMPHY_DUMP)
400 shows the DDR Multi PHY parameters set by the PHY training
412 - LAN (on-board SMSC9118)
414 - EEPROM (connected to the on-board I2C bus)
415 - Support card (SRAM, NOR flash, some peripherals)
421 The recommended bit switch settings are as follows:
423 SW2 OFF(1)/ON(0) Description
424 ------------------------------------------
427 bit 3 <---- SoC Bus Width 16/32
428 bit 4 <---- SERIAL_SEL[0]
429 bit 5 ----> SERIAL_SEL[1]
430 bit 6 ----> BOOTSWAP_EN
432 bit 8 <---- SOC_SERIAL_DISABLE
434 SW8 OFF(1)/ON(0) Description
435 ------------------------------------------
436 bit 1 <---- CS1_SPLIT
438 bit 3 <---- CASE10_ON
439 bit 4 Don't Care Reserve
440 bit 5 Don't Care Reserve
441 bit 6 Don't Care Reserve
443 bit 8 ----> FLASHBUS32_16
445 The BKSZ[1:0] specifies the address range of memory slot and peripherals
448 BKSZ Description RAM slot Peripherals
449 --------------------------------------------------------------------
450 0b00 15MB RAM / 1MB Peri 00000000-00efffff 00f00000-00ffffff
451 0b01 31MB RAM / 1MB Peri 00000000-01efffff 01f00000-01ffffff
452 0b10 64MB RAM / 1MB Peri 00000000-03efffff 03f00000-03ffffff
453 0b11 127MB RAM / 1MB Peri 00000000-07efffff 07f00000-07ffffff
455 Set BSKZ[1:0] to 0b01 for U-Boot.
456 This mode is the most handy because EA[24] is always supported by the save pin
457 mode of the system bus. On the other hand, EA[25] is not supported for some
458 newer SoCs. Even if it is, EA[25] is not connected on most of the boards.
461 Masahiro Yamada <yamada.masahiro@socionext.com>