Hi Jagan On Mon, Jul 23, 2018 at 10:40 AM, Jagan Teki <ja...@amarulasolutions.com> wrote: > On Mon, Jul 23, 2018 at 1:57 PM, Stefano Babic <sba...@denx.de> wrote: >> 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. > > We are re-working this, will send the next version.
Please explain what kind of rework needs a 10 lines ;) patch. Anyway, when is suppose to be upload it again? Michael -- | Michael Nazzareno Trimarchi Amarula Solutions BV | | COO - Founder Cruquiuskade 47 | | +31(0)851119172 Amsterdam 1018 AM NL | | [`as] http://www.amarulasolutions.com | _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot