From 35050305f6cdd3966ec09cf0d5acc8871bc062ab Mon Sep 17 00:00:00 2001 From: Josep Orga Date: Wed, 5 Oct 2022 17:41:07 +0200 Subject: [PATCH] imx8mm-somdevices: Read MAC and if it is different from environment variable save it. Signed-off-by: Josep Orga --- .../imx8mm_somdevices/imx8mm_somdevices.c | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c b/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c index e6ba3012e5..6fc7292af9 100644 --- a/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c +++ b/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c @@ -80,32 +80,40 @@ int set_mac_eeprom(void) struct udevice *dev; u8 buf[6]; int ret; + /* If ethaddr variable is not set in environment */ + char ethaddr[18]; + char *ethaddr_env; - if (!env_get("ethaddr")) { - /* If ethaddr variable is not set in environment */ - char ethaddr[18]; - printf("Setting MAC from EEPROM\n"); - /* Configure EEPROM: 7bit address 0x50 */ - ret = i2c_get_chip_for_busnum(EEPROM_BUS_NUM, EEPROM_ADDR, EEPROM_ADDR_LEN, &dev); - if (ret) { - printf("Cannot find EEPROM for MAC: %d\n", ret); - return 0; - } - /* Reading from EEPROM */ - if (dm_i2c_read(dev, EEPROM_OFFSET, (u8 *)&buf, sizeof(buf)) < 0) { - printf("i2c EEPROM for MAC read failed\n"); - return 0; - } - sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", + /* Configure EEPROM: 7bit address 0x50 */ + ret = i2c_get_chip_for_busnum(EEPROM_BUS_NUM, EEPROM_ADDR, EEPROM_ADDR_LEN, &dev); + if (ret) { + printf("Cannot find EEPROM for MAC: %d\n", ret); + return 0; + } + /* Reading from EEPROM */ + if (dm_i2c_read(dev, EEPROM_OFFSET, (u8 *)&buf, sizeof(buf)) < 0) { + printf("i2c EEPROM for MAC read failed\n"); + return 0; + } + sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]); + ethaddr_env = env_get("ethaddr"); + if (!ethaddr_env) { + printf("Setting MAC from EEPROM\n"); /* Set ethaddr variable for ethernet */ env_set("ethaddr", ethaddr); env_save(); + } else { + if (strcmp(ethaddr_env, ethaddr)) { + /* Set ethaddr variable for ethernet */ + env_set("ethaddr", ethaddr); + env_save(); + } } return 0; } -- 2.17.1