[PATCH] board: dhelectronics: imx: Use second Ethernet MAC also from fuse
Peng Fan (OSS)
peng.fan at oss.nxp.com
Fri Mar 20 14:41:34 CET 2026
Hi Christoph,
> Subject: [PATCH] board: dhelectronics: imx: Use second Ethernet MAC
> also from fuse
>
> When two Ethernet MAC addresses are fused, the first MAC address is
> incremented by one and used for the second MAC address. This causes
> the second fused MAC address to be ignored. Change this so that the
> second fused MAC address will be used.
I may miss something, would you please help explain a bit on why
the second fused mac address is ignored?
Thanks,
Peng.
> Keep the old behavior if there isn't any second Ethernet MAC defined
> and only the first MAC address is fused but not the second. In this case
> use the fused MAC address incremented by one, for the second MAC
> address.
>
> Signed-off-by: Christoph Niedermaier <cniedermaier at dh-
> electronics.com>
> ---
> Cc: Marek Vasut <marex at nabladev.com>
> Cc: Patrice Chotard <patrice.chotard at foss.st.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Sam Protsenko <semen.protsenko at linaro.org>
> Cc: Tom Rini <trini at konsulko.com>
> Cc: u-boot at dh-electronics.com
> ---
> board/dhelectronics/common/dh_imx.c | 4 ++--
> board/dhelectronics/common/dh_imx.h | 3 ++-
> board/dhelectronics/dh_imx6/dh_imx6.c | 2 +-
> board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c | 13
> ++++++++++---
> 4 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/board/dhelectronics/common/dh_imx.c
> b/board/dhelectronics/common/dh_imx.c
> index 3d6487dd0d8..308cdb5b002 100644
> --- a/board/dhelectronics/common/dh_imx.c
> +++ b/board/dhelectronics/common/dh_imx.c
> @@ -10,13 +10,13 @@
> #include <net.h>
> #include "dh_imx.h"
>
> -int dh_imx_get_mac_from_fuse(unsigned char *enetaddr)
> +int dh_imx_get_mac_from_fuse(int dev_id, unsigned char *enetaddr)
> {
> /*
> * If IIM fuses contain valid MAC address, use it.
> * The IIM MAC address fuses are NOT programmed by default.
> */
> - imx_get_mac_from_fuse(0, enetaddr);
> + imx_get_mac_from_fuse(dev_id, enetaddr);
> if (!is_valid_ethaddr(enetaddr))
> return -EINVAL;
>
> diff --git a/board/dhelectronics/common/dh_imx.h
> b/board/dhelectronics/common/dh_imx.h
> index 284f8637fb8..cb51a2f6eb2 100644
> --- a/board/dhelectronics/common/dh_imx.h
> +++ b/board/dhelectronics/common/dh_imx.h
> @@ -6,7 +6,8 @@
> /*
> * dh_imx_get_mac_from_fuse - Get MAC address from fuse and write
> it to env
> *
> + * @dev_id: index of MAC address in fuse (starts with 0)
> * @enetaddr: buffer where address is to be stored
> * Return: 0 if OK, other value on error
> */
> -int dh_imx_get_mac_from_fuse(unsigned char *enetaddr);
> +int dh_imx_get_mac_from_fuse(int dev_id, unsigned char *enetaddr);
> diff --git a/board/dhelectronics/dh_imx6/dh_imx6.c
> b/board/dhelectronics/dh_imx6/dh_imx6.c
> index 234824b38c2..5806a03ed17 100644
> --- a/board/dhelectronics/dh_imx6/dh_imx6.c
> +++ b/board/dhelectronics/dh_imx6/dh_imx6.c
> @@ -94,7 +94,7 @@ int dh_setup_mac_address(struct
> eeprom_id_page *eip)
> if (dh_get_mac_is_enabled("ethernet0"))
> return 0;
>
> - if (!dh_imx_get_mac_from_fuse(enetaddr))
> + if (!dh_imx_get_mac_from_fuse(0, enetaddr))
> goto out;
>
> if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0")) diff --git
> a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
> b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
> index 5c35a5bf447..60d1e05b77f 100644
> --- a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
> +++ b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
> @@ -50,7 +50,7 @@ static int dh_imx8_setup_ethaddr(struct
> eeprom_id_page *eip)
> if (dh_get_mac_is_enabled("ethernet0"))
> return 0;
>
> - if (!dh_imx_get_mac_from_fuse(enetaddr))
> + if (!dh_imx_get_mac_from_fuse(0, enetaddr))
> goto out;
>
> if (!dh_get_value_from_eeprom_buffer(DH_MAC0, enetaddr,
> sizeof(enetaddr), eip)) @@ -75,8 +75,8 @@ static int
> dh_imx8_setup_eth1addr(struct eeprom_id_page *eip)
> if (dh_get_mac_is_enabled("ethernet1"))
> return 0;
>
> - if (!dh_imx_get_mac_from_fuse(enetaddr))
> - goto increment_out;
> + if (!dh_imx_get_mac_from_fuse(1, enetaddr))
> + goto out;
>
> if (!dh_get_value_from_eeprom_buffer(DH_MAC1, enetaddr,
> sizeof(enetaddr), eip))
> goto out;
> @@ -92,6 +92,13 @@ static int dh_imx8_setup_eth1addr(struct
> eeprom_id_page *eip)
> if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
> goto increment_out;
>
> + /*
> + * If only the first MAC address is fused but not the second, use
> the
> + * fused MAC address incremented by one, for the second MAC
> address.
> + */
> + if (!dh_imx_get_mac_from_fuse(0, enetaddr))
> + goto increment_out;
> +
> return -ENXIO;
>
> increment_out:
> --
> 2.30.2
More information about the U-Boot
mailing list