[U-Boot] [PATCH V2] eth: dm: fec: Add gpio phy reset binding
Stefano Babic
sbabic at denx.de
Mon Jul 23 08:27:34 UTC 2018
Hi Jagan,
On 07/07/2018 13:36, Jagan Teki wrote:
> 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.
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: sbabic at denx.de
=====================================================================
More information about the U-Boot
mailing list