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 <jo...@solid-run.com> 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 0xffffffff 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 <jo...@solid-run.com> > 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 @@ > &fec { > pinctrl-names = "default"; > pinctrl-0 = <&pinctrl_microsom_enet_ar8035>; > + phy-handle = <&phy>; > 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 = <0xffffffff>; > qca,clk-out-frequency = <125000000>; > qca,smarteee-tw-us-1g = <24>; > - }; > - > - ethernet-phy@4 { > - reg = <4>; > - qca,clk-out-frequency = <125000000>; > - 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@2100000/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@2100000 > /ethernet@2188000/mdio/ethernet-phy@0"); > ret = fdt_setprop_string(fdt, node_phy0, "status", enable_phy0 ? > "okay" : "disabled"); > -- > 2.37.1 > >