From: Marek Vasut Date: Tue, 12 Mar 2024 21:15:58 +0000 (+0100) Subject: ARM: imx: stm32: Test whether ethernet node is enabled before reading MAC EEPROM... X-Git-Url: http://git.dujemihanovic.xyz/img/static/gitweb.css?a=commitdiff_plain;h=786af90de8ceba3cee1818376b9d53421c5be598;p=u-boot.git ARM: imx: stm32: Test whether ethernet node is enabled before reading MAC EEPROM on DHSOM Check whether the ethernet interface is enabled at all before reading MAC EEPROM. As a cost saving measure, it can happen that the MAC EEPROM is not populated on SoMs which do not use ethernet. Signed-off-by: Marek Vasut Reviewed-by: Patrice Chotard --- diff --git a/board/dhelectronics/common/dh_common.c b/board/dhelectronics/common/dh_common.c index 67e3d59b1f..34094a020b 100644 --- a/board/dhelectronics/common/dh_common.c +++ b/board/dhelectronics/common/dh_common.c @@ -18,6 +18,19 @@ bool dh_mac_is_in_env(const char *env) return eth_env_get_enetaddr(env, enetaddr); } +int dh_get_mac_is_enabled(const char *alias) +{ + ofnode node = ofnode_path(alias); + + if (!ofnode_valid(node)) + return -EINVAL; + + if (!ofnode_is_enabled(node)) + return -ENODEV; + + return 0; +} + int dh_get_mac_from_eeprom(unsigned char *enetaddr, const char *alias) { struct udevice *dev; @@ -57,6 +70,9 @@ __weak int dh_setup_mac_address(void) if (dh_mac_is_in_env("ethaddr")) return 0; + if (dh_get_mac_is_enabled("ethernet0")) + return 0; + if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0")) return eth_env_set_enetaddr("ethaddr", enetaddr); diff --git a/board/dhelectronics/common/dh_common.h b/board/dhelectronics/common/dh_common.h index 2b24637d96..a2de5b1553 100644 --- a/board/dhelectronics/common/dh_common.h +++ b/board/dhelectronics/common/dh_common.h @@ -11,6 +11,14 @@ */ bool dh_mac_is_in_env(const char *env); +/* + * dh_get_mac_is_enabled - Test if ethernet MAC is enabled in DT + * + * @alias: alias for ethernet MAC device tree node + * Return: 0 if OK, other value on error + */ +int dh_get_mac_is_enabled(const char *alias); + /* * dh_get_mac_from_eeprom - Get MAC address from eeprom and write it to enetaddr * diff --git a/board/dhelectronics/dh_imx6/dh_imx6.c b/board/dhelectronics/dh_imx6/dh_imx6.c index 07fc9b1fe6..0676587c38 100644 --- a/board/dhelectronics/dh_imx6/dh_imx6.c +++ b/board/dhelectronics/dh_imx6/dh_imx6.c @@ -92,6 +92,9 @@ int dh_setup_mac_address(void) if (dh_mac_is_in_env("ethaddr")) return 0; + if (dh_get_mac_is_enabled("ethernet0")) + return 0; + if (!dh_imx_get_mac_from_fuse(enetaddr)) goto out; diff --git a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c index 5f12d787d3..ff2c0e8721 100644 --- a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c +++ b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c @@ -47,6 +47,9 @@ static int dh_imx8_setup_ethaddr(void) if (dh_mac_is_in_env("ethaddr")) return 0; + if (dh_get_mac_is_enabled("ethernet0")) + return 0; + if (!dh_imx_get_mac_from_fuse(enetaddr)) goto out; @@ -66,6 +69,9 @@ static int dh_imx8_setup_eth1addr(void) if (dh_mac_is_in_env("eth1addr")) return 0; + if (dh_get_mac_is_enabled("ethernet1")) + return 0; + if (!dh_imx_get_mac_from_fuse(enetaddr)) goto increment_out; diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c index d1f662d970..079dfff038 100644 --- a/board/dhelectronics/dh_stm32mp1/board.c +++ b/board/dhelectronics/dh_stm32mp1/board.c @@ -128,6 +128,9 @@ static int dh_stm32_setup_ethaddr(void) if (dh_mac_is_in_env("ethaddr")) return 0; + if (dh_get_mac_is_enabled("ethernet0")) + return 0; + if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0")) return eth_env_set_enetaddr("ethaddr", enetaddr); @@ -141,6 +144,9 @@ static int dh_stm32_setup_eth1addr(void) if (dh_mac_is_in_env("eth1addr")) return 0; + if (dh_get_mac_is_enabled("ethernet1")) + return 0; + if (dh_stm32_mac_is_in_ks8851()) return 0;