From: Josep Orga Date: Mon, 6 Sep 2021 13:43:14 +0000 (+0200) Subject: imx8mm-somdevices: Read MAC from EEPROM and save it in ethaddr environment variable. X-Git-Tag: rel_imx_5.10.35_2.0.0-somdevices.0~35 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=d0e6c26b570ad9d8fe4a72a63c5967b0893ce049;p=u-boot.git imx8mm-somdevices: Read MAC from EEPROM and save it in ethaddr environment variable. Signed-off-by: Josep Orga --- diff --git a/arch/arm/dts/imx8mm-somdevices.dts b/arch/arm/dts/imx8mm-somdevices.dts index 7033ae35e6..fb196e1ed9 100644 --- a/arch/arm/dts/imx8mm-somdevices.dts +++ b/arch/arm/dts/imx8mm-somdevices.dts @@ -146,6 +146,12 @@ pinctrl-1 = <&pinctrl_i2c1_gpio>; scl-gpios = <&gpio5 14 GPIO_ACTIVE_HIGH>; sda-gpios = <&gpio5 15 GPIO_ACTIVE_HIGH>; + status = "okay"; + + eeprom@50 { + compatible = "microchip,24c02"; + reg = <0x50>; + }; pmic: pca9450@25 { reg = <0x25>; diff --git a/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c b/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c index 0b6120e7c1..e6ba3012e5 100644 --- a/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c +++ b/board/somdevices/imx8mm_somdevices/imx8mm_somdevices.c @@ -27,6 +27,10 @@ DECLARE_GLOBAL_DATA_PTR; #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), @@ -71,6 +75,41 @@ static void setup_gpmi_nand(void) } #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; @@ -331,6 +370,7 @@ int board_late_init(void) env_set("board_name", "SOMDEVICES"); env_set("board_rev", "iMX8MM"); #endif + set_mac_eeprom(); return 0; }