#define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
#define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_ODE | PAD_CTL_PUE | PAD_CTL_PE)
+#define EEPROM_BUS_NUM 0
+#define EEPROM_ADDR 0x50
+#define EEPROM_ADDR_LEN 1
+#define EEPROM_OFFSET 0xFA
static iomux_v3_cfg_t const uart_pads[] = {
IMX8MM_PAD_SAI3_TXFS_UART2_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
}
#endif
+int set_mac_eeprom(void)
+{
+ struct udevice *dev;
+ u8 buf[6];
+ int ret;
+
+ 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",
+ buf[0],
+ buf[1],
+ buf[2],
+ buf[3],
+ buf[4],
+ buf[5]);
+ /* Set ethaddr variable for ethernet */
+ env_set("ethaddr", ethaddr);
+ env_save();
+ }
+ return 0;
+}
+
int board_early_init_f(void)
{
struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
env_set("board_name", "SOMDEVICES");
env_set("board_rev", "iMX8MM");
#endif
+ set_mac_eeprom();
return 0;
}