]>
Commit | Line | Data |
---|---|---|
eec3f024 BT |
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 | |
d4d1dd67 YL |
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. | |
6f3bef9e FE |
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 | ||
a187559e | 40 | And the U-Boot command would be: |
6f3bef9e FE |
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 | ||
a187559e | 61 | And the U-Boot command would be: |
6f3bef9e FE |
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 | |
40f4839c SB |
90 | |
91 | 2. Using imx_usb_loader for first install with SPL | |
92 | -------------------------------------------------- | |
93 | ||
94 | imx_usb_loader is a very nice tool by BoundaryDevice 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 | Getting U-Boot when SPL support is active, it requires | |
114 | two downloads. imx_usb_loader downloads the SPL into | |
115 | OCRAM and starts it. SPL will check for a valid u-boot.img, and | |
116 | because it is not found, it will wait for it using the y-modem | |
117 | protocol via the console. | |
118 | ||
119 | A first install is then possible by combining imx_usb_loader with | |
120 | another tool such as kermit. | |
121 | ||
122 | sudo ../imx_usb_loader/imx_usb -v SPL | |
123 | kermit kermit_uboot | |
124 | ||
125 | and kermit_uboot contains something like this (set line should be adjusted): | |
126 | ||
127 | set line /dev/ttyUSB1 | |
128 | set speed 115200 | |
129 | SET CARRIER-WATCH OFF | |
130 | set flow-control none | |
131 | set handshake none | |
132 | set prefixing all | |
133 | set file type bin | |
134 | set protocol ymodem | |
135 | send u-boot.img | |
136 | c | |
137 | ||
138 | The last "c" command tells kermit (from ckermit package in most distros) | |
139 | to switch from command line mode to communication mode, and when the | |
140 | script is finished, the U-Boot prompt is shown in the same shell. |