[PATCH] arm64: dts: meson: fix PHY deassert timing requirements

The sync of the device tree and dt-bindings from Linux v5.6-rc2 11a48a5a18c6 ("Linux 5.6-rc2") causes Ethernet to break on some ODROID-C2.
Meanwhile a fix to increase the reset timing has been added to Linux. Instead of reverting the offending commit, use the new reset timing from upstream Linux commit c183c406c432 ("arm64: dts: meson: fix PHY deassert timing requirements").
Fixes: dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") Signed-off-by: Stefan Agner stefan@agner.ch --- arch/arm/dts/meson-g12b-odroid-n2.dtsi | 2 +- arch/arm/dts/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm/dts/meson-gxbb-odroidc2.dts | 2 +- arch/arm/dts/meson-gxm-khadas-vim2.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/dts/meson-g12b-odroid-n2.dtsi b/arch/arm/dts/meson-g12b-odroid-n2.dtsi index 6982632ae6..39a09661c5 100644 --- a/arch/arm/dts/meson-g12b-odroid-n2.dtsi +++ b/arch/arm/dts/meson-g12b-odroid-n2.dtsi @@ -413,7 +413,7 @@ max-speed = <1000>;
reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
interrupt-parent = <&gpio_intc>; diff --git a/arch/arm/dts/meson-gxbb-nanopi-k2.dts b/arch/arm/dts/meson-gxbb-nanopi-k2.dts index 7be3e35409..de27beafe9 100644 --- a/arch/arm/dts/meson-gxbb-nanopi-k2.dts +++ b/arch/arm/dts/meson-gxbb-nanopi-k2.dts @@ -165,7 +165,7 @@ reg = <0>;
reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>; diff --git a/arch/arm/dts/meson-gxbb-odroidc2.dts b/arch/arm/dts/meson-gxbb-odroidc2.dts index 70fcfb7b06..50de1d01e5 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2.dts +++ b/arch/arm/dts/meson-gxbb-odroidc2.dts @@ -200,7 +200,7 @@ reg = <0>;
reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>; diff --git a/arch/arm/dts/meson-gxm-khadas-vim2.dts b/arch/arm/dts/meson-gxm-khadas-vim2.dts index bff8ec2c1c..e38d9e50ca 100644 --- a/arch/arm/dts/meson-gxm-khadas-vim2.dts +++ b/arch/arm/dts/meson-gxm-khadas-vim2.dts @@ -194,7 +194,7 @@ reg = <0>;
reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>;

Hi,
On 06/04/2021 19:47, Stefan Agner wrote:
The sync of the device tree and dt-bindings from Linux v5.6-rc2 11a48a5a18c6 ("Linux 5.6-rc2") causes Ethernet to break on some ODROID-C2.
Meanwhile a fix to increase the reset timing has been added to Linux. Instead of reverting the offending commit, use the new reset timing from upstream Linux commit c183c406c432 ("arm64: dts: meson: fix PHY deassert timing requirements").
Fixes: dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") Signed-off-by: Stefan Agner stefan@agner.ch
arch/arm/dts/meson-g12b-odroid-n2.dtsi | 2 +- arch/arm/dts/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm/dts/meson-gxbb-odroidc2.dts | 2 +- arch/arm/dts/meson-gxm-khadas-vim2.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/dts/meson-g12b-odroid-n2.dtsi b/arch/arm/dts/meson-g12b-odroid-n2.dtsi index 6982632ae6..39a09661c5 100644 --- a/arch/arm/dts/meson-g12b-odroid-n2.dtsi +++ b/arch/arm/dts/meson-g12b-odroid-n2.dtsi @@ -413,7 +413,7 @@ max-speed = <1000>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
In fact, these are not used by current U-boot, support for reset/deassert in PHY node is not yet supported in U-Boot. This first step was to switch to DM_MDIO and use the proper Designware glue, the second step is to find how to make use of these properties.
Concerning the patch, I'll prefer you sync the DT with v5.11 instead.
Neil
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-nanopi-k2.dts b/arch/arm/dts/meson-gxbb-nanopi-k2.dts index 7be3e35409..de27beafe9 100644 --- a/arch/arm/dts/meson-gxbb-nanopi-k2.dts +++ b/arch/arm/dts/meson-gxbb-nanopi-k2.dts @@ -165,7 +165,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-odroidc2.dts b/arch/arm/dts/meson-gxbb-odroidc2.dts index 70fcfb7b06..50de1d01e5 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2.dts +++ b/arch/arm/dts/meson-gxbb-odroidc2.dts @@ -200,7 +200,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxm-khadas-vim2.dts b/arch/arm/dts/meson-gxm-khadas-vim2.dts index bff8ec2c1c..e38d9e50ca 100644 --- a/arch/arm/dts/meson-gxm-khadas-vim2.dts +++ b/arch/arm/dts/meson-gxm-khadas-vim2.dts @@ -194,7 +194,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>;

On 2021-04-07 15:31, Neil Armstrong wrote:
Hi,
On 06/04/2021 19:47, Stefan Agner wrote:
The sync of the device tree and dt-bindings from Linux v5.6-rc2 11a48a5a18c6 ("Linux 5.6-rc2") causes Ethernet to break on some ODROID-C2.
Meanwhile a fix to increase the reset timing has been added to Linux. Instead of reverting the offending commit, use the new reset timing from upstream Linux commit c183c406c432 ("arm64: dts: meson: fix PHY deassert timing requirements").
Fixes: dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") Signed-off-by: Stefan Agner stefan@agner.ch
arch/arm/dts/meson-g12b-odroid-n2.dtsi | 2 +- arch/arm/dts/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm/dts/meson-gxbb-odroidc2.dts | 2 +- arch/arm/dts/meson-gxm-khadas-vim2.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/dts/meson-g12b-odroid-n2.dtsi b/arch/arm/dts/meson-g12b-odroid-n2.dtsi index 6982632ae6..39a09661c5 100644 --- a/arch/arm/dts/meson-g12b-odroid-n2.dtsi +++ b/arch/arm/dts/meson-g12b-odroid-n2.dtsi @@ -413,7 +413,7 @@ max-speed = <1000>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
In fact, these are not used by current U-boot, support for reset/deassert in PHY node is not yet supported in U-Boot. This first step was to switch to DM_MDIO and use the proper Designware glue, the second step is to find how to make use of these properties.
Hm, that is strange, I have users reporting that this patch fixes the issue on their devices. I guess it might be that the problem does not always appear and it was just (bad) luck.
Concerning the patch, I'll prefer you sync the DT with v5.11 instead.
We have multiple reports of non-working ODROID-C2 which worked in previous U-Boot releases: https://github.com/home-assistant/operating-system/issues/1202
Similar reports exist in Armbian Forums as well.
Until we have proper PHY reset/deassert support, I'd suggest to revert dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") partially then...
-- Stefan
Neil
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-nanopi-k2.dts b/arch/arm/dts/meson-gxbb-nanopi-k2.dts index 7be3e35409..de27beafe9 100644 --- a/arch/arm/dts/meson-gxbb-nanopi-k2.dts +++ b/arch/arm/dts/meson-gxbb-nanopi-k2.dts @@ -165,7 +165,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-odroidc2.dts b/arch/arm/dts/meson-gxbb-odroidc2.dts index 70fcfb7b06..50de1d01e5 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2.dts +++ b/arch/arm/dts/meson-gxbb-odroidc2.dts @@ -200,7 +200,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxm-khadas-vim2.dts b/arch/arm/dts/meson-gxm-khadas-vim2.dts index bff8ec2c1c..e38d9e50ca 100644 --- a/arch/arm/dts/meson-gxm-khadas-vim2.dts +++ b/arch/arm/dts/meson-gxm-khadas-vim2.dts @@ -194,7 +194,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>;

On 07/04/2021 16:21, Stefan Agner wrote:
On 2021-04-07 15:31, Neil Armstrong wrote:
Hi,
On 06/04/2021 19:47, Stefan Agner wrote:
The sync of the device tree and dt-bindings from Linux v5.6-rc2 11a48a5a18c6 ("Linux 5.6-rc2") causes Ethernet to break on some ODROID-C2.
Meanwhile a fix to increase the reset timing has been added to Linux. Instead of reverting the offending commit, use the new reset timing from upstream Linux commit c183c406c432 ("arm64: dts: meson: fix PHY deassert timing requirements").
Fixes: dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") Signed-off-by: Stefan Agner stefan@agner.ch
arch/arm/dts/meson-g12b-odroid-n2.dtsi | 2 +- arch/arm/dts/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm/dts/meson-gxbb-odroidc2.dts | 2 +- arch/arm/dts/meson-gxm-khadas-vim2.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/dts/meson-g12b-odroid-n2.dtsi b/arch/arm/dts/meson-g12b-odroid-n2.dtsi index 6982632ae6..39a09661c5 100644 --- a/arch/arm/dts/meson-g12b-odroid-n2.dtsi +++ b/arch/arm/dts/meson-g12b-odroid-n2.dtsi @@ -413,7 +413,7 @@ max-speed = <1000>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
In fact, these are not used by current U-boot, support for reset/deassert in PHY node is not yet supported in U-Boot. This first step was to switch to DM_MDIO and use the proper Designware glue, the second step is to find how to make use of these properties.
Hm, that is strange, I have users reporting that this patch fixes the issue on their devices. I guess it might be that the problem does not always appear and it was just (bad) luck.
Concerning the patch, I'll prefer you sync the DT with v5.11 instead.
We have multiple reports of non-working ODROID-C2 which worked in previous U-Boot releases: https://github.com/home-assistant/operating-system/issues/1202
Similar reports exist in Armbian Forums as well.
Until we have proper PHY reset/deassert support, I'd suggest to revert dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") partially then...
Reverting this is clearly not a solution, the intermediate solution is to put back the previous reset properties like it was done for multiple boards like in arch/arm/dts/meson-sm1-odroid-c4-u-boot.dtsi :
========================================================================== diff --git a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi index 90087b00db..f1e6914351 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi +++ b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi @@ -29,6 +29,12 @@ }; };
+ðmac { + snps,reset-gpio = <&gpio GPIOZ_14 0>; + snps,reset-delays-us = <0 10000 1000000>; + snps,reset-active-low; +}; + &usb0 { status = "disabled"; }; ==========================================================================
Neil
-- Stefan
Neil
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-nanopi-k2.dts b/arch/arm/dts/meson-gxbb-nanopi-k2.dts index 7be3e35409..de27beafe9 100644 --- a/arch/arm/dts/meson-gxbb-nanopi-k2.dts +++ b/arch/arm/dts/meson-gxbb-nanopi-k2.dts @@ -165,7 +165,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-odroidc2.dts b/arch/arm/dts/meson-gxbb-odroidc2.dts index 70fcfb7b06..50de1d01e5 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2.dts +++ b/arch/arm/dts/meson-gxbb-odroidc2.dts @@ -200,7 +200,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxm-khadas-vim2.dts b/arch/arm/dts/meson-gxm-khadas-vim2.dts index bff8ec2c1c..e38d9e50ca 100644 --- a/arch/arm/dts/meson-gxm-khadas-vim2.dts +++ b/arch/arm/dts/meson-gxm-khadas-vim2.dts @@ -194,7 +194,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>;

On 2021-04-07 16:29, Neil Armstrong wrote:
On 07/04/2021 16:21, Stefan Agner wrote:
On 2021-04-07 15:31, Neil Armstrong wrote:
Hi,
On 06/04/2021 19:47, Stefan Agner wrote:
The sync of the device tree and dt-bindings from Linux v5.6-rc2 11a48a5a18c6 ("Linux 5.6-rc2") causes Ethernet to break on some ODROID-C2.
Meanwhile a fix to increase the reset timing has been added to Linux. Instead of reverting the offending commit, use the new reset timing from upstream Linux commit c183c406c432 ("arm64: dts: meson: fix PHY deassert timing requirements").
Fixes: dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") Signed-off-by: Stefan Agner stefan@agner.ch
arch/arm/dts/meson-g12b-odroid-n2.dtsi | 2 +- arch/arm/dts/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm/dts/meson-gxbb-odroidc2.dts | 2 +- arch/arm/dts/meson-gxm-khadas-vim2.dts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm/dts/meson-g12b-odroid-n2.dtsi b/arch/arm/dts/meson-g12b-odroid-n2.dtsi index 6982632ae6..39a09661c5 100644 --- a/arch/arm/dts/meson-g12b-odroid-n2.dtsi +++ b/arch/arm/dts/meson-g12b-odroid-n2.dtsi @@ -413,7 +413,7 @@ max-speed = <1000>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
In fact, these are not used by current U-boot, support for reset/deassert in PHY node is not yet supported in U-Boot. This first step was to switch to DM_MDIO and use the proper Designware glue, the second step is to find how to make use of these properties.
Hm, that is strange, I have users reporting that this patch fixes the issue on their devices. I guess it might be that the problem does not always appear and it was just (bad) luck.
Concerning the patch, I'll prefer you sync the DT with v5.11 instead.
We have multiple reports of non-working ODROID-C2 which worked in previous U-Boot releases: https://github.com/home-assistant/operating-system/issues/1202
Similar reports exist in Armbian Forums as well.
Until we have proper PHY reset/deassert support, I'd suggest to revert dd5f2351e99a ("arm64: dts: meson: sync dt and bindings from v5.6-rc2") partially then...
Reverting this is clearly not a solution, the intermediate solution is to put back the previous reset properties like it was done for multiple boards like in arch/arm/dts/meson-sm1-odroid-c4-u-boot.dtsi :
Yes, that is what I meant with revert ... partially. :)
I'll send a patch.
-- Stefan
========================================================================== diff --git a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi index 90087b00db..f1e6914351 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi +++ b/arch/arm/dts/meson-gxbb-odroidc2-u-boot.dtsi @@ -29,6 +29,12 @@ }; };
+ðmac {
snps,reset-gpio = <&gpio GPIOZ_14 0>;
snps,reset-delays-us = <0 10000 1000000>;
snps,reset-active-low;
+};
&usb0 { status = "disabled"; }; ==========================================================================
Neil
-- Stefan
Neil
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-nanopi-k2.dts b/arch/arm/dts/meson-gxbb-nanopi-k2.dts index 7be3e35409..de27beafe9 100644 --- a/arch/arm/dts/meson-gxbb-nanopi-k2.dts +++ b/arch/arm/dts/meson-gxbb-nanopi-k2.dts @@ -165,7 +165,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxbb-odroidc2.dts b/arch/arm/dts/meson-gxbb-odroidc2.dts index 70fcfb7b06..50de1d01e5 100644 --- a/arch/arm/dts/meson-gxbb-odroidc2.dts +++ b/arch/arm/dts/meson-gxbb-odroidc2.dts @@ -200,7 +200,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
diff --git a/arch/arm/dts/meson-gxm-khadas-vim2.dts b/arch/arm/dts/meson-gxm-khadas-vim2.dts index bff8ec2c1c..e38d9e50ca 100644 --- a/arch/arm/dts/meson-gxm-khadas-vim2.dts +++ b/arch/arm/dts/meson-gxm-khadas-vim2.dts @@ -194,7 +194,7 @@ reg = <0>;
reset-assert-us = <10000>;
reset-deassert-us = <30000>;
reset-deassert-us = <80000>;
reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
interrupt-parent = <&gpio_intc>;
participants (2)
-
Neil Armstrong
-
Stefan Agner