]>
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 | |
10 | 16 msbs in word 3. | |
6f3bef9e FE |
11 | |
12 | Example: | |
13 | ||
14 | For reading the MAC address fuses on a MX6Q: | |
15 | ||
16 | - The MAC address is stored in two fuse addresses (the fuse addresses are | |
17 | described in the Fusemap Descriptions table from the mx6q Reference Manual): | |
18 | ||
19 | 0x620[31:0] - MAC_ADDR[31:0] | |
20 | 0x630[15:0] - MAC_ADDR[47:32] | |
21 | ||
22 | In order to use the fuse API, we need to pass the bank and word values, which | |
23 | are calculated as below: | |
24 | ||
25 | Fuse address for the lower MAC address: 0x620 | |
26 | Base address for the fuses: 0x400 | |
27 | ||
28 | (0x620 - 0x400)/0x10 = 0x22 = 34 decimal | |
29 | ||
30 | As the fuses are arranged in banks of 8 words: | |
31 | ||
32 | 34 / 8 = 4 and the remainder is 2, so in this case: | |
33 | ||
34 | bank = 4 | |
35 | word = 2 | |
36 | ||
37 | And the U-boot command would be: | |
38 | ||
39 | => fuse read 4 2 | |
40 | Reading bank 4: | |
41 | ||
42 | Word 0x00000002: 9f027772 | |
43 | ||
44 | Doing the same for the upper MAC address: | |
45 | ||
46 | Fuse address for the upper MAC address: 0x630 | |
47 | Base address for the fuses: 0x400 | |
48 | ||
49 | (0x630 - 0x400)/0x10 = 0x23 = 35 decimal | |
50 | ||
51 | As the fuses are arranged in banks of 8 words: | |
52 | ||
53 | 35 / 8 = 4 and the remainder is 3, so in this case: | |
54 | ||
55 | bank = 4 | |
56 | word = 3 | |
57 | ||
58 | And the U-boot command would be: | |
59 | ||
60 | => fuse read 4 3 | |
61 | Reading bank 4: | |
62 | ||
63 | Word 0x00000003: 00000004 | |
64 | ||
65 | ,which matches the ethaddr value: | |
66 | => echo ${ethaddr} | |
67 | 00:04:9f:02:77:72 | |
68 | ||
69 | Some other useful hints: | |
70 | ||
71 | - The 'bank' and 'word' numbers can be easily obtained from the mx6 Reference | |
72 | Manual. For the mx6quad case, please check the "46.5 OCOTP Memory Map/Register | |
73 | Definition" from the "i.MX 6Dual/6Quad Applications Processor Reference Manual, | |
74 | Rev. 1, 04/2013" document. For example, for the MAC fuses we have: | |
75 | ||
76 | Address: | |
77 | 21B_C620 Value of OTP Bank4 Word2 (MAC Address)(OCOTP_MAC0) | |
78 | ||
79 | 21B_C630 Value of OTP Bank4 Word3 (MAC Address)(OCOTP_MAC1) | |
80 | ||
81 | - The command '=> fuse read 4 2 2' reads the whole MAC addresses at once: | |
82 | ||
83 | => fuse read 4 2 2 | |
84 | Reading bank 4: | |
85 | ||
86 | Word 0x00000002: 9f027772 00000004 | |
40f4839c SB |
87 | |
88 | 2. Using imx_usb_loader for first install with SPL | |
89 | -------------------------------------------------- | |
90 | ||
91 | imx_usb_loader is a very nice tool by BoundaryDevice that | |
92 | allow to install U-Boot without a JTAG debugger, using | |
93 | the USB boot mode as described in the manual. It is | |
94 | a replacement for Freescale's MFGTOOLS. | |
95 | ||
96 | The sources can be found here: | |
97 | ||
98 | https://github.com/boundarydevices/imx_usb_loader.git | |
99 | ||
100 | Booting in USB mode, the i.MX6 announces itself to the Linux Host as: | |
101 | ||
102 | Bus 001 Device 111: ID 15a2:0061 Freescale Semiconductor, Inc. | |
103 | ||
104 | imx_usb_loader is able to download a single file (u-boot.imx) | |
105 | to the board. For boards without SPL support, it is enough to | |
106 | issue the command: | |
107 | ||
108 | sudo ../imx_usb_loader/imx_usb -v u-boot.imx | |
109 | ||
110 | Getting U-Boot when SPL support is active, it requires | |
111 | two downloads. imx_usb_loader downloads the SPL into | |
112 | OCRAM and starts it. SPL will check for a valid u-boot.img, and | |
113 | because it is not found, it will wait for it using the y-modem | |
114 | protocol via the console. | |
115 | ||
116 | A first install is then possible by combining imx_usb_loader with | |
117 | another tool such as kermit. | |
118 | ||
119 | sudo ../imx_usb_loader/imx_usb -v SPL | |
120 | kermit kermit_uboot | |
121 | ||
122 | and kermit_uboot contains something like this (set line should be adjusted): | |
123 | ||
124 | set line /dev/ttyUSB1 | |
125 | set speed 115200 | |
126 | SET CARRIER-WATCH OFF | |
127 | set flow-control none | |
128 | set handshake none | |
129 | set prefixing all | |
130 | set file type bin | |
131 | set protocol ymodem | |
132 | send u-boot.img | |
133 | c | |
134 | ||
135 | The last "c" command tells kermit (from ckermit package in most distros) | |
136 | to switch from command line mode to communication mode, and when the | |
137 | script is finished, the U-Boot prompt is shown in the same shell. |