Message ID | 20200730233450.81792-1-marex@denx.de |
---|---|
State | Accepted |
Commit | 9ff770b497300c9c7ecf54165b0281cec4c8fca7 |
Delegated to: | Patrice Chotard |
Headers | show |
Series | ARM: dts: stm32: Update eth1addr from EEPROM if eth1 present | expand |
Hi Marek On 7/31/20 1:34 AM, Marek Vasut wrote: > The STM32MP1 DHCOM has two ethernet interfaces, the on-SoM DWMAC and KS8851. > Set eth1addr for the KS8851 to a MAC address of the DWMAC incremented by 1. > The MAC of the DWMAC is set from on-SoM EEPROM already, but the MAC address > of KS8851 was left uninitialized, so fix this. > > Signed-off-by: Marek Vasut <marex@denx.de> > Cc: Patrice Chotard <patrice.chotard@st.com> > Cc: Patrick Delaunay <patrick.delaunay@st.com> > --- > arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 1 + > board/dhelectronics/dh_stm32mp1/board.c | 25 ++++++++++++++++++++-- > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi > index f96de9e7a3..92345b7ba3 100644 > --- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi > +++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi > @@ -18,6 +18,7 @@ > mmc1 = &sdmmc2; > spi0 = &qspi; > usb0 = &usbotg_hs; > + ethernet1 = &ksz8851; > }; > > config { > diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c > index 17dbf20d76..17018716fd 100644 > --- a/board/dhelectronics/dh_stm32mp1/board.c > +++ b/board/dhelectronics/dh_stm32mp1/board.c > @@ -84,11 +84,26 @@ DECLARE_GLOBAL_DATA_PTR; > int setup_mac_address(void) > { > unsigned char enetaddr[6]; > + bool skip_eth0 = false; > + bool skip_eth1 = false; > struct udevice *dev; > int off, ret; > > ret = eth_env_get_enetaddr("ethaddr", enetaddr); > if (ret) /* ethaddr is already set */ > + skip_eth0 = true; > + > + off = fdt_path_offset(gd->fdt_blob, "ethernet1"); > + if (off < 0) { > + /* ethernet1 is not present in the system */ > + skip_eth1 = true; > + } else { > + ret = eth_env_get_enetaddr("eth1addr", enetaddr); > + if (ret) /* eth1addr is already set */ > + skip_eth1 = true; > + } > + > + if (skip_eth0 && skip_eth1) > return 0; > > off = fdt_path_offset(gd->fdt_blob, "eeprom0"); > @@ -109,8 +124,14 @@ int setup_mac_address(void) > return ret; > } > > - if (is_valid_ethaddr(enetaddr)) > - eth_env_set_enetaddr("ethaddr", enetaddr); > + if (is_valid_ethaddr(enetaddr)) { > + if (!skip_eth0) > + eth_env_set_enetaddr("ethaddr", enetaddr); > + > + enetaddr[5]++; > + if (!skip_eth1) > + eth_env_set_enetaddr("eth1addr", enetaddr); > + } > > return 0; > } Reviewed-by: Patrice Chotard <patrice.chotard@st.com> Thanks Patrice
On 8/13/20 9:44 AM, Patrice CHOTARD wrote: > Hi Marek > > On 7/31/20 1:34 AM, Marek Vasut wrote: >> The STM32MP1 DHCOM has two ethernet interfaces, the on-SoM DWMAC and KS8851. >> Set eth1addr for the KS8851 to a MAC address of the DWMAC incremented by 1. >> The MAC of the DWMAC is set from on-SoM EEPROM already, but the MAC address >> of KS8851 was left uninitialized, so fix this. >> >> Signed-off-by: Marek Vasut <marex@denx.de> >> Cc: Patrice Chotard <patrice.chotard@st.com> >> Cc: Patrick Delaunay <patrick.delaunay@st.com> >> --- >> arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 1 + >> board/dhelectronics/dh_stm32mp1/board.c | 25 ++++++++++++++++++++-- >> 2 files changed, 24 insertions(+), 2 deletions(-) Applied on u-boot-stm/master Thanks >> >> diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi >> index f96de9e7a3..92345b7ba3 100644 >> --- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi >> +++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi >> @@ -18,6 +18,7 @@ >> mmc1 = &sdmmc2; >> spi0 = &qspi; >> usb0 = &usbotg_hs; >> + ethernet1 = &ksz8851; >> }; >> >> config { >> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c >> index 17dbf20d76..17018716fd 100644 >> --- a/board/dhelectronics/dh_stm32mp1/board.c >> +++ b/board/dhelectronics/dh_stm32mp1/board.c >> @@ -84,11 +84,26 @@ DECLARE_GLOBAL_DATA_PTR; >> int setup_mac_address(void) >> { >> unsigned char enetaddr[6]; >> + bool skip_eth0 = false; >> + bool skip_eth1 = false; >> struct udevice *dev; >> int off, ret; >> >> ret = eth_env_get_enetaddr("ethaddr", enetaddr); >> if (ret) /* ethaddr is already set */ >> + skip_eth0 = true; >> + >> + off = fdt_path_offset(gd->fdt_blob, "ethernet1"); >> + if (off < 0) { >> + /* ethernet1 is not present in the system */ >> + skip_eth1 = true; >> + } else { >> + ret = eth_env_get_enetaddr("eth1addr", enetaddr); >> + if (ret) /* eth1addr is already set */ >> + skip_eth1 = true; >> + } >> + >> + if (skip_eth0 && skip_eth1) >> return 0; >> >> off = fdt_path_offset(gd->fdt_blob, "eeprom0"); >> @@ -109,8 +124,14 @@ int setup_mac_address(void) >> return ret; >> } >> >> - if (is_valid_ethaddr(enetaddr)) >> - eth_env_set_enetaddr("ethaddr", enetaddr); >> + if (is_valid_ethaddr(enetaddr)) { >> + if (!skip_eth0) >> + eth_env_set_enetaddr("ethaddr", enetaddr); >> + >> + enetaddr[5]++; >> + if (!skip_eth1) >> + eth_env_set_enetaddr("eth1addr", enetaddr); >> + } >> >> return 0; >> } > Reviewed-by: Patrice Chotard <patrice.chotard@st.com> > > Thanks > > Patrice >
diff --git a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi index f96de9e7a3..92345b7ba3 100644 --- a/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi +++ b/arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi @@ -18,6 +18,7 @@ mmc1 = &sdmmc2; spi0 = &qspi; usb0 = &usbotg_hs; + ethernet1 = &ksz8851; }; config { diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c index 17dbf20d76..17018716fd 100644 --- a/board/dhelectronics/dh_stm32mp1/board.c +++ b/board/dhelectronics/dh_stm32mp1/board.c @@ -84,11 +84,26 @@ DECLARE_GLOBAL_DATA_PTR; int setup_mac_address(void) { unsigned char enetaddr[6]; + bool skip_eth0 = false; + bool skip_eth1 = false; struct udevice *dev; int off, ret; ret = eth_env_get_enetaddr("ethaddr", enetaddr); if (ret) /* ethaddr is already set */ + skip_eth0 = true; + + off = fdt_path_offset(gd->fdt_blob, "ethernet1"); + if (off < 0) { + /* ethernet1 is not present in the system */ + skip_eth1 = true; + } else { + ret = eth_env_get_enetaddr("eth1addr", enetaddr); + if (ret) /* eth1addr is already set */ + skip_eth1 = true; + } + + if (skip_eth0 && skip_eth1) return 0; off = fdt_path_offset(gd->fdt_blob, "eeprom0"); @@ -109,8 +124,14 @@ int setup_mac_address(void) return ret; } - if (is_valid_ethaddr(enetaddr)) - eth_env_set_enetaddr("ethaddr", enetaddr); + if (is_valid_ethaddr(enetaddr)) { + if (!skip_eth0) + eth_env_set_enetaddr("ethaddr", enetaddr); + + enetaddr[5]++; + if (!skip_eth1) + eth_env_set_enetaddr("eth1addr", enetaddr); + } return 0; }
The STM32MP1 DHCOM has two ethernet interfaces, the on-SoM DWMAC and KS8851. Set eth1addr for the KS8851 to a MAC address of the DWMAC incremented by 1. The MAC of the DWMAC is set from on-SoM EEPROM already, but the MAC address of KS8851 was left uninitialized, so fix this. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Patrice Chotard <patrice.chotard@st.com> Cc: Patrick Delaunay <patrick.delaunay@st.com> --- arch/arm/dts/stm32mp15xx-dhcom-u-boot.dtsi | 1 + board/dhelectronics/dh_stm32mp1/board.c | 25 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-)