i.mx6:imx6q: allign MAC address with burned-in ordering
authorJason Liu <jason.hui@linaro.org>
Mon, 19 Dec 2011 02:38:13 +0000 (02:38 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Mon, 16 Jan 2012 07:40:09 +0000 (08:40 +0100)
For the i.mx6q, the burned-in MAC address will be the following odering,

fuse: 0x620[7:0]   MAC_ADDR[7:0]     ---> mac[5]
fuse: 0x620[15:8]  MAC_ADDR[15:8]    ---> mac[4]
fuse: 0x620[23:16] MAC_ADDR[23:16]   ---> mac[3]
fuse: 0x620[31:24] MAC_ADDR[31:24]   ---> mac[2]
fuse: 0x630[7:0]   MAC_ADDR[39:32]   ---> mac[1]
fuse: 0x630[15:8]  MAC_ADDR[47:40]   ---> mac[0]

This patch also fix the error caculation for the fuse bank[0] address

Signed-off-by: Jason Liu <jason.hui@linaro.org>
Cc: Stefano Babic <sbabic@denx.de>
arch/arm/cpu/armv7/mx6/soc.c
arch/arm/include/asm/arch-mx6/imx-regs.h

index 5a6f9e29d02eaee8519a2a11fc447fdf49a90d26..60044bb5b65792ace935fe87ec83da10a592f1e9 100644 (file)
@@ -70,13 +70,15 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
        struct fuse_bank4_regs *fuse =
                        (struct fuse_bank4_regs *)bank->fuse_regs;
 
-       u32 mac_lo = readl(&fuse->mac_addr_low);
-       u32 mac_hi = readl(&fuse->mac_addr_high);
+       u32 value = readl(&fuse->mac_addr_high);
+       mac[0] = (value >> 8);
+       mac[1] = value ;
 
-       *(u32 *)mac = mac_lo;
-
-       mac[4] = mac_hi & 0xff;
-       mac[5] = (mac_hi >> 8) & 0xff;
+       value = readl(&fuse->mac_addr_low);
+       mac[2] = value >> 24 ;
+       mac[3] = value >> 16 ;
+       mac[4] = value >> 8 ;
+       mac[5] = value ;
 
 }
 #endif
index dfec6b0b9ec215e6ae135894569ec53014af05b3..8e452a86e938f086989755ba8694408a71a88310 100644 (file)
@@ -214,7 +214,7 @@ struct iim_regs {
        u32     crc_value;
        u32     rsvd6[3];
        u32     version;
-       u32     rsvd7[0xd8];
+       u32     rsvd7[0xdb];
 
        struct fuse_bank {
                u32     fuse_regs[0x20];