[U-Boot] [PATCH 0/2] Fix broken ethernet on imx8qxp-mek

This patchset introduces support for phy-reset-post-delay property, which is then used by imx8qxp-mek to add 150ms post reset delay. Without this delay PHY is not detected.
Andrejs Cainikovs (2): net: dm: fec: Support phy-reset-post-delay property dts: imx8qxp-mek: Add PHY post reset delay
arch/arm/dts/fsl-imx8qxp-mek.dts | 1 + drivers/net/fec_mxc.c | 11 +++++++++++ drivers/net/fec_mxc.h | 1 + 3 files changed, 13 insertions(+)
--- 2.11.0

As per Linux kernel DT binding doc: - phy-reset-post-delay : Post reset delay in milliseconds. If present then a delay of phy-reset-post-delay milliseconds will be observed after the phy-reset-gpios has been toggled. Can be omitted thus no delay is observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com --- drivers/net/fec_mxc.c | 11 +++++++++++ drivers/net/fec_mxc.h | 1 + 2 files changed, 12 insertions(+)
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index a14fe43a5b..7fc95fa767 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -1315,6 +1315,8 @@ static void fec_gpio_reset(struct fec_priv *priv) dm_gpio_set_value(&priv->phy_reset_gpio, 1); mdelay(priv->reset_delay); dm_gpio_set_value(&priv->phy_reset_gpio, 0); + if (priv->reset_post_delay) + mdelay(priv->reset_post_delay); } } #endif @@ -1474,6 +1476,15 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev) /* property value wrong, use default value */ priv->reset_delay = 1; } + + priv->reset_post_delay = dev_read_u32_default(dev, + "phy-reset-post-delay", + 0); + if (priv->reset_post_delay > 1000) { + printf("FEC MXC: phy reset post delay should be <= 1000ms\n"); + /* property value wrong, use default value */ + priv->reset_post_delay = 0; + } #endif
return 0; diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index e9a661f0a1..e5f2dd75c5 100644 --- a/drivers/net/fec_mxc.h +++ b/drivers/net/fec_mxc.h @@ -258,6 +258,7 @@ struct fec_priv { #ifdef CONFIG_DM_GPIO struct gpio_desc phy_reset_gpio; uint32_t reset_delay; + uint32_t reset_post_delay; #endif #ifdef CONFIG_DM_ETH u32 interface;

On Fri, 1 Mar 2019 13:27:59 +0000 Andrejs Cainikovs Andrejs.Cainikovs@netmodule.com wrote:
As per Linux kernel DT binding doc:
- phy-reset-post-delay : Post reset delay in milliseconds. If present then a delay of phy-reset-post-delay milliseconds will be observed after the phy-reset-gpios has been toggled. Can be omitted thus no delay is observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
Reviewed-by: Anatolij Gustschin agust@denx.de
-- Anatolij

On 01/03/19 14:27, Andrejs Cainikovs wrote:
As per Linux kernel DT binding doc:
- phy-reset-post-delay : Post reset delay in milliseconds. If present then a delay of phy-reset-post-delay milliseconds will be observed after the phy-reset-gpios has been toggled. Can be omitted thus no delay is observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
drivers/net/fec_mxc.c | 11 +++++++++++ drivers/net/fec_mxc.h | 1 + 2 files changed, 12 insertions(+)
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index a14fe43a5b..7fc95fa767 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -1315,6 +1315,8 @@ static void fec_gpio_reset(struct fec_priv *priv) dm_gpio_set_value(&priv->phy_reset_gpio, 1); mdelay(priv->reset_delay); dm_gpio_set_value(&priv->phy_reset_gpio, 0);
if (priv->reset_post_delay)
}mdelay(priv->reset_post_delay);
} #endif @@ -1474,6 +1476,15 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev) /* property value wrong, use default value */ priv->reset_delay = 1; }
- priv->reset_post_delay = dev_read_u32_default(dev,
"phy-reset-post-delay",
0);
- if (priv->reset_post_delay > 1000) {
printf("FEC MXC: phy reset post delay should be <= 1000ms\n");
/* property value wrong, use default value */
priv->reset_post_delay = 0;
- }
#endif
return 0; diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index e9a661f0a1..e5f2dd75c5 100644 --- a/drivers/net/fec_mxc.h +++ b/drivers/net/fec_mxc.h @@ -258,6 +258,7 @@ struct fec_priv { #ifdef CONFIG_DM_GPIO struct gpio_desc phy_reset_gpio; uint32_t reset_delay;
- uint32_t reset_post_delay;
#endif #ifdef CONFIG_DM_ETH u32 interface;
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

On Fri, Mar 1, 2019 at 7:28 AM Andrejs Cainikovs Andrejs.Cainikovs@netmodule.com wrote:
As per Linux kernel DT binding doc:
- phy-reset-post-delay : Post reset delay in milliseconds. If present then a delay of phy-reset-post-delay milliseconds will be observed after the phy-reset-gpios has been toggled. Can be omitted thus no delay is observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
Acked-by: Joe Hershberger joe.hershberger@ni.com

Hi Andrejs,
As per Linux kernel DT binding doc:
- phy-reset-post-delay : Post reset delay in milliseconds. If present
then a delay of phy-reset-post-delay milliseconds will be observed after the phy-reset-gpios has been toggled. Can be omitted thus no delay is observed. Delay is in range of 1ms to 1000ms. Other delays are invalid.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
drivers/net/fec_mxc.c | 11 +++++++++++ drivers/net/fec_mxc.h | 1 + 2 files changed, 12 insertions(+)
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index a14fe43a5b..7fc95fa767 100644 --- a/drivers/net/fec_mxc.c +++ b/drivers/net/fec_mxc.c @@ -1315,6 +1315,8 @@ static void fec_gpio_reset(struct fec_priv *priv) dm_gpio_set_value(&priv->phy_reset_gpio, 1); mdelay(priv->reset_delay); dm_gpio_set_value(&priv->phy_reset_gpio, 0);
if (priv->reset_post_delay)
}mdelay(priv->reset_post_delay);
} #endif @@ -1474,6 +1476,15 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev) /* property value wrong, use default value */ priv->reset_delay = 1; }
- priv->reset_post_delay = dev_read_u32_default(dev,
"phy-reset-post-delay",
0);
- if (priv->reset_post_delay > 1000) {
printf("FEC MXC: phy reset post delay should be <=
1000ms\n");
/* property value wrong, use default value */
priv->reset_post_delay = 0;
- }
#endif
return 0; diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index e9a661f0a1..e5f2dd75c5 100644 --- a/drivers/net/fec_mxc.h +++ b/drivers/net/fec_mxc.h @@ -258,6 +258,7 @@ struct fec_priv { #ifdef CONFIG_DM_GPIO struct gpio_desc phy_reset_gpio; uint32_t reset_delay;
- uint32_t reset_post_delay;
#endif #ifdef CONFIG_DM_ETH u32 interface;
Acked-by: Lukasz Majewski lukma@denx.de
(as I had similar patch somewhere .... to fix this issue on IMX6Q).
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

Hi Andrejs,
https://patchwork.ozlabs.org/patch/1050177/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git
Thanks! -Joe

Hi Joe,
On Tue, 5 Mar 2019 12:05:38 -0600 Joe Hershberger joe.hershberger@ni.com wrote:
Hi Andrejs,
https://patchwork.ozlabs.org/patch/1050177/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git
This patch is not in mainline tree yet, but it is marked as accepted on patchwork. Could you please check? This is part of a bug-fix for broken ethernet on the board and should go into v2019.04 release.
Thanks, Anatolij

Hi Anatolij,
On Tue, Mar 12, 2019 at 4:10 AM Anatolij Gustschin agust@denx.de wrote:
Hi Joe,
On Tue, 5 Mar 2019 12:05:38 -0600 Joe Hershberger joe.hershberger@ni.com wrote:
Hi Andrejs,
https://patchwork.ozlabs.org/patch/1050177/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git
This patch is not in mainline tree yet, but it is marked as accepted on patchwork. Could you please check? This is part of a bug-fix for broken ethernet on the board and should go into v2019.04 release.
Yes, it should go into this release. Hopefully Tom will pull it in shortly.
Thanks, -Joe
Thanks, Anatolij _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot

PHY cannot be detected unless we wait about 150 ms.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com --- arch/arm/dts/fsl-imx8qxp-mek.dts | 1 + 1 file changed, 1 insertion(+)
diff --git a/arch/arm/dts/fsl-imx8qxp-mek.dts b/arch/arm/dts/fsl-imx8qxp-mek.dts index 41f7ec1763..4f35fbe31d 100644 --- a/arch/arm/dts/fsl-imx8qxp-mek.dts +++ b/arch/arm/dts/fsl-imx8qxp-mek.dts @@ -224,6 +224,7 @@ status = "okay"; phy-reset-gpios = <&pca9557_a 4 GPIO_ACTIVE_LOW>; phy-reset-duration = <10>; + phy-reset-post-delay = <150>;
mdio { #address-cells = <1>;

On Fri, 1 Mar 2019 13:28:00 +0000 Andrejs Cainikovs Andrejs.Cainikovs@netmodule.com wrote:
PHY cannot be detected unless we wait about 150 ms.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
Reviewed-by: Anatolij Gustschin agust@denx.de
-- Anatolij

On 01/03/19 14:28, Andrejs Cainikovs wrote:
PHY cannot be detected unless we wait about 150 ms.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
arch/arm/dts/fsl-imx8qxp-mek.dts | 1 + 1 file changed, 1 insertion(+)
diff --git a/arch/arm/dts/fsl-imx8qxp-mek.dts b/arch/arm/dts/fsl-imx8qxp-mek.dts index 41f7ec1763..4f35fbe31d 100644 --- a/arch/arm/dts/fsl-imx8qxp-mek.dts +++ b/arch/arm/dts/fsl-imx8qxp-mek.dts @@ -224,6 +224,7 @@ status = "okay"; phy-reset-gpios = <&pca9557_a 4 GPIO_ACTIVE_LOW>; phy-reset-duration = <10>;
phy-reset-post-delay = <150>;
mdio { #address-cells = <1>;
Reviewed-by: Stefano Babic sbabic@denx.de
Best regards, Stefano Babic

On Fri, Mar 1, 2019 at 7:28 AM Andrejs Cainikovs Andrejs.Cainikovs@netmodule.com wrote:
PHY cannot be detected unless we wait about 150 ms.
Signed-off-by: Andrejs Cainikovs andrejs.cainikovs@netmodule.com
Acked-by: Joe Hershberger joe.hershberger@ni.com

Hi Andrejs,
https://patchwork.ozlabs.org/patch/1050178/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git
Thanks! -Joe

Hi Joe,
On Tue, 5 Mar 2019 12:05:42 -0600 Joe Hershberger joe.hershberger@ni.com wrote:
Hi Andrejs,
https://patchwork.ozlabs.org/patch/1050178/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git
This patch is marked as accepted on patchwork, but it is not in mainline tree yet. It should go into v2019.04 release, too. Could you please check?
Thanks, Anatolij
participants (5)
-
Anatolij Gustschin
-
Andrejs Cainikovs
-
Joe Hershberger
-
Lukasz Majewski
-
Stefano Babic