mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] double requested gpio problem
@ 2014-09-16 12:15 Silvio Fricke
  2014-09-16 12:15 ` [PATCH] gpiolib: gpio_request: correct return code of a already requested gpio Silvio Fricke
  0 siblings, 1 reply; 7+ messages in thread
From: Silvio Fricke @ 2014-09-16 12:15 UTC (permalink / raw)
  To: barebox; +Cc: Silvio Fricke

Hi,

I have seen that our phy_reset pin is not correctly configured because the
gpiopin information is requested more than one time. I get this as error
message. (My board is the eDM-QMX6 from Data-Modul)

	gpiolib: _gpio_request: gpio-25 (phy-reset) status -16

Because gpiolib is used so many times, I don't know if this is a correct
solution for my problem.
Can someone check this patch and give me some comments?

Thx,
Silvio

Silvio Fricke (1):
  gpiolib: gpio_request: correct return code of a already requested gpio

 drivers/gpio/gpiolib.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] gpiolib: gpio_request: correct return code of a already requested gpio
  2014-09-16 12:15 [PATCH] double requested gpio problem Silvio Fricke
@ 2014-09-16 12:15 ` Silvio Fricke
  2014-09-17  6:32   ` [PATCH] gpio phy-reset problem Silvio Fricke
  2014-09-17  6:33   ` [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin Silvio Fricke
  0 siblings, 2 replies; 7+ messages in thread
From: Silvio Fricke @ 2014-09-16 12:15 UTC (permalink / raw)
  To: barebox; +Cc: Silvio Fricke

Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>
---
 drivers/gpio/gpiolib.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 611e41e..3370438 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -55,10 +55,8 @@ int gpio_request(unsigned gpio, const char *label)
 		goto done;
 	}
 
-	if (gi->requested) {
-		ret = -EBUSY;
-		goto done;
-	}
+	if (gi->requested)
+		return 0;
 
 	ret = 0;
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] gpio phy-reset problem
  2014-09-16 12:15 ` [PATCH] gpiolib: gpio_request: correct return code of a already requested gpio Silvio Fricke
@ 2014-09-17  6:32   ` Silvio Fricke
  2014-09-17  6:33   ` [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin Silvio Fricke
  1 sibling, 0 replies; 7+ messages in thread
From: Silvio Fricke @ 2014-09-17  6:32 UTC (permalink / raw)
  To: barebox, Sascha Hauer; +Cc: Silvio Fricke

Hi,

okay - I have found the problem: Silvio - know YOUR BOARDS code! :-)
Sasha: Please ignore the first patch, and add this to your repo.

Thx,
Silvio


Silvio Fricke (1):
  ARM: i.MX: edmqmx6: free phy-reset gpio pin

 arch/arm/boards/datamodul-edm-qmx6/board.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin
  2014-09-16 12:15 ` [PATCH] gpiolib: gpio_request: correct return code of a already requested gpio Silvio Fricke
  2014-09-17  6:32   ` [PATCH] gpio phy-reset problem Silvio Fricke
@ 2014-09-17  6:33   ` Silvio Fricke
  2014-09-17  7:11     ` Sascha Hauer
  2014-09-22  4:57     ` Sascha Hauer
  1 sibling, 2 replies; 7+ messages in thread
From: Silvio Fricke @ 2014-09-17  6:33 UTC (permalink / raw)
  To: barebox, Sascha Hauer; +Cc: Silvio Fricke

Since 93a6c6a808("dts: update to v3.17-rc2") we have a correct gpio
configuration. This results in a double gpio request what receipted in a
error message like this one:

	gpiolib: _gpio_request: gpio-25 (phy-reset) status -16

Now with this patch the problem is gone.

Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>
---
 arch/arm/boards/datamodul-edm-qmx6/board.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boards/datamodul-edm-qmx6/board.c b/arch/arm/boards/datamodul-edm-qmx6/board.c
index e388e28..25f45df 100644
--- a/arch/arm/boards/datamodul-edm-qmx6/board.c
+++ b/arch/arm/boards/datamodul-edm-qmx6/board.c
@@ -49,6 +49,7 @@
 #define RQ7_GPIO_ENET_MODE2	IMX_GPIO_NR(6, 28)
 #define RQ7_GPIO_ENET_MODE3	IMX_GPIO_NR(6, 29)
 #define RQ7_GPIO_ENET_EN_CLK125	IMX_GPIO_NR(6, 24)
+#define RQ7_GPIO_ENET_RESET     IMX_GPIO_NR(1, 25)
 
 static iomux_v3_cfg_t realq7_pads_gpio[] = {
 	MX6Q_PAD_RGMII_RXC__GPIO_6_30,
@@ -57,6 +58,7 @@ static iomux_v3_cfg_t realq7_pads_gpio[] = {
 	MX6Q_PAD_RGMII_RD2__GPIO_6_28,
 	MX6Q_PAD_RGMII_RD3__GPIO_6_29,
 	MX6Q_PAD_RGMII_RX_CTL__GPIO_6_24,
+	MX6Q_PAD_ENET_CRS_DV__GPIO_1_25,
 };
 
 static int ksz9031rn_phy_fixup(struct phy_device *dev)
@@ -85,12 +87,14 @@ static int realq7_enet_init(void)
 	gpio_direction_output(RQ7_GPIO_ENET_MODE3, 1);
 	gpio_direction_output(RQ7_GPIO_ENET_EN_CLK125, 1);
 
-	gpio_direction_output(25, 0);
+	gpio_direction_output(RQ7_GPIO_ENET_RESET, 0);
 	mdelay(50);
 
-	gpio_direction_output(25, 1);
+	gpio_direction_output(RQ7_GPIO_ENET_RESET, 1);
 	mdelay(50);
 
+	gpio_free(RQ7_GPIO_ENET_RESET);
+
 	phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK,
 					   ksz9031rn_phy_fixup);
 
-- 
2.1.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin
  2014-09-17  6:33   ` [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin Silvio Fricke
@ 2014-09-17  7:11     ` Sascha Hauer
  2014-09-17  7:17       ` Alexander Shiyan
  2014-09-22  4:57     ` Sascha Hauer
  1 sibling, 1 reply; 7+ messages in thread
From: Sascha Hauer @ 2014-09-17  7:11 UTC (permalink / raw)
  To: Silvio Fricke; +Cc: barebox

Hi Silvio,

On Wed, Sep 17, 2014 at 08:33:00AM +0200, Silvio Fricke wrote:
> Since 93a6c6a808("dts: update to v3.17-rc2") we have a correct gpio
> configuration. This results in a double gpio request what receipted in a
> error message like this one:
> 
> 	gpiolib: _gpio_request: gpio-25 (phy-reset) status -16
> 
> Now with this patch the problem is gone.
> 
> Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>
> ---
>  arch/arm/boards/datamodul-edm-qmx6/board.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boards/datamodul-edm-qmx6/board.c b/arch/arm/boards/datamodul-edm-qmx6/board.c
> index e388e28..25f45df 100644
> --- a/arch/arm/boards/datamodul-edm-qmx6/board.c
> +++ b/arch/arm/boards/datamodul-edm-qmx6/board.c
> @@ -49,6 +49,7 @@
>  #define RQ7_GPIO_ENET_MODE2	IMX_GPIO_NR(6, 28)
>  #define RQ7_GPIO_ENET_MODE3	IMX_GPIO_NR(6, 29)
>  #define RQ7_GPIO_ENET_EN_CLK125	IMX_GPIO_NR(6, 24)
> +#define RQ7_GPIO_ENET_RESET     IMX_GPIO_NR(1, 25)
>  
>  static iomux_v3_cfg_t realq7_pads_gpio[] = {
>  	MX6Q_PAD_RGMII_RXC__GPIO_6_30,
> @@ -57,6 +58,7 @@ static iomux_v3_cfg_t realq7_pads_gpio[] = {
>  	MX6Q_PAD_RGMII_RD2__GPIO_6_28,
>  	MX6Q_PAD_RGMII_RD3__GPIO_6_29,
>  	MX6Q_PAD_RGMII_RX_CTL__GPIO_6_24,
> +	MX6Q_PAD_ENET_CRS_DV__GPIO_1_25,
>  };
>  
>  static int ksz9031rn_phy_fixup(struct phy_device *dev)
> @@ -85,12 +87,14 @@ static int realq7_enet_init(void)
>  	gpio_direction_output(RQ7_GPIO_ENET_MODE3, 1);
>  	gpio_direction_output(RQ7_GPIO_ENET_EN_CLK125, 1);
>  
> -	gpio_direction_output(25, 0);
> +	gpio_direction_output(RQ7_GPIO_ENET_RESET, 0);
>  	mdelay(50);
>  
> -	gpio_direction_output(25, 1);
> +	gpio_direction_output(RQ7_GPIO_ENET_RESET, 1);
>  	mdelay(50);
>  
> +	gpio_free(RQ7_GPIO_ENET_RESET);
> +
>  	phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK,
>  					   ksz9031rn_phy_fixup);

I'm not sure this fully works as expected. Here the code configures the
ethernet pins as gpios with defined output states and resets the phy
afterwards. This makes sure the phy bootstrap pins are configured
correctly during phy reset.
Now the driver core sets up the ethernet pins to their functional mode
and the fec driver resets the phy again with some undefined states.
IMO this phy-reset-gpio property really stinks. Not that it's in the
wrong place (should be in a phy node, not the ethernet node), it also
destroys all careful phy setup done earlier.

I don't know a good way out of this situation, but it seems we should
create a way to reset the phy either properly or not at all.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin
  2014-09-17  7:11     ` Sascha Hauer
@ 2014-09-17  7:17       ` Alexander Shiyan
  0 siblings, 0 replies; 7+ messages in thread
From: Alexander Shiyan @ 2014-09-17  7:17 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox, Silvio Fricke

Wed, 17 Sep 2014 09:11:37 +0200 от Sascha Hauer <s.hauer@pengutronix.de>:
> Hi Silvio,
> 
> On Wed, Sep 17, 2014 at 08:33:00AM +0200, Silvio Fricke wrote:
> > Since 93a6c6a808("dts: update to v3.17-rc2") we have a correct gpio
> > configuration. This results in a double gpio request what receipted in a
> > error message like this one:
> > 
> > 	gpiolib: _gpio_request: gpio-25 (phy-reset) status -16
> > 
> > Now with this patch the problem is gone.

Funny, at this time I trying to resolve a similar problem with the BUSY state for GPIO, but in 3.16 kernel...

---

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin
  2014-09-17  6:33   ` [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin Silvio Fricke
  2014-09-17  7:11     ` Sascha Hauer
@ 2014-09-22  4:57     ` Sascha Hauer
  1 sibling, 0 replies; 7+ messages in thread
From: Sascha Hauer @ 2014-09-22  4:57 UTC (permalink / raw)
  To: Silvio Fricke; +Cc: barebox

On Wed, Sep 17, 2014 at 08:33:00AM +0200, Silvio Fricke wrote:
> Since 93a6c6a808("dts: update to v3.17-rc2") we have a correct gpio
> configuration. This results in a double gpio request what receipted in a
> error message like this one:
> 
> 	gpiolib: _gpio_request: gpio-25 (phy-reset) status -16
> 
> Now with this patch the problem is gone.
> 
> Signed-off-by: Silvio Fricke <silvio.fricke@gmail.com>

Applied, thanks

Sascha

> ---
>  arch/arm/boards/datamodul-edm-qmx6/board.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/boards/datamodul-edm-qmx6/board.c b/arch/arm/boards/datamodul-edm-qmx6/board.c
> index e388e28..25f45df 100644
> --- a/arch/arm/boards/datamodul-edm-qmx6/board.c
> +++ b/arch/arm/boards/datamodul-edm-qmx6/board.c
> @@ -49,6 +49,7 @@
>  #define RQ7_GPIO_ENET_MODE2	IMX_GPIO_NR(6, 28)
>  #define RQ7_GPIO_ENET_MODE3	IMX_GPIO_NR(6, 29)
>  #define RQ7_GPIO_ENET_EN_CLK125	IMX_GPIO_NR(6, 24)
> +#define RQ7_GPIO_ENET_RESET     IMX_GPIO_NR(1, 25)
>  
>  static iomux_v3_cfg_t realq7_pads_gpio[] = {
>  	MX6Q_PAD_RGMII_RXC__GPIO_6_30,
> @@ -57,6 +58,7 @@ static iomux_v3_cfg_t realq7_pads_gpio[] = {
>  	MX6Q_PAD_RGMII_RD2__GPIO_6_28,
>  	MX6Q_PAD_RGMII_RD3__GPIO_6_29,
>  	MX6Q_PAD_RGMII_RX_CTL__GPIO_6_24,
> +	MX6Q_PAD_ENET_CRS_DV__GPIO_1_25,
>  };
>  
>  static int ksz9031rn_phy_fixup(struct phy_device *dev)
> @@ -85,12 +87,14 @@ static int realq7_enet_init(void)
>  	gpio_direction_output(RQ7_GPIO_ENET_MODE3, 1);
>  	gpio_direction_output(RQ7_GPIO_ENET_EN_CLK125, 1);
>  
> -	gpio_direction_output(25, 0);
> +	gpio_direction_output(RQ7_GPIO_ENET_RESET, 0);
>  	mdelay(50);
>  
> -	gpio_direction_output(25, 1);
> +	gpio_direction_output(RQ7_GPIO_ENET_RESET, 1);
>  	mdelay(50);
>  
> +	gpio_free(RQ7_GPIO_ENET_RESET);
> +
>  	phy_register_fixup_for_uid(PHY_ID_KSZ9031, MICREL_PHY_ID_MASK,
>  					   ksz9031rn_phy_fixup);
>  
> -- 
> 2.1.0
> 
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-09-22  4:57 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-09-16 12:15 [PATCH] double requested gpio problem Silvio Fricke
2014-09-16 12:15 ` [PATCH] gpiolib: gpio_request: correct return code of a already requested gpio Silvio Fricke
2014-09-17  6:32   ` [PATCH] gpio phy-reset problem Silvio Fricke
2014-09-17  6:33   ` [PATCH] ARM: i.MX: edmqmx6: free phy-reset gpio pin Silvio Fricke
2014-09-17  7:11     ` Sascha Hauer
2014-09-17  7:17       ` Alexander Shiyan
2014-09-22  4:57     ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox