
Hi Fabio,
On 3/19/22 8:22 AM, Fabio Estevam wrote:
From: Fabio Estevam festevam@denx.de
Currently the eth0 MAC address is randomly assigned.
Retrieve the MAC address from EEPROM.
A bit of a plug, but can you try [1]? For your board, I believe your device tree would be something like
&fec1 { nvmem-cells = <&fec1_addr>; nvmem-cell-names = "mac-address"; };
i2c_eeprom1: eeprom@50 { compatible = "atmel,24c08"; reg = <0x50>; pagesize = <16>;
fec1_addr: mac-address@4 { reg = <4 6>; }; };
And you would need to enable CONFIG_NVMEM
[1] https://lore.kernel.org/u-boot/20220404193040.2305153-1-sean.anderson@seco.c...
Signed-off-by: Fabio Estevam <festevam@denx.de
arch/arm/dts/imx8mm-cl-iot-gate.dts | 12 ++++- .../imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c | 51 +++++++++++++++++++ configs/imx8mm-cl-iot-gate_defconfig | 2 + 3 files changed, 64 insertions(+), 1 deletion(-)
diff --git a/arch/arm/dts/imx8mm-cl-iot-gate.dts b/arch/arm/dts/imx8mm-cl-iot-gate.dts index 62e8d0394933..425701204a0c 100644 --- a/arch/arm/dts/imx8mm-cl-iot-gate.dts +++ b/arch/arm/dts/imx8mm-cl-iot-gate.dts @@ -17,6 +17,11 @@ stdout-path = &uart3; };
- aliases {
eeprom0 = &i2c_eeprom0;
eeprom1 = &i2c_eeprom1;
- };
- reg_vusb_5v: regulator-usdhc2 { compatible = "regulator-fixed"; regulator-name = "VUSB_5V";
@@ -79,7 +84,7 @@ pinctrl-0 = <&pinctrl_i2c1>; status = "okay";
- eeprom@54 {
- i2c_eeprom0: eeprom@54 { compatible = "atmel,24c08"; reg = <0x54>; pagesize = <16>;
@@ -92,6 +97,11 @@ pinctrl-0 = <&pinctrl_i2c2>; status = "okay";
- i2c_eeprom1: eeprom@50 {
compatible = "atmel,24c08";
reg = <0x50>;
pagesize = <16>;
- }; rtc@69 { compatible = "abracon,ab1805"; reg = <0x69>;
diff --git a/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c b/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c index 7e2d88f449ce..779b64b140ad 100644 --- a/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c +++ b/board/compulab/imx8mm-cl-iot-gate/imx8mm-cl-iot-gate.c @@ -12,6 +12,8 @@ #include <init.h> #include <miiphy.h> #include <netdev.h> +#include <i2c_eeprom.h> +#include <i2c.h>
#include <asm/arch/clock.h> #include <asm/arch/imx8mm_pins.h> @@ -418,12 +420,61 @@ int extension_board_scan(struct list_head *extension_list) return ret; }
+static int setup_mac_address(void) +{
- unsigned char enetaddr[6];
- struct udevice *dev;
- int ret, off;
- ret = eth_env_get_enetaddr("ethaddr", enetaddr);
- if (ret)
return 0;
- off = fdt_path_offset(gd->fdt_blob, "eeprom1");
- if (off < 0) {
printf("No eeprom0 path offset found in DT\n");
return off;
- }
- ret = uclass_get_device_by_of_offset(UCLASS_I2C_EEPROM, off, &dev);
- if (ret) {
printf("%s: Could not find EEPROM\n", __func__);
return ret;
- }
- ret = i2c_set_chip_offset_len(dev, 1);
- if (ret)
return ret;
- ret = i2c_eeprom_read(dev, 4, enetaddr, sizeof(enetaddr));
- if (ret) {
printf("%s: Could not read EEPROM\n", __func__);
return ret;
- }
- ret = is_valid_ethaddr(enetaddr);
- if (!ret)
return -EINVAL;
- ret = eth_env_set_enetaddr("ethaddr", enetaddr);
- if (ret)
return ret;
- return 0;
+}
int board_late_init(void) {
int ret;
if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG)) { env_set("board_name", "IOT-GATE-IMX8"); env_set("board_rev", "SBC-IOTMX8"); }
ret = setup_mac_address();
if (ret < 0)
printf("Cannot set MAC address from EEPROM\n");
return 0;
} diff --git a/configs/imx8mm-cl-iot-gate_defconfig b/configs/imx8mm-cl-iot-gate_defconfig index b72f219c786c..ee171f704ed9 100644 --- a/configs/imx8mm-cl-iot-gate_defconfig +++ b/configs/imx8mm-cl-iot-gate_defconfig @@ -84,6 +84,8 @@ CONFIG_FASTBOOT_FLASH_MMC_DEV=2 CONFIG_MXC_GPIO=y CONFIG_DM_I2C=y CONFIG_DM_KEYBOARD=y +CONFIG_MISC=y +CONFIG_I2C_EEPROM=y CONFIG_SUPPORT_EMMC_RPMB=y CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_FSL_USDHC=y