log: Add documentation for commands and formatting
[platform/kernel/u-boot.git] / doc / README.imx6
1 U-Boot for Freescale i.MX6
2
3 This file contains information for the port of U-Boot to the Freescale i.MX6
4 SoC.
5
6 1. CONVENTIONS FOR FUSE ASSIGNMENTS
7 -----------------------------------
8
9 1.1 MAC Address: It is stored in fuse bank 4, with the 32 lsbs in word 2 and the
10     16 msbs in word 3[15:0].
11     For i.MX6SX and i.MX6UL, they have two MAC addresses. The second MAC address
12     is stored in fuse bank 4, with the 16 lsb in word 3[31:16] and the 32 msbs in 
13     word 4.
14
15 Example:
16
17 For reading the MAC address fuses on a MX6Q:
18
19 - The MAC address is stored in two fuse addresses (the fuse addresses are
20 described in the Fusemap Descriptions table from the mx6q Reference Manual):
21
22 0x620[31:0] - MAC_ADDR[31:0]
23 0x630[15:0] - MAC_ADDR[47:32]
24
25 In order to use the fuse API, we need to pass the bank and word values, which
26 are calculated as below:
27
28 Fuse address for the lower MAC address: 0x620
29 Base address for the fuses: 0x400
30
31 (0x620 - 0x400)/0x10 = 0x22 = 34 decimal
32
33 As the fuses are arranged in banks of 8 words:
34
35 34 / 8 = 4 and the remainder is 2, so in this case:
36
37 bank = 4
38 word = 2
39
40 And the U-Boot command would be:
41
42 => fuse read 4 2
43 Reading bank 4:
44
45 Word 0x00000002: 9f027772
46
47 Doing the same for the upper MAC address:
48
49 Fuse address for the upper MAC address: 0x630
50 Base address for the fuses: 0x400
51
52 (0x630 - 0x400)/0x10 = 0x23 = 35 decimal
53
54 As the fuses are arranged in banks of 8 words:
55
56 35 / 8 = 4 and the remainder is 3, so in this case:
57
58 bank = 4
59 word = 3
60
61 And the U-Boot command would be:
62
63 => fuse read 4 3
64 Reading bank 4:
65
66 Word 0x00000003: 00000004
67
68 ,which matches the ethaddr value:
69 => echo ${ethaddr}
70 00:04:9f:02:77:72
71
72 Some other useful hints:
73
74 - The 'bank' and 'word' numbers can be easily obtained from the mx6 Reference
75 Manual. For the mx6quad case, please check the "46.5 OCOTP Memory Map/Register
76 Definition" from the "i.MX 6Dual/6Quad Applications Processor Reference Manual,
77 Rev. 1, 04/2013" document. For example, for the MAC fuses we have:
78
79 Address:
80 21B_C620        Value of OTP Bank4 Word2 (MAC Address)(OCOTP_MAC0)
81
82 21B_C630        Value of OTP Bank4 Word3 (MAC Address)(OCOTP_MAC1)
83
84 - The command '=> fuse read 4 2 2' reads the whole MAC addresses at once:
85
86 => fuse read 4 2 2
87 Reading bank 4:
88
89 Word 0x00000002: 9f027772 00000004
90
91 2. Using imx_usb_loader for first install with SPL
92 --------------------------------------------------
93
94 imx_usb_loader is a very nice tool by Boundary Devices that
95 allow to install U-Boot without a JTAG debugger, using
96 the USB boot mode as described in the manual. It is
97 a replacement for Freescale's MFGTOOLS.
98
99 The sources can be found here:
100
101         https://github.com/boundarydevices/imx_usb_loader.git
102
103 Booting in USB mode, the i.MX6 announces itself to the Linux Host as:
104
105 Bus 001 Device 111: ID 15a2:0061 Freescale Semiconductor, Inc.
106
107 imx_usb_loader is able to download a single file (u-boot.imx)
108 to the board. For boards without SPL support, it is enough to
109 issue the command:
110
111         sudo ../imx_usb_loader/imx_usb -v u-boot.imx
112
113 In order to load SPL and u-boot.img via imx_usb_loader tool,
114 please refer to doc/README.sdp.
115
116 3. Using Secure Boot on i.MX6 machines with SPL support
117 -------------------------------------------------------
118
119 This version of U-Boot is able to build a signable version of the SPL
120 as well as a signable version of the U-Boot image. The signature can
121 be verified through High Assurance Boot (HAB).
122
123 CONFIG_SECURE_BOOT is needed to build those two binaries.
124 After building, you need to create a command sequence file and use
125 Freescales Code Signing Tool to sign both binaries. After creation,
126 the mkimage tool outputs the required information about the HAB Blocks
127 parameter for the CSF. During the build, the information is preserved
128 in log files named as the binaries. (SPL.log and u-boot-ivt.log).
129
130 More information about the CSF and HAB can be found in the AN4581.
131 https://cache.freescale.com/files/32bit/doc/app_note/AN4581.pdf
132
133 We don't want to explain how to create a PKI tree or SRK table as
134 this is well explained in the Application Note.
135
136 Example Output of the SPL (imximage) creation:
137  Image Type:   Freescale IMX Boot Image
138  Image Ver:    2 (i.MX53/6/7 compatible)
139  Mode:         DCD
140  Data Size:    61440 Bytes = 60.00 kB = 0.06 MB
141  Load Address: 00907420
142  Entry Point:  00908000
143  HAB Blocks:   00907400 00000000 0000cc00
144
145 Example Output of the u-boot-ivt.img (firmware_ivt) creation:
146  Image Name:   U-Boot 2016.11-rc1-31589-g2a4411
147  Created:      Sat Nov  5 21:53:28 2016
148  Image Type:   ARM U-Boot Firmware with HABv4 IVT (uncompressed)
149  Data Size:    352192 Bytes = 343.94 kB = 0.34 MB
150  Load Address: 17800000
151  Entry Point:  00000000
152  HAB Blocks:   0x177fffc0   0x0000   0x00054020
153
154 The CST (Code Signing Tool) can be downloaded from NXP.
155 # Compile CSF and create signature
156 ./cst --o csf-u-boot.bin < command_sequence_uboot.csf
157 ./cst --o csf-SPL.bin < command_sequence_spl.csf
158 # Append compiled CSF to Binary
159 cat SPL csf-SPL.bin > SPL-signed
160 cat u-boot-ivt.img csf-u-boot.bin > u-boot-signed.img
161
162 These two signed binaries can be used on an i.MX6 in closed
163 configuration when the according SRK Table Hash has been flashed.