amlogic: vim3: fix MAC address reading code
authorMarek Szyprowski <m.szyprowski@samsung.com>
Tue, 12 Jan 2021 20:03:16 +0000 (21:03 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 15 Nov 2021 10:37:12 +0000 (11:37 +0100)
It turned out that MAC address is stored in ASCII format in EFUSE, so fix
the code reading it to use ASCII format.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: If3723f3aa8570de04e6e753e958ada624e3482fe

board/amlogic/w400/w400.c

index a420557..31db806 100644 (file)
@@ -15,7 +15,7 @@
 #include <asm/arch/sm.h>
 
 #define EFUSE_MAC_OFFSET       0
-#define EFUSE_MAC_SIZE         6
+#define EFUSE_MAC_SIZE         12
 #define MAC_ADDR_LEN           6
 
 int mmc_get_env_dev(void)
@@ -29,7 +29,7 @@ int mmc_get_env_dev(void)
 int misc_init_r(void)
 {
        u8 mac_addr[MAC_ADDR_LEN];
-       char efuse_mac_addr[EFUSE_MAC_SIZE];
+       char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
        ssize_t len;
 
        meson_eth_init(PHY_INTERFACE_MODE_RGMII, 0);
@@ -40,8 +40,13 @@ int misc_init_r(void)
                if (len != EFUSE_MAC_SIZE)
                        return 0;
 
-               for (int i = 0; i < 6; i++)
-                       mac_addr[i] = efuse_mac_addr[i];
+               /* MAC is stored in ASCII format, 1bytes = 2characters */
+               for (int i = 0; i < 6; i++) {
+                       tmp[0] = efuse_mac_addr[i * 2];
+                       tmp[1] = efuse_mac_addr[i * 2 + 1];
+                       tmp[2] = '\0';
+                       mac_addr[i] = simple_strtoul(tmp, NULL, 16);
+               }
 
                if (is_valid_ethaddr(mac_addr))
                        eth_env_set_enetaddr("ethaddr", mac_addr);