1*75e8ca6aSBreno Matheus LimaU-Boot for Freescale i.MX6 2*75e8ca6aSBreno Matheus Lima 3*75e8ca6aSBreno Matheus LimaThis file contains information for the port of U-Boot to the Freescale i.MX6 4*75e8ca6aSBreno Matheus LimaSoC. 5*75e8ca6aSBreno Matheus Lima 6*75e8ca6aSBreno Matheus Lima1. CONVENTIONS FOR FUSE ASSIGNMENTS 7*75e8ca6aSBreno Matheus Lima----------------------------------- 8*75e8ca6aSBreno Matheus Lima 9*75e8ca6aSBreno Matheus Lima1.1 MAC Address: It is stored in fuse bank 4, with the 32 lsbs in word 2 and the 10*75e8ca6aSBreno Matheus Lima 16 msbs in word 3[15:0]. 11*75e8ca6aSBreno Matheus Lima For i.MX6SX and i.MX6UL, they have two MAC addresses. The second MAC address 12*75e8ca6aSBreno Matheus Lima is stored in fuse bank 4, with the 16 lsb in word 3[31:16] and the 32 msbs in 13*75e8ca6aSBreno Matheus Lima word 4. 14*75e8ca6aSBreno Matheus Lima 15*75e8ca6aSBreno Matheus LimaExample: 16*75e8ca6aSBreno Matheus Lima 17*75e8ca6aSBreno Matheus LimaFor reading the MAC address fuses on a MX6Q: 18*75e8ca6aSBreno Matheus Lima 19*75e8ca6aSBreno Matheus Lima- The MAC address is stored in two fuse addresses (the fuse addresses are 20*75e8ca6aSBreno Matheus Limadescribed in the Fusemap Descriptions table from the mx6q Reference Manual): 21*75e8ca6aSBreno Matheus Lima 22*75e8ca6aSBreno Matheus Lima0x620[31:0] - MAC_ADDR[31:0] 23*75e8ca6aSBreno Matheus Lima0x630[15:0] - MAC_ADDR[47:32] 24*75e8ca6aSBreno Matheus Lima 25*75e8ca6aSBreno Matheus LimaIn order to use the fuse API, we need to pass the bank and word values, which 26*75e8ca6aSBreno Matheus Limaare calculated as below: 27*75e8ca6aSBreno Matheus Lima 28*75e8ca6aSBreno Matheus LimaFuse address for the lower MAC address: 0x620 29*75e8ca6aSBreno Matheus LimaBase address for the fuses: 0x400 30*75e8ca6aSBreno Matheus Lima 31*75e8ca6aSBreno Matheus Lima(0x620 - 0x400)/0x10 = 0x22 = 34 decimal 32*75e8ca6aSBreno Matheus Lima 33*75e8ca6aSBreno Matheus LimaAs the fuses are arranged in banks of 8 words: 34*75e8ca6aSBreno Matheus Lima 35*75e8ca6aSBreno Matheus Lima34 / 8 = 4 and the remainder is 2, so in this case: 36*75e8ca6aSBreno Matheus Lima 37*75e8ca6aSBreno Matheus Limabank = 4 38*75e8ca6aSBreno Matheus Limaword = 2 39*75e8ca6aSBreno Matheus Lima 40*75e8ca6aSBreno Matheus LimaAnd the U-Boot command would be: 41*75e8ca6aSBreno Matheus Lima 42*75e8ca6aSBreno Matheus Lima=> fuse read 4 2 43*75e8ca6aSBreno Matheus LimaReading bank 4: 44*75e8ca6aSBreno Matheus Lima 45*75e8ca6aSBreno Matheus LimaWord 0x00000002: 9f027772 46*75e8ca6aSBreno Matheus Lima 47*75e8ca6aSBreno Matheus LimaDoing the same for the upper MAC address: 48*75e8ca6aSBreno Matheus Lima 49*75e8ca6aSBreno Matheus LimaFuse address for the upper MAC address: 0x630 50*75e8ca6aSBreno Matheus LimaBase address for the fuses: 0x400 51*75e8ca6aSBreno Matheus Lima 52*75e8ca6aSBreno Matheus Lima(0x630 - 0x400)/0x10 = 0x23 = 35 decimal 53*75e8ca6aSBreno Matheus Lima 54*75e8ca6aSBreno Matheus LimaAs the fuses are arranged in banks of 8 words: 55*75e8ca6aSBreno Matheus Lima 56*75e8ca6aSBreno Matheus Lima35 / 8 = 4 and the remainder is 3, so in this case: 57*75e8ca6aSBreno Matheus Lima 58*75e8ca6aSBreno Matheus Limabank = 4 59*75e8ca6aSBreno Matheus Limaword = 3 60*75e8ca6aSBreno Matheus Lima 61*75e8ca6aSBreno Matheus LimaAnd the U-Boot command would be: 62*75e8ca6aSBreno Matheus Lima 63*75e8ca6aSBreno Matheus Lima=> fuse read 4 3 64*75e8ca6aSBreno Matheus LimaReading bank 4: 65*75e8ca6aSBreno Matheus Lima 66*75e8ca6aSBreno Matheus LimaWord 0x00000003: 00000004 67*75e8ca6aSBreno Matheus Lima 68*75e8ca6aSBreno Matheus Lima,which matches the ethaddr value: 69*75e8ca6aSBreno Matheus Lima=> echo ${ethaddr} 70*75e8ca6aSBreno Matheus Lima00:04:9f:02:77:72 71*75e8ca6aSBreno Matheus Lima 72*75e8ca6aSBreno Matheus LimaSome other useful hints: 73*75e8ca6aSBreno Matheus Lima 74*75e8ca6aSBreno Matheus Lima- The 'bank' and 'word' numbers can be easily obtained from the mx6 Reference 75*75e8ca6aSBreno Matheus LimaManual. For the mx6quad case, please check the "46.5 OCOTP Memory Map/Register 76*75e8ca6aSBreno Matheus LimaDefinition" from the "i.MX 6Dual/6Quad Applications Processor Reference Manual, 77*75e8ca6aSBreno Matheus LimaRev. 1, 04/2013" document. For example, for the MAC fuses we have: 78*75e8ca6aSBreno Matheus Lima 79*75e8ca6aSBreno Matheus LimaAddress: 80*75e8ca6aSBreno Matheus Lima21B_C620 Value of OTP Bank4 Word2 (MAC Address)(OCOTP_MAC0) 81*75e8ca6aSBreno Matheus Lima 82*75e8ca6aSBreno Matheus Lima21B_C630 Value of OTP Bank4 Word3 (MAC Address)(OCOTP_MAC1) 83*75e8ca6aSBreno Matheus Lima 84*75e8ca6aSBreno Matheus Lima- The command '=> fuse read 4 2 2' reads the whole MAC addresses at once: 85*75e8ca6aSBreno Matheus Lima 86*75e8ca6aSBreno Matheus Lima=> fuse read 4 2 2 87*75e8ca6aSBreno Matheus LimaReading bank 4: 88*75e8ca6aSBreno Matheus Lima 89*75e8ca6aSBreno Matheus LimaWord 0x00000002: 9f027772 00000004 90*75e8ca6aSBreno Matheus Lima 91