eth: dm: fec: Add gpio phy reset binding
PATCH v2 1/1 eth: dm: fec: Add gpio phy reset binding
Add the missing gpio phy reset binding to the gpio and reset time configuration
---
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(-)
drivers/net/fec_mxc.c +37 -6
@@ -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 ); + }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[] = {
drivers/net/fec_mxc.h +4 -1
@@ -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
Signature · 1 line
2.7.4
PATCH v2 1/1 eth: dm: fec: Add gpio phy reset binding
Quoted 4 lines · Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by Michael Trimarchi <[email protected]>
PATCH v2 1/1 eth: dm: fec: Add gpio phy reset binding
In reply to Michael TrimarchiQuoted 77 lines · Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by Michael Trimarchi <[email protected]>---
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(-)drivers/net/fec_mxc.c +20
-1@@ -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 ; }
drivers/net/fec_mxc.c static int fecmxc_ofdata_to_platdata(struct udevice *dev) · line 1358
Quoted 10 lines
drivers/net/fec_mxc.c +6
-4-/* 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 v2 1/1 eth: dm: fec: Add gpio phy reset binding
Hi Jagan,
Quoted 79 lines · Jagan Teki
Quoted 77 lines · Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by Michael Trimarchi <[email protected]>---
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(-)drivers/net/fec_mxc.c +20
-1@@ -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 ; }
Quoted 13 lines
drivers/net/fec_mxc.c static int fecmxc_ofdata_to_platdata(struct udevice *dev) · line 1358
Quoted 10 lines
drivers/net/fec_mxc.c +6
-4-/* 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
Signature · 5 lines
===================================================================== 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 =====================================================================
PATCH v2 1/1 eth: dm: fec: Add gpio phy reset binding
Quoted 96 lines · Stefano Babic
Hi Jagan,
Quoted 79 lines · Jagan Teki
Quoted 77 lines · Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by Michael Trimarchi <[email protected]>---
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(-)drivers/net/fec_mxc.c +20
-1@@ -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 ; }Quoted 13 lines
drivers/net/fec_mxc.c static int fecmxc_ofdata_to_platdata(struct udevice *dev) · line 1358
Quoted 10 lines
drivers/net/fec_mxc.c +6
-4-/* 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.
Quoted 7 lines
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.
PATCH v2 1/1 eth: dm: fec: Add gpio phy reset binding
Hi Jagan
Quoted 99 lines · Jagan Teki
Quoted 98 lines · Stefano Babic
Hi Jagan,
Quoted 79 lines · Jagan Teki
Quoted 77 lines · Michael Trimarchi
Add the missing gpio phy reset binding to the gpio and reset time configuration
Signed-off-by Michael Trimarchi <[email protected]>---
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(-)drivers/net/fec_mxc.c +20
-1@@ -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 ; }Quoted 13 lines
drivers/net/fec_mxc.c static int fecmxc_ofdata_to_platdata(struct udevice *dev) · line 1358
Quoted 10 lines
drivers/net/fec_mxc.c +6
-4-/* 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...
Quoted 7 lines
Quoted 5 lines
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
Signature · 4 lines
| Michael Nazzareno Trimarchi Amarula Solutions BV | | COO - Founder Cruquiuskade 47 | | +31(0)851119172 Amsterdam 1018 AM NL | | [`as] http://www.amarulasolutions.com |