From 738cbfcc2898d7c803217072f66fb993bcef5e12 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Thu, 8 Feb 2018 17:33:54 +0100 Subject: [PATCH] karo: txul: read second mac address from fuses --- arch/arm/cpu/armv7/mx6/soc.c | 4 ++- board/karo/tx6/tx6ul.c | 53 +++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) 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) -- 2.39.2