[PATCH v2 3/5] ARM: dts: imx6qdl-sr-som: add support for alternate phy addresses
Mark Kettenis
mark.kettenis at xs4all.nl
Thu May 19 12:21:22 CEST 2022
> From: Josua Mayer <josua at solid-run.com>
> Date: Thu, 19 May 2022 12:31:58 +0300
>
> The Cubox has an unstable phy address - which can appear at either
> address 0 (intended) or 4 (unintended).
>
> SoM revision 1.9 has replaced the ar8035 phy with an adin1300, which
> will always appear at address 1.
>
> Change the reg property of the phy node to the magic value 0xffffffff,
> which indicates to the generic phy driver that all addresses should be
> probed. That allows the same node (which is pinned by phy-handle) to match
> either the AR8035 PHY at both possible addresses, as well as the new one
> at address 1.
> Also add the new adi,phy-output-clock property for enabling the 125MHz
> clock used by the fec ethernet controller, as submitted to Linux [1].
>
> Linux solves this problem differently:
> For the ar8035 phy it will probe both phy nodes in device-tree in order,
> and use the one that succeeds. For the new adin1300 it expects U-Boot to
> patch the status field in the DTB before booting
And U-Boot should do the same thing for its own device tree such that
the built-in DTB can simply be passed to the OS. There should be no
difference between the U-Boot device tree and the Linux device tree.
> While at it also sync the reset-delay with the upstream Linux dtb.
>
> [1] https://patchwork.kernel.org/project/netdevbpf/patch/20220428082848.12191-4-josua@solid-run.com/
>
> Signed-off-by: Josua Mayer <josua at solid-run.com>
> ---
> arch/arm/dts/imx6qdl-sr-som.dtsi | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/dts/imx6qdl-sr-som.dtsi b/arch/arm/dts/imx6qdl-sr-som.dtsi
> index b06577808f..c20bed2721 100644
> --- a/arch/arm/dts/imx6qdl-sr-som.dtsi
> +++ b/arch/arm/dts/imx6qdl-sr-som.dtsi
> @@ -55,7 +55,13 @@
> pinctrl-0 = <&pinctrl_microsom_enet_ar8035>;
> phy-handle = <&phy>;
> phy-mode = "rgmii-id";
> - phy-reset-duration = <2>;
> +
> + /*
> + * 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 = <&gpio4 15 GPIO_ACTIVE_LOW>;
> status = "okay";
>
> @@ -64,8 +70,15 @@
> #size-cells = <0>;
>
> phy: ethernet-phy at 0 {
> - reg = <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>;
> + adi,phy-output-clock = "125mhz-free-running";
> };
> };
> };
> --
> 2.35.3
>
>
More information about the U-Boot
mailing list