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. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot