[PATCH v2 3/5] ARM: dts: imx6qdl-sr-som: add support for alternate phy addresses

Josua Mayer josua at solid-run.com
Thu May 19 14:56:11 CEST 2022


Hi Mark,

Am 19.05.22 um 13:21 schrieb Mark Kettenis:
>> 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.
Should, but that does not currently work.
I actually tried doing it before submitting v1, and I found that the phy 
driver would not find the device-tree properties I was adding to the 
phy at 1 node.
So it did not enable the required clock output, hence the ethernet port 
was not functional.
We also have a non-Linux phy-handle property, so I suspect there were 
reasons to not use the Linux dts for i.MX6 ethernet.

This is why instead I added to the one single phy node.
> 
>> 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