Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-28 Thread Christian Gmeiner
Hi Fabio

>
> > I took Josua's patch and modified it a bit.
> >
> > Does the attached patch fix Ethernet?
>
> I forgot to delete the old ethernet-phy nodes.
>
> Please try this one instead.
>
> If it works in U-Boot, please also test Ethernet in Linux as we are
> touching ft_board_setup().

I am able to load kernel and dtb via tftp and ssh into a nfs debian rootfs.

Thanks a lot - all my problems are solved :)

-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info/privacypolicy


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Fabio Estevam
On Wed, Mar 27, 2024 at 6:04 PM Fabio Estevam  wrote:

> I took Josua's patch and modified it a bit.
>
> Does the attached patch fix Ethernet?

I forgot to delete the old ethernet-phy nodes.

Please try this one instead.

If it works in U-Boot, please also test Ethernet in Linux as we are
touching ft_board_setup().
From 5af15e698ad89fac3cc3433ac4ac87bb10bc014d Mon Sep 17 00:00:00 2001
From: Josua Mayer 
Date: Wed, 27 Mar 2024 17:58:47 -0300
Subject: [PATCH] mx6cuboxi: Fix Ethernet after DT sync with Linux

The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
addresses. U-Boot needs to auto-detect which phy is actually present,
and at which address it is responding.

Auto-detection from multiple phy nodes specified in device-tree does not
currently work correct. As a work-around merge all three possible phys
into one node with the special address 0x which indicates to the
generic phy driver to probe all addresses.
Also fixup this fake address before booting Linux, *if* booting with
U-Boot's internal dtb.

Signed-off-by: Josua Mayer 
[fabio: Added the changes to imx6qdl-sr-som-u-boot.dtsi.]
Signed-off-by: Fabio Estevam 
---
 ...qdl-hummingboard2-emmc-som-v15-u-boot.dtsi |  1 +
 arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi   | 40 +++
 board/solidrun/mx6cuboxi/mx6cuboxi.c  |  8 +++-
 3 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi

diff --git a/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi b/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
index e9b188ed6587..358cf8abc4ff 100644
--- a/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
+++ b/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0+
 
 #include "imx6qdl-u-boot.dtsi"
+#include "imx6qdl-sr-som-u-boot.dtsi"
 
 / {
 	board-detect {
diff --git a/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi b/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi
new file mode 100644
index ..4c5f043ea92a
--- /dev/null
+++ b/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi
@@ -0,0 +1,40 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+
+#include 
+
+ {
+	pinctrl-names = "default";
+	pinctrl-0 = <_microsom_enet_ar8035>;
+	phy-handle = <>;
+	phy-mode = "rgmii-id";
+
+	/*
+	 * The PHY seems to require a long-enough reset duration to avoid
+	 * some rare issues where the PHY gets stuck in an inconsistent and
+	 * non-functional state at boot-up. 10ms proved to be fine .
+	 */
+	phy-reset-duration = <10>;
+	phy-reset-gpios = < 15 GPIO_ACTIVE_LOW>;
+	status = "okay";
+
+	mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		/delete-node/ ethernet-phy@1;
+		/delete-node/ ethernet-phy@4;
+
+		phy: ethernet-phy@0 {
+			/*
+			 * The PHY can appear either:
+			 * - AR8035: at address 0 or 4
+			 * - ADIN1300: at address 1
+			 * Actual address being detected at runtime.
+			 */
+			reg = <0x>;
+			qca,clk-out-frequency = <12500>;
+			qca,smarteee-tw-us-1g = <24>;
+			adi,phy-output-clock = "125mhz-free-running";
+		};
+	};
+};
diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c
index 8edabf4404c2..fbab39e800a6 100644
--- a/board/solidrun/mx6cuboxi/mx6cuboxi.c
+++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
@@ -447,7 +447,7 @@ static int find_ethernet_phy(void)
  */
 int ft_board_setup(void *fdt, struct bd_info *bd)
 {
-	int node_phy0, node_phy1, node_phy4;
+	int node_phy, node_phy0, node_phy1, node_phy4;
 	int ret, phy;
 	bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = false;
 	enum board_type board;
@@ -479,6 +479,12 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
 		return 0;
 	}
 
+	// update U-Boot's own unified phy node phy address, if present
+	node_phy = fdt_path_offset(fdt, "/soc/bus@210/ethernet@2188000/mdio/phy");
+	ret = fdt_setprop_u32(fdt, node_phy, "reg", phy);
+	if (ret < 0)
+		pr_err("%s: failed to update unified PHY node address\n", __func__);
+
 	// update all phy nodes status
 	node_phy0 = fdt_path_offset(fdt, "/soc/bus@210/ethernet@2188000/mdio/ethernet-phy@0");
 	ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ? "okay" : "disabled");
-- 
2.34.1



Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Fabio Estevam
Hi Christian,

On Wed, Mar 27, 2024 at 4:29 PM Fabio Estevam  wrote:

> Please make these changes in a new imx6qdl-sr-som-u-boot.dtsi file instead.

I took Josua's patch and modified it a bit.

Does the attached patch fix Ethernet?
From 24f57c3cd8b1a2b113bcffad26e2bb1b9b582e35 Mon Sep 17 00:00:00 2001
From: Josua Mayer 
Date: Wed, 27 Mar 2024 17:58:47 -0300
Subject: [PATCH] mx6cuboxi: Fix Ethernet after DT sync with Linux

The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
addresses. U-Boot needs to auto-detect which phy is actually present,
and at which address it is responding.

Auto-detection from multiple phy nodes specified in device-tree does not
currently work correct. As a work-around merge all three possible phys
into one node with the special address 0x which indicates to the
generic phy driver to probe all addresses.
Also fixup this fake address before booting Linux, *if* booting with
U-Boot's internal dtb.

Signed-off-by: Josua Mayer 
[fabio: Added the changes to imx6qdl-sr-som-u-boot.dtsi.]
Signed-off-by: Fabio Estevam 
---
 ...qdl-hummingboard2-emmc-som-v15-u-boot.dtsi |  1 +
 arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi   | 76 +++
 board/solidrun/mx6cuboxi/mx6cuboxi.c  |  8 +-
 3 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi

diff --git a/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi b/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
index e9b188ed6587..358cf8abc4ff 100644
--- a/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
+++ b/arch/arm/dts/imx6qdl-hummingboard2-emmc-som-v15-u-boot.dtsi
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0+
 
 #include "imx6qdl-u-boot.dtsi"
+#include "imx6qdl-sr-som-u-boot.dtsi"
 
 / {
 	board-detect {
diff --git a/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi b/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi
new file mode 100644
index ..3f2d92be7061
--- /dev/null
+++ b/arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2013,2014 Russell King
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ *  a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ *  b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include 
+
+ {
+	pinctrl-names = "default";
+	pinctrl-0 = <_microsom_enet_ar8035>;
+	phy-handle = <>;
+	phy-mode = "rgmii-id";
+
+	/*
+	 * The PHY seems to require a long-enough reset duration to avoid
+	 * some rare issues where the PHY gets stuck in an inconsistent and
+	 * non-functional state at boot-up. 10ms proved to be fine .
+	 */
+	phy-reset-duration = <10>;
+	phy-reset-gpios = < 15 GPIO_ACTIVE_LOW>;
+	status = "okay";
+
+	mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+
+		phy: ethernet-phy@0 {
+			/*
+			 * The PHY can appear either:
+			 * - AR8035: at address 0 or 4
+			 * - ADIN1300: at address 1
+			 * Actual address being detected at runtime.
+			 */
+			reg = <0x>;
+			qca,clk-out-frequency = <12500>;
+			qca,smarteee-tw-us-1g = <24>;
+			adi,phy-output-clock = "125mhz-free-running";
+		};
+	};
+};
diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c
index 8edabf4404c2..fbab39e800a6 100644
--- 

Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Fabio Estevam
Hi Christian,

On Wed, Mar 27, 2024 at 9:06 AM Josua Mayer  wrote:
>
> Cc: christian.gmei...@gmail.com
>
> Hi Christian,
>
> please take a look at this patch, I suspect it will (hack-)fix your
> ethernet issue.
>
> Unfortunately I had no time to revisit this yet and implement a correct 
> solution.

> >  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---
> >  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
> >  2 files changed, 14 insertions(+), 22 deletions(-)
> >
> > diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
> > b/arch/arm/dts/imx6qdl-sr-som.dtsi
> > index ce543e325c..2d7cbc26b3 100644
> > ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
> > +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi

Please make these changes in a new imx6qdl-sr-som-u-boot.dtsi file instead.

This way, the changes will not get lost after a new sync with Linux or
if OF_UPSTREAM is used.


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Josua Mayer
Am 27.03.24 um 16:55 schrieb Christian Gmeiner:
> Hi Josua
>
>>> Hi Josua
>>>
>>> My bisect showed me that after a device-tree sync the ethernet broke.
>>>
 please take a look at this patch, I suspect it will (hack-)fix your
 ethernet issue.

>>> Yes.. it fixes the problem I am seeing.
>>>
 Unfortunately I had no time to revisit this yet and implement a correct 
 solution.

>>> Would it be okay for you if I look into a proper solution?
>> Sure. I am swamped by other products at the moment.
>>
>> However I will provide a rough overview what needs to be done:
>>
>> Background: i.MX6 SoMs originally had a an atheros phy at unstable address,
>> either 0 or 4 depending on electrical noise on floating configuration 
>> signals.
>>
> Would it be possible to set those configuration signals from the MX6
> to a defined state and
> then toggle the PHY reset , to force correct PHY address?
There is no cpu control over the signals responsible for phy address.
>
>> Linux had solved this by placing 2 phy nodes in device-tree.
>> During boot the kernel would attempt in order to probe the phys,
>> then link the successful one to the ethernet netdev.
>> As a side-effect there is always an error in the kernel log for one of the
>> addresses.
>>
>> U-Boot had something similar in that with a special address (I think 0xff)
>> in device-tree, the code will probe mdio bus for all addresses, but only
>> for a single phy node in dts.
>>
>> With release of SoM 2.0 we changed to an analog devices phy at address 1,
>> which most importantly uses a different driver, and requires a different 
>> description
>> in device-tree.
>>
>> When adding this new phy, as a third node in device-tree, kernel maintainers
>> requested a better solution, and we got u-boot to runtime patch dtb to update
>> status properties of the dtb for linux, after probing mdio bus for phys.
>>
> Got it.
>
>> Now - what u-boot needs to do is probe the mdio bus, and then runtime-patch 
>> its own DTB.
>> Either with status properties, or for adding the phy-handle property (not 
>> sure which method will work).
>>
> We could patch DTB in SPL for U-Boot proper but doing a mdio scan in
> SPL looks like a lot of work.
In SPL I agree this would be quite painful.
Maybe it can be done in u-boot proper, at the right moment.
We basically need to intersept the place where ethernet (controller?) driver
is looking for the phy-handle property or probing a phy.

Maybe there is already a call-back for board-specific code,
or one could be added.

> Do
> you know if there is a pull up/down resistor etc. that I could use to
> detect pre SoM 2.0 and SoM 2.0?
>
> Is this what board_type() does?
> Is HummingBoard2 == SoM 2.0?
No, this is carrier-board detection.
For the SoM we have nothing.
PHY mdio address is actually the best indication we have.
>
>> This somehow has to happen after probing mdio driver, but before probing 
>> ethernet driver.
>>
>>> I have a
>>> handful of such devices here
>>> that are already or will be used in a CI farm so I am interested in
>>> using the latest U-Boot for them.
>>>
 sincerely
 Josua Mayer

 Am 28.07.22 um 09:08 schrieb Josua Mayer:
> Please hold off merging this patch until someone tested it, I can not do 
> so this week.
> @Tom Can you confirm if this fixes the networking on your Cubox?
> Also note that the phy-handle property may or may not be required, I am 
> not sure.
>
> sincerely
> Josua Mayer
>
> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
>
> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> addresses. U-Boot needs to auto-detect which phy is actually present,
> and at which address it is responding.
>
> Auto-detection from multiple phy nodes specified in device-tree does 
> not
> currently work correct. As a work-around merge all three possible phys
> into one node with the special address 0x which indicates to 
> the
> generic phy driver to probe all addresses.
> Also fixup this fake address before booting Linux, *if* booting with
> U-Boot's internal dtb.
>
> Signed-off-by: Josua Mayer 
> Fixes: d0399a46e7cd
> ---
>  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 
> +---
>  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
>  2 files changed, 14 insertions(+), 22 deletions(-)
>
> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
> b/arch/arm/dts/imx6qdl-sr-som.dtsi
> index ce543e325c..2d7cbc26b3 100644
> ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> @@ -53,6 +53,7 @@
>   {
> pinctrl-names = "default";
> pinctrl-0 = <_microsom_enet_ar8035>;
> +   phy-handle = <>;
> phy-mode = "rgmii-id";
>
> /*

Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Christian Gmeiner
Hi Josua

> > Hi Josua
> >
> > My bisect showed me that after a device-tree sync the ethernet broke.
> >
> >> please take a look at this patch, I suspect it will (hack-)fix your
> >> ethernet issue.
> >>
> > Yes.. it fixes the problem I am seeing.
> >
> >> Unfortunately I had no time to revisit this yet and implement a correct 
> >> solution.
> >>
> > Would it be okay for you if I look into a proper solution?
>
> Sure. I am swamped by other products at the moment.
>
> However I will provide a rough overview what needs to be done:
>
> Background: i.MX6 SoMs originally had a an atheros phy at unstable address,
> either 0 or 4 depending on electrical noise on floating configuration signals.
>

Would it be possible to set those configuration signals from the MX6
to a defined state and
then toggle the PHY reset , to force correct PHY address?

> Linux had solved this by placing 2 phy nodes in device-tree.
> During boot the kernel would attempt in order to probe the phys,
> then link the successful one to the ethernet netdev.
> As a side-effect there is always an error in the kernel log for one of the
> addresses.
>
> U-Boot had something similar in that with a special address (I think 0xff)
> in device-tree, the code will probe mdio bus for all addresses, but only
> for a single phy node in dts.
>
> With release of SoM 2.0 we changed to an analog devices phy at address 1,
> which most importantly uses a different driver, and requires a different 
> description
> in device-tree.
>
> When adding this new phy, as a third node in device-tree, kernel maintainers
> requested a better solution, and we got u-boot to runtime patch dtb to update
> status properties of the dtb for linux, after probing mdio bus for phys.
>

Got it.

>
> Now - what u-boot needs to do is probe the mdio bus, and then runtime-patch 
> its own DTB.
> Either with status properties, or for adding the phy-handle property (not 
> sure which method will work).
>

We could patch DTB in SPL for U-Boot proper but doing a mdio scan in
SPL looks like a lot of work. Do
you know if there is a pull up/down resistor etc. that I could use to
detect pre SoM 2.0 and SoM 2.0?

Is this what board_type() does?
Is HummingBoard2 == SoM 2.0?

> This somehow has to happen after probing mdio driver, but before probing 
> ethernet driver.
>
> > I have a
> > handful of such devices here
> > that are already or will be used in a CI farm so I am interested in
> > using the latest U-Boot for them.
> >
> >> sincerely
> >> Josua Mayer
> >>
> >> Am 28.07.22 um 09:08 schrieb Josua Mayer:
> >>> Please hold off merging this patch until someone tested it, I can not do 
> >>> so this week.
> >>> @Tom Can you confirm if this fixes the networking on your Cubox?
> >>> Also note that the phy-handle property may or may not be required, I am 
> >>> not sure.
> >>>
> >>> sincerely
> >>> Josua Mayer
> >>>
> >>> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
> >>>
> >>> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> >>> addresses. U-Boot needs to auto-detect which phy is actually present,
> >>> and at which address it is responding.
> >>>
> >>> Auto-detection from multiple phy nodes specified in device-tree does 
> >>> not
> >>> currently work correct. As a work-around merge all three possible phys
> >>> into one node with the special address 0x which indicates to 
> >>> the
> >>> generic phy driver to probe all addresses.
> >>> Also fixup this fake address before booting Linux, *if* booting with
> >>> U-Boot's internal dtb.
> >>>
> >>> Signed-off-by: Josua Mayer 
> >>> Fixes: d0399a46e7cd
> >>> ---
> >>>  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 
> >>> +---
> >>>  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
> >>>  2 files changed, 14 insertions(+), 22 deletions(-)
> >>>
> >>> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
> >>> b/arch/arm/dts/imx6qdl-sr-som.dtsi
> >>> index ce543e325c..2d7cbc26b3 100644
> >>> ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
> >>> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> >>> @@ -53,6 +53,7 @@
> >>>   {
> >>> pinctrl-names = "default";
> >>> pinctrl-0 = <_microsom_enet_ar8035>;
> >>> +   phy-handle = <>;
> >>> phy-mode = "rgmii-id";
> >>>
> >>> /*
> >>> @@ -68,30 +69,17 @@
> >>> #address-cells = <1>;
> >>> #size-cells = <0>;
> >>>
> >>> -   /*
> >>> -* The PHY can appear at either address 0 or 4 due to 
> >>> the
> >>> -* configuration (LED) pin not being pulled 
> >>> sufficiently.
> >>> -*/
> >>> -   ethernet-phy@0 {
> >>> -   reg = <0>;
> >>> +   phy: ethernet-phy@0 {
> >>> +   /*
> >>> +* The PHY can appear either:
> >>> + 

Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Josua Mayer
Am 27.03.24 um 13:17 schrieb Christian Gmeiner:
> Hi Josua
>
> My bisect showed me that after a device-tree sync the ethernet broke.
>
>> please take a look at this patch, I suspect it will (hack-)fix your
>> ethernet issue.
>>
> Yes.. it fixes the problem I am seeing.
>
>> Unfortunately I had no time to revisit this yet and implement a correct 
>> solution.
>>
> Would it be okay for you if I look into a proper solution?

Sure. I am swamped by other products at the moment.

However I will provide a rough overview what needs to be done:

Background: i.MX6 SoMs originally had a an atheros phy at unstable address,
either 0 or 4 depending on electrical noise on floating configuration signals.

Linux had solved this by placing 2 phy nodes in device-tree.
During boot the kernel would attempt in order to probe the phys,
then link the successful one to the ethernet netdev.
As a side-effect there is always an error in the kernel log for one of the
addresses.

U-Boot had something similar in that with a special address (I think 0xff)
in device-tree, the code will probe mdio bus for all addresses, but only
for a single phy node in dts.

With release of SoM 2.0 we changed to an analog devices phy at address 1,
which most importantly uses a different driver, and requires a different 
description
in device-tree.

When adding this new phy, as a third node in device-tree, kernel maintainers
requested a better solution, and we got u-boot to runtime patch dtb to update
status properties of the dtb for linux, after probing mdio bus for phys.


Now - what u-boot needs to do is probe the mdio bus, and then runtime-patch its 
own DTB.
Either with status properties, or for adding the phy-handle property (not sure 
which method will work).

This somehow has to happen after probing mdio driver, but before probing 
ethernet driver.

> I have a
> handful of such devices here
> that are already or will be used in a CI farm so I am interested in
> using the latest U-Boot for them.
>
>> sincerely
>> Josua Mayer
>>
>> Am 28.07.22 um 09:08 schrieb Josua Mayer:
>>> Please hold off merging this patch until someone tested it, I can not do so 
>>> this week.
>>> @Tom Can you confirm if this fixes the networking on your Cubox?
>>> Also note that the phy-handle property may or may not be required, I am not 
>>> sure.
>>>
>>> sincerely
>>> Josua Mayer
>>>
>>> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
>>>
>>> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
>>> addresses. U-Boot needs to auto-detect which phy is actually present,
>>> and at which address it is responding.
>>>
>>> Auto-detection from multiple phy nodes specified in device-tree does not
>>> currently work correct. As a work-around merge all three possible phys
>>> into one node with the special address 0x which indicates to the
>>> generic phy driver to probe all addresses.
>>> Also fixup this fake address before booting Linux, *if* booting with
>>> U-Boot's internal dtb.
>>>
>>> Signed-off-by: Josua Mayer 
>>> Fixes: d0399a46e7cd
>>> ---
>>>  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---
>>>  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
>>>  2 files changed, 14 insertions(+), 22 deletions(-)
>>>
>>> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
>>> b/arch/arm/dts/imx6qdl-sr-som.dtsi
>>> index ce543e325c..2d7cbc26b3 100644
>>> ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
>>> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
>>> @@ -53,6 +53,7 @@
>>>   {
>>> pinctrl-names = "default";
>>> pinctrl-0 = <_microsom_enet_ar8035>;
>>> +   phy-handle = <>;
>>> phy-mode = "rgmii-id";
>>>
>>> /*
>>> @@ -68,30 +69,17 @@
>>> #address-cells = <1>;
>>> #size-cells = <0>;
>>>
>>> -   /*
>>> -* The PHY can appear at either address 0 or 4 due to 
>>> the
>>> -* configuration (LED) pin not being pulled 
>>> sufficiently.
>>> -*/
>>> -   ethernet-phy@0 {
>>> -   reg = <0>;
>>> +   phy: ethernet-phy@0 {
>>> +   /*
>>> +* The PHY can appear either:
>>> +* - AR8035: at address 0 or 4
>>> +* - ADIN1300: at address 1
>>> +* Actual address being detected at runtime.
>>> +*/
>>> +   reg = <0x>;
>>> qca,clk-out-frequency = <12500>;
>>> qca,smarteee-tw-us-1g = <24>;
>>> -   };
>>> -
>>> -   ethernet-phy@4 {
>>> -   reg = <4>;
>>> -   qca,clk-out-frequency = <12500>;
>>> -   

Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Christian Gmeiner
Hi Josua

My bisect showed me that after a device-tree sync the ethernet broke.

>
> please take a look at this patch, I suspect it will (hack-)fix your
> ethernet issue.
>

Yes.. it fixes the problem I am seeing.

>
> Unfortunately I had no time to revisit this yet and implement a correct 
> solution.
>

Would it be okay for you if I look into a proper solution? I have a
handful of such devices here
that are already or will be used in a CI farm so I am interested in
using the latest U-Boot for them.

> sincerely
> Josua Mayer
>
> Am 28.07.22 um 09:08 schrieb Josua Mayer:
> > Please hold off merging this patch until someone tested it, I can not do so 
> > this week.
> > @Tom Can you confirm if this fixes the networking on your Cubox?
> > Also note that the phy-handle property may or may not be required, I am not 
> > sure.
> >
> > sincerely
> > Josua Mayer
> >
> > On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
> >
> > The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> > addresses. U-Boot needs to auto-detect which phy is actually present,
> > and at which address it is responding.
> >
> > Auto-detection from multiple phy nodes specified in device-tree does not
> > currently work correct. As a work-around merge all three possible phys
> > into one node with the special address 0x which indicates to the
> > generic phy driver to probe all addresses.
> > Also fixup this fake address before booting Linux, *if* booting with
> > U-Boot's internal dtb.
> >
> > Signed-off-by: Josua Mayer 
> > Fixes: d0399a46e7cd
> > ---
> >  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---
> >  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
> >  2 files changed, 14 insertions(+), 22 deletions(-)
> >
> > diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
> > b/arch/arm/dts/imx6qdl-sr-som.dtsi
> > index ce543e325c..2d7cbc26b3 100644
> > ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
> > +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> > @@ -53,6 +53,7 @@
> >   {
> > pinctrl-names = "default";
> > pinctrl-0 = <_microsom_enet_ar8035>;
> > +   phy-handle = <>;
> > phy-mode = "rgmii-id";
> >
> > /*
> > @@ -68,30 +69,17 @@
> > #address-cells = <1>;
> > #size-cells = <0>;
> >
> > -   /*
> > -* The PHY can appear at either address 0 or 4 due to 
> > the
> > -* configuration (LED) pin not being pulled 
> > sufficiently.
> > -*/
> > -   ethernet-phy@0 {
> > -   reg = <0>;
> > +   phy: ethernet-phy@0 {
> > +   /*
> > +* The PHY can appear either:
> > +* - AR8035: at address 0 or 4
> > +* - ADIN1300: at address 1
> > +* Actual address being detected at runtime.
> > +*/
> > +   reg = <0x>;
> > qca,clk-out-frequency = <12500>;
> > qca,smarteee-tw-us-1g = <24>;
> > -   };
> > -
> > -   ethernet-phy@4 {
> > -   reg = <4>;
> > -   qca,clk-out-frequency = <12500>;
> > -   qca,smarteee-tw-us-1g = <24>;
> > -   };
> > -
> > -   /*
> > -* ADIN1300 (som rev 1.9 or later) is always at address 
> > 1. It
> > -* will be enabled automatically by U-Boot if detected.
> > -*/
> > -   ethernet-phy@1 {
> > -   reg = <1>;
> > adi,phy-output-clock = "125mhz-free-running";
> > -   status = "disabled";
> > };
> > };
> >  };
> > diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c 
> > b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > index debf4f6a3b..52172a03b1 100644
> > ---_a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > @@ -446,7 +446,7 @@ static int find_ethernet_phy(void)
> >   */
> >  int ft_board_setup(void *fdt, struct bd_info *bd)
> >  {
> > -   int node_phy0, node_phy1, node_phy4;
> > +   int node_phy, node_phy0, node_phy1, node_phy4;
> > int ret, phy;
> > bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = 
> > false;
> > enum board_type board;
> > @@ -478,6 +478,10 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
> > return 0;
> > }
> >
> > +   // update U-Boot's own unified phy node phy address, if present
> > +   node_phy = fdt_path_offset(fdt, 

Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2024-03-27 Thread Josua Mayer
Cc: christian.gmei...@gmail.com

Hi Christian,

please take a look at this patch, I suspect it will (hack-)fix your
ethernet issue.

Unfortunately I had no time to revisit this yet and implement a correct 
solution.

sincerely
Josua Mayer

Am 28.07.22 um 09:08 schrieb Josua Mayer:
> Please hold off merging this patch until someone tested it, I can not do so 
> this week.
> @Tom Can you confirm if this fixes the networking on your Cubox?
> Also note that the phy-handle property may or may not be required, I am not 
> sure.
>
> sincerely
> Josua Mayer
>
> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
>
> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> addresses. U-Boot needs to auto-detect which phy is actually present,
> and at which address it is responding.
>
> Auto-detection from multiple phy nodes specified in device-tree does not
> currently work correct. As a work-around merge all three possible phys
> into one node with the special address 0x which indicates to the
> generic phy driver to probe all addresses.
> Also fixup this fake address before booting Linux, *if* booting with
> U-Boot's internal dtb.
>
> Signed-off-by: Josua Mayer 
> Fixes: d0399a46e7cd
> ---
>  arch/arm/dts/imx6qdl-sr-som.dtsi     | 30 +---
>  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
>  2 files changed, 14 insertions(+), 22 deletions(-)
>
> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi 
> b/arch/arm/dts/imx6qdl-sr-som.dtsi
> index ce543e325c..2d7cbc26b3 100644
> ---_a/arch/arm/dts/imx6qdl-sr-som.dtsi
> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> @@ -53,6 +53,7 @@
>   {
>         pinctrl-names = "default";
>         pinctrl-0 = <_microsom_enet_ar8035>;
> +       phy-handle = <>;
>         phy-mode = "rgmii-id";
>
>         /*
> @@ -68,30 +69,17 @@
>                 #address-cells = <1>;
>                 #size-cells = <0>;
>
> -               /*
> -                * The PHY can appear at either address 0 or 4 due to the
> -                * configuration (LED) pin not being pulled sufficiently.
> -                */
> -               ethernet-phy@0 {
> -                       reg = <0>;
> +               phy: ethernet-phy@0 {
> +                       /*
> +                        * The PHY can appear either:
> +                        * - AR8035: at address 0 or 4
> +                        * - ADIN1300: at address 1
> +                        * Actual address being detected at runtime.
> +                        */
> +                       reg = <0x>;
>                         qca,clk-out-frequency = <12500>;
>                         qca,smarteee-tw-us-1g = <24>;
> -               };
> -
> -               ethernet-phy@4 {
> -                       reg = <4>;
> -                       qca,clk-out-frequency = <12500>;
> -                       qca,smarteee-tw-us-1g = <24>;
> -               };
> -
> -               /*
> -                * ADIN1300 (som rev 1.9 or later) is always at address 
> 1. It
> -                * will be enabled automatically by U-Boot if detected.
> -                */
> -               ethernet-phy@1 {
> -                       reg = <1>;
>                         adi,phy-output-clock = "125mhz-free-running";
> -                       status = "disabled";
>                 };
>         };
>  };
> diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c 
> b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> index debf4f6a3b..52172a03b1 100644
> ---_a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> @@ -446,7 +446,7 @@ static int find_ethernet_phy(void)
>   */
>  int ft_board_setup(void *fdt, struct bd_info *bd)
>  {
> -       int node_phy0, node_phy1, node_phy4;
> +       int node_phy, node_phy0, node_phy1, node_phy4;
>         int ret, phy;
>         bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = 
> false;
>         enum board_type board;
> @@ -478,6 +478,10 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
>                 return 0;
>         }
>
> +       // update U-Boot's own unified phy node phy address, if present
> +       node_phy = fdt_path_offset(fdt, 
> "/soc/bus@210/ethernet@2188000/mdio/phy");
> +       ret = fdt_setprop_u32(fdt, node_phy, "reg", phy);
> +
>         // update all phy nodes status
>         node_phy0 = fdt_path_offset(fdt, 
> "/soc/bus@210/ethernet@2188000/mdio/ethernet-phy@0");
>         ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ? 
> "okay" : "disabled");
> --_
> 2.37.1
>


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Tom Rini
On Thu, Jul 28, 2022 at 08:51:01AM -0300, Fabio Estevam wrote:
> Hi Tom,
> 
> On Thu, Jul 28, 2022 at 8:41 AM Tom Rini  wrote:
> >
> > On Thu, Jul 28, 2022 at 10:05:40AM +0300, Josua Mayer wrote:
> >
> > > The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> > > addresses. U-Boot needs to auto-detect which phy is actually present,
> > > and at which address it is responding.
> > >
> > > Auto-detection from multiple phy nodes specified in device-tree does not
> > > currently work correct. As a work-around merge all three possible phys
> > > into one node with the special address 0x which indicates to the
> > > generic phy driver to probe all addresses.
> > > Also fixup this fake address before booting Linux, *if* booting with
> > > U-Boot's internal dtb.
> > >
> > > Signed-off-by: Josua Mayer 
> > > Fixes: d0399a46e7cd
> >
> > Tested-by: Tom Rini 
> 
> It's great that it worked, but if we take the patch as-is, then we
> will run into issues again in the future
> when a new re-sync is done.

Agreed.

> I see two alternatives:
> 
> 1. Make the arch/arm/dts/imx6qdl-sr-som.dtsi changes into
> arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi, so that the main dtsi can
> still be used from Linux.
> 
> 2. Make the same dtsi work for both Linux and U-Boot.
> 
> What do you think?

If we can make #2 work that would be the best path forward I hope.

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Fabio Estevam
Hi Tom,

On Thu, Jul 28, 2022 at 8:41 AM Tom Rini  wrote:
>
> On Thu, Jul 28, 2022 at 10:05:40AM +0300, Josua Mayer wrote:
>
> > The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> > addresses. U-Boot needs to auto-detect which phy is actually present,
> > and at which address it is responding.
> >
> > Auto-detection from multiple phy nodes specified in device-tree does not
> > currently work correct. As a work-around merge all three possible phys
> > into one node with the special address 0x which indicates to the
> > generic phy driver to probe all addresses.
> > Also fixup this fake address before booting Linux, *if* booting with
> > U-Boot's internal dtb.
> >
> > Signed-off-by: Josua Mayer 
> > Fixes: d0399a46e7cd
>
> Tested-by: Tom Rini 

It's great that it worked, but if we take the patch as-is, then we
will run into issues again in the future
when a new re-sync is done.

I see two alternatives:

1. Make the arch/arm/dts/imx6qdl-sr-som.dtsi changes into
arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi, so that the main dtsi can
still be used from Linux.

2. Make the same dtsi work for both Linux and U-Boot.

What do you think?


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Tom Rini
On Thu, Jul 28, 2022 at 10:05:40AM +0300, Josua Mayer wrote:

> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> addresses. U-Boot needs to auto-detect which phy is actually present,
> and at which address it is responding.
> 
> Auto-detection from multiple phy nodes specified in device-tree does not
> currently work correct. As a work-around merge all three possible phys
> into one node with the special address 0x which indicates to the
> generic phy driver to probe all addresses.
> Also fixup this fake address before booting Linux, *if* booting with
> U-Boot's internal dtb.
> 
> Signed-off-by: Josua Mayer 
> Fixes: d0399a46e7cd

Tested-by: Tom Rini 

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Tom Rini
On Thu, Jul 28, 2022 at 07:08:35AM +, Josua Mayer wrote:
> Please hold off merging this patch until someone tested it, I can not do so
> this week.
> @Tom Can you confirm if this fixes the networking on your Cubox?
> Also note that the phy-handle property may or may not be required, I am not
> sure.

Ah, the patch email itself seems to have gotten lost, can you resend and
I'll test?  Thanks.

> 
> sincerely
> Josua Mayer
> 
> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
> 
> > The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> > addresses. U-Boot needs to auto-detect which phy is actually present,
> > and at which address it is responding.
> >
> > Auto-detection from multiple phy nodes specified in device-tree does not
> > currently work correct. As a work-around merge all three possible phys
> > into one node with the special address 0x which indicates to the
> > generic phy driver to probe all addresses.
> > Also fixup this fake address before booting Linux, *if* booting with
> > U-Boot's internal dtb.
> >
> > Signed-off-by: Josua Mayer 
> > Fixes: d0399a46e7cd
> > ---
> >  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---
> >  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
> >  2 files changed, 14 insertions(+), 22 deletions(-)
> >
> > diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi
> > b/arch/arm/dts/imx6qdl-sr-som.dtsi
> > index ce543e325c..2d7cbc26b3 100644
> > --- a/arch/arm/dts/imx6qdl-sr-som.dtsi
> > +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> > @@ -53,6 +53,7 @@
> >   {
> > pinctrl-names = "default";
> > pinctrl-0 = <_microsom_enet_ar8035>;
> > +   phy-handle = <>;
> > phy-mode = "rgmii-id";
> >
> > /*
> > @@ -68,30 +69,17 @@
> > #address-cells = <1>;
> > #size-cells = <0>;
> >
> > -   /*
> > -* The PHY can appear at either address 0 or 4 due to the
> > -* configuration (LED) pin not being pulled sufficiently.
> > -*/
> > -   ethernet-phy@0 {
> > -   reg = <0>;
> > +   phy: ethernet-phy@0 {
> > +   /*
> > +* The PHY can appear either:
> > +* - AR8035: at address 0 or 4
> > +* - ADIN1300: at address 1
> > +* Actual address being detected at runtime.
> > +*/
> > +   reg = <0x>;
> > qca,clk-out-frequency = <12500>;
> > qca,smarteee-tw-us-1g = <24>;
> > -   };
> > -
> > -   ethernet-phy@4 {
> > -   reg = <4>;
> > -   qca,clk-out-frequency = <12500>;
> > -   qca,smarteee-tw-us-1g = <24>;
> > -   };
> > -
> > -   /*
> > -* ADIN1300 (som rev 1.9 or later) is always at address 1.
> > It
> > -* will be enabled automatically by U-Boot if detected.
> > -*/
> > -   ethernet-phy@1 {
> > -   reg = <1>;
> > adi,phy-output-clock = "125mhz-free-running";
> > -   status = "disabled";
> > };
> > };
> >  };
> > diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > index debf4f6a3b..52172a03b1 100644
> > --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> > @@ -446,7 +446,7 @@ static int find_ethernet_phy(void)
> >   */
> >  int ft_board_setup(void *fdt, struct bd_info *bd)
> >  {
> > -   int node_phy0, node_phy1, node_phy4;
> > +   int node_phy, node_phy0, node_phy1, node_phy4;
> > int ret, phy;
> > bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = false;
> > enum board_type board;
> > @@ -478,6 +478,10 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
> > return 0;
> > }
> >
> > +   // update U-Boot's own unified phy node phy address, if present
> > +   node_phy = fdt_path_offset(fdt, "/soc/bus@210/ethernet@2188000
> > /mdio/phy");
> > +   ret = fdt_setprop_u32(fdt, node_phy, "reg", phy);
> > +
> > // update all phy nodes status
> > node_phy0 = fdt_path_offset(fdt, "/soc/bus@210
> > /ethernet@2188000/mdio/ethernet-phy@0");
> > ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ?
> > "okay" : "disabled");
> > --
> > 2.37.1
> >
> >

-- 
Tom


signature.asc
Description: PGP signature


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Fabio Estevam
Hi Josua,

On Thu, Jul 28, 2022 at 4:08 AM Josua Mayer  wrote:
>
> Please hold off merging this patch until someone tested it, I can not do so 
> this week.
> @Tom Can you confirm if this fixes the networking on your Cubox?
> Also note that the phy-handle property may or may not be required, I am not 
> sure.
>
> sincerely
> Josua Mayer
>
> On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:
>>
>> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
>> addresses. U-Boot needs to auto-detect which phy is actually present,
>> and at which address it is responding.
>>
>> Auto-detection from multiple phy nodes specified in device-tree does not
>> currently work correct. As a work-around merge all three possible phys
>> into one node with the special address 0x which indicates to the
>> generic phy driver to probe all addresses.
>> Also fixup this fake address before booting Linux, *if* booting with
>> U-Boot's internal dtb.
>>
>> Signed-off-by: Josua Mayer 
>> Fixes: d0399a46e7cd
>> ---
>>  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---

Should you patch the u-boot.dtsi variant instead
(arch/arm/dts/imx6qdl-sr-som-u-boot.dtsi) ?

This way the next time the DTS re-sync is done, the problem does not
appear again.


Re: [PATCH] mx6cuboxi: fix ethernet after synchronise device-tree

2022-07-28 Thread Josua Mayer
Please hold off merging this patch until someone tested it, I can not do so
this week.
@Tom Can you confirm if this fixes the networking on your Cubox?
Also note that the phy-handle property may or may not be required, I am not
sure.

sincerely
Josua Mayer

On Thu, Jul 28, 2022 at 7:05 AM Josua Mayer  wrote:

> The i.MX6 Cubox-i and HummingBoards can have different PHYs at varying
> addresses. U-Boot needs to auto-detect which phy is actually present,
> and at which address it is responding.
>
> Auto-detection from multiple phy nodes specified in device-tree does not
> currently work correct. As a work-around merge all three possible phys
> into one node with the special address 0x which indicates to the
> generic phy driver to probe all addresses.
> Also fixup this fake address before booting Linux, *if* booting with
> U-Boot's internal dtb.
>
> Signed-off-by: Josua Mayer 
> Fixes: d0399a46e7cd
> ---
>  arch/arm/dts/imx6qdl-sr-som.dtsi | 30 +---
>  board/solidrun/mx6cuboxi/mx6cuboxi.c |  6 +-
>  2 files changed, 14 insertions(+), 22 deletions(-)
>
> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi
> b/arch/arm/dts/imx6qdl-sr-som.dtsi
> index ce543e325c..2d7cbc26b3 100644
> --- a/arch/arm/dts/imx6qdl-sr-som.dtsi
> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> @@ -53,6 +53,7 @@
>   {
> pinctrl-names = "default";
> pinctrl-0 = <_microsom_enet_ar8035>;
> +   phy-handle = <>;
> phy-mode = "rgmii-id";
>
> /*
> @@ -68,30 +69,17 @@
> #address-cells = <1>;
> #size-cells = <0>;
>
> -   /*
> -* The PHY can appear at either address 0 or 4 due to the
> -* configuration (LED) pin not being pulled sufficiently.
> -*/
> -   ethernet-phy@0 {
> -   reg = <0>;
> +   phy: ethernet-phy@0 {
> +   /*
> +* The PHY can appear either:
> +* - AR8035: at address 0 or 4
> +* - ADIN1300: at address 1
> +* Actual address being detected at runtime.
> +*/
> +   reg = <0x>;
> qca,clk-out-frequency = <12500>;
> qca,smarteee-tw-us-1g = <24>;
> -   };
> -
> -   ethernet-phy@4 {
> -   reg = <4>;
> -   qca,clk-out-frequency = <12500>;
> -   qca,smarteee-tw-us-1g = <24>;
> -   };
> -
> -   /*
> -* ADIN1300 (som rev 1.9 or later) is always at address 1.
> It
> -* will be enabled automatically by U-Boot if detected.
> -*/
> -   ethernet-phy@1 {
> -   reg = <1>;
> adi,phy-output-clock = "125mhz-free-running";
> -   status = "disabled";
> };
> };
>  };
> diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> index debf4f6a3b..52172a03b1 100644
> --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c
> +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
> @@ -446,7 +446,7 @@ static int find_ethernet_phy(void)
>   */
>  int ft_board_setup(void *fdt, struct bd_info *bd)
>  {
> -   int node_phy0, node_phy1, node_phy4;
> +   int node_phy, node_phy0, node_phy1, node_phy4;
> int ret, phy;
> bool enable_phy0 = false, enable_phy1 = false, enable_phy4 = false;
> enum board_type board;
> @@ -478,6 +478,10 @@ int ft_board_setup(void *fdt, struct bd_info *bd)
> return 0;
> }
>
> +   // update U-Boot's own unified phy node phy address, if present
> +   node_phy = fdt_path_offset(fdt, "/soc/bus@210/ethernet@2188000
> /mdio/phy");
> +   ret = fdt_setprop_u32(fdt, node_phy, "reg", phy);
> +
> // update all phy nodes status
> node_phy0 = fdt_path_offset(fdt, "/soc/bus@210
> /ethernet@2188000/mdio/ethernet-phy@0");
> ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ?
> "okay" : "disabled");
> --
> 2.37.1
>
>