diff mbox series

[V1] arm64: dts: imx8mp: fix FEC can't work when attached to generic phy driver

Message ID 20210304114013.18494-1-qiangqing.zhang@nxp.com
State New
Headers show
Series [V1] arm64: dts: imx8mp: fix FEC can't work when attached to generic phy driver | expand

Commit Message

Joakim Zhang March 4, 2021, 11:40 a.m. UTC
Some users report that FEC can't work on i.MX8MP EVK board, it brings
inconvenience. The root cause should be FEC controller attached to
generic phy driver, as Realtek phy driver is built as module in the
defconfig file (CONFIG_REALTEK_PHY=m), so it is unavailable. If provide
"reset-gpios" property, it will reset phy when probed, and no way to
re-config phy since we use the generic phy dirver, which leads FEC can't
work.

There are two ways to let FEC work:

1. If you want to use generic phy dirver, please delete "reset-gpios"
property, keep power-on strapping pins configurations.

2. If you want to use Realtek phy driver, please buildin driver
(CONFIG_REALTEK_PHY=y), and had better add another two reset
properties:
	reset-assert-us = <20000>;
	reset-deassert-us = <150000>;
According to  RTL8211 serials PHY datasheet, for a complete PHY reset,
reset pin must be asserted low for at least 10ms for internal regulator.
Wait for at least 72ms (for internal circuits settling time) before
accessing the PHY register.

This patch selects method 1, since users may waste time to find out FEC
failure, in most cases, they just want to use networking to debug other
modules.

Fixs: commit 9e847693c6f34 ("arm64: dts: freescale: Add i.MX8MP EVK board support")
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
---
 arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 1 -
 1 file changed, 1 deletion(-)

Comments

Joakim Zhang March 18, 2021, 9:16 a.m. UTC | #1
Kindly pinging...

Best Regards,
Joakim Zhang

> -----Original Message-----

> From: Joakim Zhang <qiangqing.zhang@nxp.com>

> Sent: 2021年3月4日 19:40

> To: robh+dt@kernel.org; shawnguo@kernel.org; s.hauer@pengutronix.de;

> festevam@gmail.com

> Cc: kernel@pengutronix.de; dl-linux-imx <linux-imx@nxp.com>;

> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org;

> linux-kernel@vger.kernel.org

> Subject: [PATCH V1] arm64: dts: imx8mp: fix FEC can't work when attached to

> generic phy driver

> 

> Some users report that FEC can't work on i.MX8MP EVK board, it brings

> inconvenience. The root cause should be FEC controller attached to generic phy

> driver, as Realtek phy driver is built as module in the defconfig file

> (CONFIG_REALTEK_PHY=m), so it is unavailable. If provide "reset-gpios"

> property, it will reset phy when probed, and no way to re-config phy since we

> use the generic phy dirver, which leads FEC can't work.

> 

> There are two ways to let FEC work:

> 

> 1. If you want to use generic phy dirver, please delete "reset-gpios"

> property, keep power-on strapping pins configurations.

> 

> 2. If you want to use Realtek phy driver, please buildin driver

> (CONFIG_REALTEK_PHY=y), and had better add another two reset

> properties:

> 	reset-assert-us = <20000>;

> 	reset-deassert-us = <150000>;

> According to  RTL8211 serials PHY datasheet, for a complete PHY reset, reset

> pin must be asserted low for at least 10ms for internal regulator.

> Wait for at least 72ms (for internal circuits settling time) before accessing the

> PHY register.

> 

> This patch selects method 1, since users may waste time to find out FEC failure,

> in most cases, they just want to use networking to debug other modules.

> 

> Fixs: commit 9e847693c6f34 ("arm64: dts: freescale: Add i.MX8MP EVK board

> support")

> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

> ---

>  arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 1 -

>  1 file changed, 1 deletion(-)

> 

> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> index 7db4273cc88b..4f5c2fb33eda 100644

> --- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> +++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> @@ -97,7 +97,6 @@

>  			compatible = "ethernet-phy-ieee802.3-c22";

>  			reg = <1>;

>  			eee-broken-1000t;

> -			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;

>  		};

>  	};

>  };

> --

> 2.17.1
Shawn Guo March 18, 2021, 10:48 a.m. UTC | #2
On Thu, Mar 04, 2021 at 07:40:13PM +0800, Joakim Zhang wrote:
> Some users report that FEC can't work on i.MX8MP EVK board, it brings

> inconvenience. The root cause should be FEC controller attached to

> generic phy driver, as Realtek phy driver is built as module in the

> defconfig file (CONFIG_REALTEK_PHY=m), so it is unavailable. If provide

> "reset-gpios" property, it will reset phy when probed, and no way to

> re-config phy since we use the generic phy dirver, which leads FEC can't

> work.

> 

> There are two ways to let FEC work:

> 

> 1. If you want to use generic phy dirver, please delete "reset-gpios"

> property, keep power-on strapping pins configurations.

> 

> 2. If you want to use Realtek phy driver, please buildin driver

> (CONFIG_REALTEK_PHY=y), and had better add another two reset

> properties:

> 	reset-assert-us = <20000>;

> 	reset-deassert-us = <150000>;

> According to  RTL8211 serials PHY datasheet, for a complete PHY reset,

> reset pin must be asserted low for at least 10ms for internal regulator.

> Wait for at least 72ms (for internal circuits settling time) before

> accessing the PHY register.

> 

> This patch selects method 1, since users may waste time to find out FEC

> failure, in most cases, they just want to use networking to debug other

> modules.

> 

> Fixs: commit 9e847693c6f34 ("arm64: dts: freescale: Add i.MX8MP EVK board support")

> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

> ---

>  arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 1 -

>  1 file changed, 1 deletion(-)

> 

> diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> index 7db4273cc88b..4f5c2fb33eda 100644

> --- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> +++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> @@ -97,7 +97,6 @@

>  			compatible = "ethernet-phy-ieee802.3-c22";

>  			reg = <1>;

>  			eee-broken-1000t;

> -			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;


Hmm, DT is describing hardware.  If board schematic says there is
a reset GPIO, we should have it.

Shawn

>  		};

>  	};

>  };

> -- 

> 2.17.1

>
Joakim Zhang March 18, 2021, 11:03 a.m. UTC | #3
> -----Original Message-----

> From: Shawn Guo <shawnguo@kernel.org>

> Sent: 2021年3月18日 18:48

> To: Joakim Zhang <qiangqing.zhang@nxp.com>

> Cc: robh+dt@kernel.org; s.hauer@pengutronix.de; festevam@gmail.com;

> kernel@pengutronix.de; dl-linux-imx <linux-imx@nxp.com>;

> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org;

> linux-kernel@vger.kernel.org

> Subject: Re: [PATCH V1] arm64: dts: imx8mp: fix FEC can't work when attached

> to generic phy driver

> 

> On Thu, Mar 04, 2021 at 07:40:13PM +0800, Joakim Zhang wrote:

> > Some users report that FEC can't work on i.MX8MP EVK board, it brings

> > inconvenience. The root cause should be FEC controller attached to

> > generic phy driver, as Realtek phy driver is built as module in the

> > defconfig file (CONFIG_REALTEK_PHY=m), so it is unavailable. If

> > provide "reset-gpios" property, it will reset phy when probed, and no

> > way to re-config phy since we use the generic phy dirver, which leads

> > FEC can't work.

> >

> > There are two ways to let FEC work:

> >

> > 1. If you want to use generic phy dirver, please delete "reset-gpios"

> > property, keep power-on strapping pins configurations.

> >

> > 2. If you want to use Realtek phy driver, please buildin driver

> > (CONFIG_REALTEK_PHY=y), and had better add another two reset

> > properties:

> > 	reset-assert-us = <20000>;

> > 	reset-deassert-us = <150000>;

> > According to  RTL8211 serials PHY datasheet, for a complete PHY reset,

> > reset pin must be asserted low for at least 10ms for internal regulator.

> > Wait for at least 72ms (for internal circuits settling time) before

> > accessing the PHY register.

> >

> > This patch selects method 1, since users may waste time to find out

> > FEC failure, in most cases, they just want to use networking to debug

> > other modules.

> >

> > Fixs: commit 9e847693c6f34 ("arm64: dts: freescale: Add i.MX8MP EVK

> > board support")

> > Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

> > ---

> >  arch/arm64/boot/dts/freescale/imx8mp-evk.dts | 1 -

> >  1 file changed, 1 deletion(-)

> >

> > diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> > b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> > index 7db4273cc88b..4f5c2fb33eda 100644

> > --- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> > +++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts

> > @@ -97,7 +97,6 @@

> >  			compatible = "ethernet-phy-ieee802.3-c22";

> >  			reg = <1>;

> >  			eee-broken-1000t;

> > -			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;

> 

> Hmm, DT is describing hardware.  If board schematic says there is a reset

> GPIO, we should have it.


Hi Shawn,

Seems you prefer to 2, is it possible to buildin Realtek PHY(CONFIG_REALTEK_PHY=y)? If not, it is going to be tricky.

Best Regards,
Joakim Zhang
> Shawn

> 

> >  		};

> >  	};

> >  };

> > --

> > 2.17.1

> >
Fabio Estevam March 18, 2021, 11:15 a.m. UTC | #4
Hi Joakim,

On Thu, Mar 18, 2021 at 8:04 AM Joakim Zhang <qiangqing.zhang@nxp.com> wrote:

> Hi Shawn,

>

> Seems you prefer to 2, is it possible to buildin Realtek PHY(CONFIG_REALTEK_PHY=y)? If not, it is going to be tricky.


Yes, we should select the driver as built-in and describe the reset
timing requirements as per the datasheet.

I have just sent two patches to address the issue you reported. Please
test them.
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
index 7db4273cc88b..4f5c2fb33eda 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
@@ -97,7 +97,6 @@ 
 			compatible = "ethernet-phy-ieee802.3-c22";
 			reg = <1>;
 			eee-broken-1000t;
-			reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
 		};
 	};
 };