[U-Boot] [PATCH 3/4] net: dm: fec: Support the phy-supply binding

Adam Ford aford173 at gmail.com
Sun Jan 13 14:00:12 UTC 2019


On Thu, Oct 4, 2018 at 12:55 PM Martin Fuzzey
<martin.fuzzey at flowbird.group> wrote:
>
> Configure the phy regulator if defined by the "phy-supply" DT phandle.
>
> Signed-off-by: Martin Fuzzey <martin.fuzzey at flowbird.group>

This patch seems to break the Ethernet on my board, but I think I have
a possible solution (see below)

> ---
>  drivers/net/fec_mxc.c | 20 ++++++++++++++++++++
>  drivers/net/fec_mxc.h |  3 +++
>  2 files changed, 23 insertions(+)
>
> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
> index 163ae4c..4a5555e 100644
> --- a/drivers/net/fec_mxc.c
> +++ b/drivers/net/fec_mxc.c
> @@ -15,6 +15,7 @@
>  #include <miiphy.h>
>  #include <net.h>
>  #include <netdev.h>
> +#include <power/regulator.h>
>
>  #include <asm/io.h>
>  #include <linux/errno.h>
> @@ -1272,6 +1273,16 @@ static int fecmxc_probe(struct udevice *dev)
>         if (ret)
>                 return ret;
>
> +#ifdef CONFIG_DM_REGULATOR
> +       if (priv->phy_supply) {
> +               ret = regulator_autoset(priv->phy_supply);

I have a board that uses a fixed regulator driven by a GPIO.  It's
neither always-on, nor it is enabled on boot and it doesn't have a
specified current setting.  With DM_REGULATOR set, regulator_autoset
fails and FEC doesn't come up.
Looking at a bunch of other drivers, and how they enable their
respective regulators, they're using regulator_set_enable instead of
autoset.

Is there a reason we couldn't use

                    ret = regulator_set_enable(priv->phy_supply, true);

adam
> +               if (ret) {
> +                       printf("%s: Error enabling phy supply\n", dev->name);
> +                       return ret;
> +               }
> +       }
> +#endif
> +
>  #ifdef CONFIG_DM_GPIO
>         fec_gpio_reset(priv);
>  #endif
> @@ -1327,6 +1338,11 @@ static int fecmxc_remove(struct udevice *dev)
>         mdio_unregister(priv->bus);
>         mdio_free(priv->bus);
>
> +#ifdef CONFIG_DM_REGULATOR
> +       if (priv->phy_supply)
> +               regulator_set_enable(priv->phy_supply, false);
> +#endif
> +
>         return 0;
>  }
>
> @@ -1364,6 +1380,10 @@ static int fecmxc_ofdata_to_platdata(struct udevice *dev)
>         }
>  #endif
>
> +#ifdef CONFIG_DM_REGULATOR
> +       device_get_supply_regulator(dev, "phy-supply", &priv->phy_supply);
> +#endif
> +
>         return 0;
>  }
>
> diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
> index fd89443..848cd7c 100644
> --- a/drivers/net/fec_mxc.h
> +++ b/drivers/net/fec_mxc.h
> @@ -250,6 +250,9 @@ struct fec_priv {
>         int phy_id;
>         int (*mii_postcall)(int);
>  #endif
> +#ifdef CONFIG_DM_REGULATOR
> +       struct udevice *phy_supply;
> +#endif
>  #ifdef CONFIG_DM_GPIO
>         struct gpio_desc phy_reset_gpio;
>         uint32_t reset_delay;
> --
> 1.9.1
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list