Hi Jagan, On 07/07/2018 13:36, Jagan Teki wrote: > On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi > <mich...@amarulasolutions.com> wrote: >> Add the missing gpio phy reset binding to the gpio and >> reset time configuration >> >> Signed-off-by: Michael Trimarchi <mich...@amarulasolutions.com> >> --- >> Changes v1 -> v2: >> - fix commit message >> - fix timeout property read >> --- >> drivers/net/fec_mxc.c | 43 +++++++++++++++++++++++++++++++++++++------ >> drivers/net/fec_mxc.h | 5 ++++- >> 2 files changed, 41 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c >> index 694a0b2..dac07b6 100644 >> --- a/drivers/net/fec_mxc.c >> +++ b/drivers/net/fec_mxc.c >> @@ -15,7 +15,6 @@ >> #include <miiphy.h> >> #include <net.h> >> #include <netdev.h> >> -#include "fec_mxc.h" >> >> #include <asm/io.h> >> #include <linux/errno.h> >> @@ -24,6 +23,9 @@ >> #include <asm/arch/clock.h> >> #include <asm/arch/imx-regs.h> >> #include <asm/mach-imx/sys_proto.h> >> +#include <asm-generic/gpio.h> >> + >> +#include "fec_mxc.h" >> >> DECLARE_GLOBAL_DATA_PTR; >> >> @@ -1245,6 +1247,19 @@ static int fec_phy_init(struct fec_priv *priv, struct >> udevice *dev) >> return 0; >> } >> >> +#ifdef CONFIG_DM_GPIO >> +/* FEC GPIO reset */ >> +static void fec_gpio_reset(struct fec_priv *priv) >> +{ >> + debug("fec_gpio_reset: fec_gpio_reset(dev)\n"); >> + if (dm_gpio_is_valid(&priv->phy_reset_gpio)) { >> + dm_gpio_set_value(&priv->phy_reset_gpio, 1); >> + udelay(priv->reset_delay); >> + dm_gpio_set_value(&priv->phy_reset_gpio, 0); >> + } >> +} >> +#endif >> + >> static int fecmxc_probe(struct udevice *dev) >> { >> struct eth_pdata *pdata = dev_get_platdata(dev); >> @@ -1257,6 +1272,9 @@ static int fecmxc_probe(struct udevice *dev) >> if (ret) >> return ret; >> >> +#ifdef CONFIG_DM_GPIO >> + fec_gpio_reset(priv); >> +#endif >> /* Reset chip. */ >> writel(readl(&priv->eth->ecntrl) | FEC_ECNTRL_RESET, >> &priv->eth->ecntrl); >> @@ -1314,6 +1332,7 @@ static int fecmxc_remove(struct udevice *dev) >> >> static int fecmxc_ofdata_to_platdata(struct udevice *dev) >> { >> + int ret = 0; >> struct eth_pdata *pdata = dev_get_platdata(dev); >> struct fec_priv *priv = dev_get_priv(dev); >> const char *phy_mode; >> @@ -1331,12 +1350,24 @@ static int fecmxc_ofdata_to_platdata(struct udevice >> *dev) >> return -EINVAL; >> } >> >> - /* TODO >> - * Need to get the reset-gpio and related properties from DT >> - * and implemet the enet reset code on .probe call >> - */ >> +#ifdef CONFIG_DM_GPIO >> + ret = gpio_request_by_name(dev, "phy-reset-gpios", 0, >> + &priv->phy_reset_gpio, GPIOD_IS_OUT); >> + if (ret == 0) { >> + ret = dev_read_u32_array(dev, "phy-reset-duration", >> + &priv->reset_delay, 1); > > This is return -1 if none have phy-reset-duration and function return > -1 at the end.
Patch is landed on my desk... I am not sure what you mind. It is also thinkable that some products have no GPIO reset at all, and function simply ignores them. And setting phy-reset-duration to a default value seems quite logical. Let me know which are the issues here, I had thought I should apply this. Best regards, Stefano -- ===================================================================== DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sba...@denx.de ===================================================================== _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot