diff mbox series

ARM: dts: stm32: Update eth1addr from EEPROM if eth1 present

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

Commit Message

Marek Vasut July 30, 2020, 11:34 p.m. UTC
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(-)

Comments

Patrice CHOTARD Aug. 13, 2020, 7:44 a.m. UTC | #1
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
Patrice CHOTARD Aug. 13, 2020, 10:02 a.m. UTC | #2
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 mbox series

Patch

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;
 }