imx8mm-somdevices: Read MAC and if it is different from environment variable save it. rel_imx_5.10.35_2.0.0-somdevices.0
authorJosep Orga <jorga@somdevices.com>
Wed, 5 Oct 2022 15:41:07 +0000 (17:41 +0200)
committerJosep Orga <jorga@somdevices.com>
Wed, 5 Oct 2022 15:41:07 +0000 (17:41 +0200)
Signed-off-by: Josep Orga <jorga@somdevices.com>
board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c

index e6ba301..6fc7292 100644 (file)
@@ -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;
 }