diff mbox series

arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts

Message ID 20250119091154.1110762-1-cnsztl@gmail.com (mailing list archive)
State New
Headers show
Series arm64: dts: rockchip: change eth phy mode to rgmii-id for orangepi r1 plus lts | expand

Commit Message

Tianling Shen Jan. 19, 2025, 9:11 a.m. UTC
In general the delay should be added by the PHY instead of the MAC,
and this improves network stability on some boards which seem to
need different delay.

Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 Plus LTS")
Cc: stable@vger.kernel.org # 6.6+
Signed-off-by: Tianling Shen <cnsztl@gmail.com>
---
 arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
 arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts     | 1 +
 arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi    | 1 -
 3 files changed, 2 insertions(+), 3 deletions(-)

Comments

Dragan Simic Jan. 19, 2025, 9:54 a.m. UTC | #1
Hello Tianling,

Thanks for the patch.  Please, see a comment below.

On 2025-01-19 10:11, Tianling Shen wrote:
> In general the delay should be added by the PHY instead of the MAC,
> and this improves network stability on some boards which seem to
> need different delay.
> 
> Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 
> Plus LTS")
> Cc: stable@vger.kernel.org # 6.6+
> Signed-off-by: Tianling Shen <cnsztl@gmail.com>
> ---
>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts     | 1 +
>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi    | 1 -
>  3 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git
> a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
> index 67c246ad8b8c..ec2ce894da1f 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
> @@ -17,8 +17,7 @@ / {
> 
>  &gmac2io {
>  	phy-handle = <&yt8531c>;
> -	tx_delay = <0x19>;
> -	rx_delay = <0x05>;
> +	phy-mode = "rgmii-id";

Shouldn't the "tx_delay" and "rx_delay" DT parameters be converted
into the "tx-internal-delay-ps" and "rx-internal-delay-ps" parameters,
respectively, so the Motorcomm PHY driver can pick them up and
actually configure the internal PHY delays?

>  	status = "okay";
> 
>  	mdio {
> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
> index 324a8e951f7e..846b931e16d2 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
> @@ -15,6 +15,7 @@ / {
> 
>  &gmac2io {
>  	phy-handle = <&rtl8211e>;
> +	phy-mode = "rgmii";
>  	tx_delay = <0x24>;
>  	rx_delay = <0x18>;
>  	status = "okay";
> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
> index 4f193704e5dc..09508e324a28 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
> @@ -109,7 +109,6 @@ &gmac2io {
>  	assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
>  	assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
>  	clock_in_out = "input";
> -	phy-mode = "rgmii";
>  	phy-supply = <&vcc_io>;
>  	pinctrl-0 = <&rgmiim1_pins>;
>  	pinctrl-names = "default";
Tianling Shen Jan. 19, 2025, 11:15 a.m. UTC | #2
Hi Dragan,

On 2025/1/19 17:54, Dragan Simic wrote:
> Hello Tianling,
> 
> Thanks for the patch.  Please, see a comment below.
> 
> On 2025-01-19 10:11, Tianling Shen wrote:
>> In general the delay should be added by the PHY instead of the MAC,
>> and this improves network stability on some boards which seem to
>> need different delay.
>>
>> Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 
>> Plus LTS")
>> Cc: stable@vger.kernel.org # 6.6+
>> Signed-off-by: Tianling Shen <cnsztl@gmail.com>
>> ---
>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts     | 1 +
>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi    | 1 -
>>  3 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git
>> a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>> index 67c246ad8b8c..ec2ce894da1f 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>> @@ -17,8 +17,7 @@ / {
>>
>>  &gmac2io {
>>      phy-handle = <&yt8531c>;
>> -    tx_delay = <0x19>;
>> -    rx_delay = <0x05>;
>> +    phy-mode = "rgmii-id";
> 
> Shouldn't the "tx_delay" and "rx_delay" DT parameters be converted
> into the "tx-internal-delay-ps" and "rx-internal-delay-ps" parameters,
> respectively, so the Motorcomm PHY driver can pick them up and
> actually configure the internal PHY delays?

The documentation[1] says "{t,r}x-internal-delay-ps" default to 1950 and 
that value already works fine on my board.

1. 
https://www.kernel.org/doc/Documentation/devicetree/bindings/net/motorcomm%2Cyt8xxx.yaml

Thanks,
Tianling.

> 
>>      status = "okay";
>>
>>      mdio {
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>> index 324a8e951f7e..846b931e16d2 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>> @@ -15,6 +15,7 @@ / {
>>
>>  &gmac2io {
>>      phy-handle = <&rtl8211e>;
>> +    phy-mode = "rgmii";
>>      tx_delay = <0x24>;
>>      rx_delay = <0x18>;
>>      status = "okay";
>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>> index 4f193704e5dc..09508e324a28 100644
>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>> @@ -109,7 +109,6 @@ &gmac2io {
>>      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
>>      assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
>>      clock_in_out = "input";
>> -    phy-mode = "rgmii";
>>      phy-supply = <&vcc_io>;
>>      pinctrl-0 = <&rgmiim1_pins>;
>>      pinctrl-names = "default";
Dragan Simic Jan. 19, 2025, 11:36 a.m. UTC | #3
On 2025-01-19 12:15, Tianling Shen wrote:
> On 2025/1/19 17:54, Dragan Simic wrote:
>> Thanks for the patch.  Please, see a comment below.
>> 
>> On 2025-01-19 10:11, Tianling Shen wrote:
>>> In general the delay should be added by the PHY instead of the MAC,
>>> and this improves network stability on some boards which seem to
>>> need different delay.
>>> 
>>> Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 
>>> Plus LTS")
>>> Cc: stable@vger.kernel.org # 6.6+
>>> Signed-off-by: Tianling Shen <cnsztl@gmail.com>
>>> ---
>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts     | 1 +
>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi    | 1 -
>>>  3 files changed, 2 insertions(+), 3 deletions(-)
>>> 
>>> diff --git
>>> a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>> index 67c246ad8b8c..ec2ce894da1f 100644
>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>> @@ -17,8 +17,7 @@ / {
>>> 
>>>  &gmac2io {
>>>      phy-handle = <&yt8531c>;
>>> -    tx_delay = <0x19>;
>>> -    rx_delay = <0x05>;
>>> +    phy-mode = "rgmii-id";
>> 
>> Shouldn't the "tx_delay" and "rx_delay" DT parameters be converted
>> into the "tx-internal-delay-ps" and "rx-internal-delay-ps" parameters,
>> respectively, so the Motorcomm PHY driver can pick them up and
>> actually configure the internal PHY delays?
> 
> The documentation[1] says "{t,r}x-internal-delay-ps" default to 1950
> and that value already works fine on my board.
> 
> 1. 
> https://www.kernel.org/doc/Documentation/devicetree/bindings/net/motorcomm%2Cyt8xxx.yaml

I see, but those values differ from the values found in the
"tx_delay" and "rx_delay" DT parameters, so I think this patch
should be tested with at least one more Orange Pi R1 Plus LTS
board, to make sure it's all still fine.

>> 
>>>      status = "okay";
>>> 
>>>      mdio {
>>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>> index 324a8e951f7e..846b931e16d2 100644
>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>> @@ -15,6 +15,7 @@ / {
>>> 
>>>  &gmac2io {
>>>      phy-handle = <&rtl8211e>;
>>> +    phy-mode = "rgmii";
>>>      tx_delay = <0x24>;
>>>      rx_delay = <0x18>;
>>>      status = "okay";
>>> diff --git 
>>> a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>> index 4f193704e5dc..09508e324a28 100644
>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>> @@ -109,7 +109,6 @@ &gmac2io {
>>>      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
>>>      assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
>>>      clock_in_out = "input";
>>> -    phy-mode = "rgmii";
>>>      phy-supply = <&vcc_io>;
>>>      pinctrl-0 = <&rgmiim1_pins>;
>>>      pinctrl-names = "default";
Tianling Shen Jan. 19, 2025, 3:48 p.m. UTC | #4
On 2025/1/19 19:36, Dragan Simic wrote:
> On 2025-01-19 12:15, Tianling Shen wrote:
>> On 2025/1/19 17:54, Dragan Simic wrote:
>>> Thanks for the patch.  Please, see a comment below.
>>>
>>> On 2025-01-19 10:11, Tianling Shen wrote:
>>>> In general the delay should be added by the PHY instead of the MAC,
>>>> and this improves network stability on some boards which seem to
>>>> need different delay.
>>>>
>>>> Fixes: 387b3bbac5ea ("arm64: dts: rockchip: Add Xunlong OrangePi R1 
>>>> Plus LTS")
>>>> Cc: stable@vger.kernel.org # 6.6+
>>>> Signed-off-by: Tianling Shen <cnsztl@gmail.com>
>>>> ---
>>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts | 3 +--
>>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts     | 1 +
>>>>  arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi    | 1 -
>>>>  3 files changed, 2 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git
>>>> a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>>> index 67c246ad8b8c..ec2ce894da1f 100644
>>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
>>>> @@ -17,8 +17,7 @@ / {
>>>>
>>>>  &gmac2io {
>>>>      phy-handle = <&yt8531c>;
>>>> -    tx_delay = <0x19>;
>>>> -    rx_delay = <0x05>;
>>>> +    phy-mode = "rgmii-id";
>>>
>>> Shouldn't the "tx_delay" and "rx_delay" DT parameters be converted
>>> into the "tx-internal-delay-ps" and "rx-internal-delay-ps" parameters,
>>> respectively, so the Motorcomm PHY driver can pick them up and
>>> actually configure the internal PHY delays?
>>
>> The documentation[1] says "{t,r}x-internal-delay-ps" default to 1950
>> and that value already works fine on my board.
>>
>> 1. https://www.kernel.org/doc/Documentation/devicetree/bindings/net/ 
>> motorcomm%2Cyt8xxx.yaml
> 
> I see, but those values differ from the values found in the
> "tx_delay" and "rx_delay" DT parameters, so I think this patch
> should be tested with at least one more Orange Pi R1 Plus LTS
> board, to make sure it's all still fine.

This patch has been tested on 2 boards, and we will do more tests in 
next week.

Thanks,
Tianling.

> 
>>>
>>>>      status = "okay";
>>>>
>>>>      mdio {
>>>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>>> index 324a8e951f7e..846b931e16d2 100644
>>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
>>>> @@ -15,6 +15,7 @@ / {
>>>>
>>>>  &gmac2io {
>>>>      phy-handle = <&rtl8211e>;
>>>> +    phy-mode = "rgmii";
>>>>      tx_delay = <0x24>;
>>>>      rx_delay = <0x18>;
>>>>      status = "okay";
>>>> diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>>> b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>>> index 4f193704e5dc..09508e324a28 100644
>>>> --- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>>> +++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
>>>> @@ -109,7 +109,6 @@ &gmac2io {
>>>>      assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
>>>>      assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
>>>>      clock_in_out = "input";
>>>> -    phy-mode = "rgmii";
>>>>      phy-supply = <&vcc_io>;
>>>>      pinctrl-0 = <&rgmiim1_pins>;
>>>>      pinctrl-names = "default";
Andrew Lunn Jan. 19, 2025, 4:05 p.m. UTC | #5
> >  &gmac2io {
> >  	phy-handle = <&yt8531c>;
> > -	tx_delay = <0x19>;
> > -	rx_delay = <0x05>;
> > +	phy-mode = "rgmii-id";
> 
> Shouldn't the "tx_delay" and "rx_delay" DT parameters be converted
> into the "tx-internal-delay-ps" and "rx-internal-delay-ps" parameters,
> respectively, so the Motorcomm PHY driver can pick them up and
> actually configure the internal PHY delays?

Maybe.

One problem is that tx_delay and rx_delay are really bad DT
bindings. They are basically values to be poked into a registers, with
no explanation of what they mean. Maybe 0x19 means 2ns? If so, that is
exactly what the PHY will do with rgmii-id, and you don't need any
additional properties.

The fact testing suggests this works does suggest these delay values
are around 2ns, so there is probably no need for
{rt}x-internal-delay-ps.

In general, i always suggest the PHY does the delay, just so that we
try to make all boards act in the same way. The fact this also removes
the use of these terrible tx_delay and rx_delay makes this patch even
better, if it can be shown to be reliable.

	Andrew
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
index 67c246ad8b8c..ec2ce894da1f 100644
--- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus-lts.dts
@@ -17,8 +17,7 @@  / {
 
 &gmac2io {
 	phy-handle = <&yt8531c>;
-	tx_delay = <0x19>;
-	rx_delay = <0x05>;
+	phy-mode = "rgmii-id";
 	status = "okay";
 
 	mdio {
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
index 324a8e951f7e..846b931e16d2 100644
--- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dts
@@ -15,6 +15,7 @@  / {
 
 &gmac2io {
 	phy-handle = <&rtl8211e>;
+	phy-mode = "rgmii";
 	tx_delay = <0x24>;
 	rx_delay = <0x18>;
 	status = "okay";
diff --git a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
index 4f193704e5dc..09508e324a28 100644
--- a/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3328-orangepi-r1-plus.dtsi
@@ -109,7 +109,6 @@  &gmac2io {
 	assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>;
 	assigned-clock-parents = <&gmac_clk>, <&gmac_clk>;
 	clock_in_out = "input";
-	phy-mode = "rgmii";
 	phy-supply = <&vcc_io>;
 	pinctrl-0 = <&rgmiim1_pins>;
 	pinctrl-names = "default";