[U-Boot] [PATCH V2] eth: dm: fec: Add gpio phy reset binding
Michael Nazzareno Trimarchi
michael at amarulasolutions.com
Mon Jul 23 08:47:43 UTC 2018
Hi Jagan
On Mon, Jul 23, 2018 at 10:40 AM, Jagan Teki <jagan at amarulasolutions.com> wrote:
> On Mon, Jul 23, 2018 at 1:57 PM, Stefano Babic <sbabic at 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
>>> <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.
>
> 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 |
More information about the U-Boot
mailing list