From: Lothar Waßmann Date: Thu, 8 Feb 2018 16:33:54 +0000 (+0100) Subject: karo: txul: read second mac address from fuses X-Git-Tag: KARO-TX6-2019-07-31~17 X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=commitdiff_plain;h=738cbfcc2898d7c803217072f66fb993bcef5e12 karo: txul: read second mac address from fuses --- diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c index 784af734a0..314f29463b 100644 --- a/arch/arm/cpu/armv7/mx6/soc.c +++ b/arch/arm/cpu/armv7/mx6/soc.c @@ -555,7 +555,7 @@ void enable_caches(void) #endif #if defined(CONFIG_FEC_MXC) -void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) +__weak void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) { unsigned int mac0, mac1; @@ -583,6 +583,8 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) mac[5] = mac1 >> 16; } } + +//void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) __attribute__((weak("__imx_get_mac_from_fuse"))); #endif void boot_mode_apply(unsigned cfg_val) diff --git a/board/karo/tx6/tx6ul.c b/board/karo/tx6/tx6ul.c index e77adff5a0..28bb111179 100644 --- a/board/karo/tx6/tx6ul.c +++ b/board/karo/tx6/tx6ul.c @@ -1371,6 +1371,56 @@ exit: #define ETH_ALEN 6 #endif +void imx_get_mac_from_fuse(int dev_id, unsigned char *mac) +{ + unsigned int mac0, mac1, mac2; + unsigned int __maybe_unused fuse3_override, fuse4_override; + + memset(mac, 0, 6); + + switch (dev_id) { + case 0: + if (fuse_read(4, 2, &mac0)) { + printf("Failed to read MAC0 fuse\n"); + return; + } + if (fuse_read(4, 3, &mac1)) { + printf("Failed to read MAC1 fuse\n"); + return; + } + mac[0] = mac1 >> 8; + mac[1] = mac1; + mac[2] = mac0 >> 24; + mac[3] = mac0 >> 16; + mac[4] = mac0 >> 8; + mac[5] = mac0; + break; + + case 1: + if (fuse_read(4, 3, &mac1)) { + printf("Failed to read MAC1 fuse\n"); + return; + } + debug("read %08x from fuse 3\n", mac1); + if (fuse_read(4, 4, &mac2)) { + printf("Failed to read MAC2 fuse\n"); + return; + } + debug("read %08x from fuse 4\n", mac2); + mac[0] = mac2 >> 24; + mac[1] = mac2 >> 16; + mac[2] = mac2 >> 8; + mac[3] = mac2; + mac[4] = mac1 >> 24; + mac[5] = mac1 >> 16; + break; + + default: + return; + } + debug("%s@%d: Done %d %pM\n", __func__, __LINE__, dev_id, mac); +} + static void tx6ul_init_mac(void) { u8 mac[ETH_ALEN]; @@ -1392,7 +1442,8 @@ static void tx6ul_init_mac(void) if (getenv("eth1addr")) return; imx_get_mac_from_fuse(1, mac); - eth_setenv_enetaddr("eth1addr", mac); + if (is_valid_ethaddr(mac)) + eth_setenv_enetaddr("eth1addr", mac); } int board_eth_init(bd_t *bis)