[U-Boot] [PATCH V2] eth: dm: fec: Add gpio phy reset binding

Jagan Teki jagannadh.teki at gmail.com
Sat Jul 7 11:36:33 UTC 2018


On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi
<michael at amarulasolutions.com> wrote:
> Add the missing gpio phy reset binding to the gpio and
> reset time configuration
>
> Signed-off-by: Michael Trimarchi <michael at 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.


More information about the U-Boot mailing list