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

2018-07-23 Thread Michael Nazzareno Trimarchi
Hi Jagan

On Mon, Jul 23, 2018 at 10:40 AM, Jagan Teki  wrote:
> On Mon, Jul 23, 2018 at 1:57 PM, Stefano Babic  wrote:
>> Hi Jagan,
>>
>> On 07/07/2018 13:36, Jagan Teki wrote:
>>> On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi
>>>  wrote:
 Add the missing gpio phy reset binding to the gpio and
 reset time configuration

 Signed-off-by: Michael Trimarchi 
 ---
 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 
  #include 
  #include 
 -#include "fec_mxc.h"

  #include 
  #include 
 @@ -24,6 +23,9 @@
  #include 
  #include 
  #include 
 +#include 
 +
 +#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(>phy_reset_gpio)) {
 +   dm_gpio_set_value(>phy_reset_gpio, 1);
 +   udelay(priv->reset_delay);
 +   dm_gpio_set_value(>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(>eth->ecntrl) | FEC_ECNTRL_RESET,
>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,
 +>phy_reset_gpio, GPIOD_IS_OUT);
 +   if (ret == 0) {
 +   ret = dev_read_u32_array(dev, "phy-reset-duration",
 +>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


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

2018-07-23 Thread Jagan Teki
On Mon, Jul 23, 2018 at 1:57 PM, Stefano Babic  wrote:
> Hi Jagan,
>
> On 07/07/2018 13:36, Jagan Teki wrote:
>> On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi
>>  wrote:
>>> Add the missing gpio phy reset binding to the gpio and
>>> reset time configuration
>>>
>>> Signed-off-by: Michael Trimarchi 
>>> ---
>>> 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 
>>>  #include 
>>>  #include 
>>> -#include "fec_mxc.h"
>>>
>>>  #include 
>>>  #include 
>>> @@ -24,6 +23,9 @@
>>>  #include 
>>>  #include 
>>>  #include 
>>> +#include 
>>> +
>>> +#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(>phy_reset_gpio)) {
>>> +   dm_gpio_set_value(>phy_reset_gpio, 1);
>>> +   udelay(priv->reset_delay);
>>> +   dm_gpio_set_value(>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(>eth->ecntrl) | FEC_ECNTRL_RESET,
>>>>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,
>>> +>phy_reset_gpio, GPIOD_IS_OUT);
>>> +   if (ret == 0) {
>>> +   ret = dev_read_u32_array(dev, "phy-reset-duration",
>>> +>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.
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2018-07-23 Thread Stefano Babic
Hi Jagan,

On 07/07/2018 13:36, Jagan Teki wrote:
> On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi
>  wrote:
>> Add the missing gpio phy reset binding to the gpio and
>> reset time configuration
>>
>> Signed-off-by: Michael Trimarchi 
>> ---
>> 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 
>>  #include 
>>  #include 
>> -#include "fec_mxc.h"
>>
>>  #include 
>>  #include 
>> @@ -24,6 +23,9 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>> +
>> +#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(>phy_reset_gpio)) {
>> +   dm_gpio_set_value(>phy_reset_gpio, 1);
>> +   udelay(priv->reset_delay);
>> +   dm_gpio_set_value(>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(>eth->ecntrl) | FEC_ECNTRL_RESET,
>>>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,
>> +>phy_reset_gpio, GPIOD_IS_OUT);
>> +   if (ret == 0) {
>> +   ret = dev_read_u32_array(dev, "phy-reset-duration",
>> +>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: sba...@denx.de
=
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2018-07-07 Thread Jagan Teki
On Sun, Jun 17, 2018 at 6:52 PM, Michael Trimarchi
 wrote:
> Add the missing gpio phy reset binding to the gpio and
> reset time configuration
>
> Signed-off-by: Michael Trimarchi 
> ---
> 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 
>  #include 
>  #include 
> -#include "fec_mxc.h"
>
>  #include 
>  #include 
> @@ -24,6 +23,9 @@
>  #include 
>  #include 
>  #include 
> +#include 
> +
> +#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(>phy_reset_gpio)) {
> +   dm_gpio_set_value(>phy_reset_gpio, 1);
> +   udelay(priv->reset_delay);
> +   dm_gpio_set_value(>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(>eth->ecntrl) | FEC_ECNTRL_RESET,
>>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,
> +>phy_reset_gpio, GPIOD_IS_OUT);
> +   if (ret == 0) {
> +   ret = dev_read_u32_array(dev, "phy-reset-duration",
> +>reset_delay, 1);

This is return -1 if none have phy-reset-duration and function return
-1 at the end.
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2018-06-19 Thread Joe Hershberger
On Sun, Jun 17, 2018 at 8:22 AM, Michael Trimarchi
 wrote:
> Add the missing gpio phy reset binding to the gpio and
> reset time configuration
>
> Signed-off-by: Michael Trimarchi 

Acked-by: Joe Hershberger 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2018-06-17 Thread Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and
reset time configuration

Signed-off-by: Michael Trimarchi 
---
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 
 #include 
 #include 
-#include "fec_mxc.h"
 
 #include 
 #include 
@@ -24,6 +23,9 @@
 #include 
 #include 
 #include 
+#include 
+
+#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(>phy_reset_gpio)) {
+   dm_gpio_set_value(>phy_reset_gpio, 1);
+   udelay(priv->reset_delay);
+   dm_gpio_set_value(>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(>eth->ecntrl) | FEC_ECNTRL_RESET,
   >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,
+>phy_reset_gpio, GPIOD_IS_OUT);
+   if (ret == 0) {
+   ret = dev_read_u32_array(dev, "phy-reset-duration",
+>reset_delay, 1);
+   } else if (ret == -ENOENT) {
+   priv->reset_delay = 1000;
+   ret = 0;
+   }
 
-   return 0;
+   if (priv->reset_delay > 1000) {
+   printf("FEX MXC: gpio reset timeout should be less the 1000\n");
+   priv->reset_delay = 1000;
+   }
+#endif
+
+   return ret;
 }
 
 static const struct udevice_id fecmxc_ids[] = {
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index 3b935af..fd89443 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -250,7 +250,10 @@ struct fec_priv {
int phy_id;
int (*mii_postcall)(int);
 #endif
-
+#ifdef CONFIG_DM_GPIO
+   struct gpio_desc phy_reset_gpio;
+   uint32_t reset_delay;
+#endif
 #ifdef CONFIG_DM_ETH
u32 interface;
 #endif
-- 
2.7.4

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot