* [PATCH] at803x: fix reset handling
@ 2016-03-22 21:44 Sergei Shtylyov
2016-03-23 6:45 ` Uwe Kleine-König
2016-03-23 17:40 ` David Miller
0 siblings, 2 replies; 6+ messages in thread
From: Sergei Shtylyov @ 2016-03-22 21:44 UTC (permalink / raw)
To: netdev, f.fainelli; +Cc: u.kleine-koenig
The driver of course "knows" that the chip's reset signal is active low,
so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
all this will only work iff the GPIO is specified as active-high in the
device tree! I think both the driver and the device trees (if there are
any -- I was unable to find them) need to be fixed in this case...
Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
---
The patch is against DaveM's 'net.git' repo.
drivers/net/phy/at803x.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: net/drivers/net/phy/at803x.c
===================================================================
--- net.orig/drivers/net/phy/at803x.c
+++ net/drivers/net/phy/at803x.c
@@ -277,7 +277,7 @@ static int at803x_probe(struct phy_devic
if (!priv)
return -ENOMEM;
- gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+ gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(gpiod_reset))
return PTR_ERR(gpiod_reset);
@@ -362,10 +362,10 @@ static void at803x_link_change_notify(st
at803x_context_save(phydev, &context);
- gpiod_set_value(priv->gpiod_reset, 0);
- msleep(1);
gpiod_set_value(priv->gpiod_reset, 1);
msleep(1);
+ gpiod_set_value(priv->gpiod_reset, 0);
+ msleep(1);
at803x_context_restore(phydev, &context);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] at803x: fix reset handling
2016-03-22 21:44 [PATCH] at803x: fix reset handling Sergei Shtylyov
@ 2016-03-23 6:45 ` Uwe Kleine-König
2016-03-23 11:56 ` Daniel Mack
2016-03-23 13:23 ` Sergei Shtylyov
2016-03-23 17:40 ` David Miller
1 sibling, 2 replies; 6+ messages in thread
From: Uwe Kleine-König @ 2016-03-23 6:45 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: netdev, f.fainelli, Daniel Mack
Hello,
I added the author of 13a56b449325 to Cc.
On Wed, Mar 23, 2016 at 12:44:40AM +0300, Sergei Shtylyov wrote:
> The driver of course "knows" that the chip's reset signal is active low,
> so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
> all this will only work iff the GPIO is specified as active-high in the
> device tree! I think both the driver and the device trees (if there are
> any -- I was unable to find them) need to be fixed in this case...
>
> Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>
> ---
> The patch is against DaveM's 'net.git' repo.
Don't you need to work against net-next for non-urgent stuff? Or do you
consider this urgent?
> drivers/net/phy/at803x.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> Index: net/drivers/net/phy/at803x.c
> ===================================================================
> --- net.orig/drivers/net/phy/at803x.c
> +++ net/drivers/net/phy/at803x.c
> @@ -277,7 +277,7 @@ static int at803x_probe(struct phy_devic
> if (!priv)
> return -ENOMEM;
>
> - gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> + gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
> if (IS_ERR(gpiod_reset))
> return PTR_ERR(gpiod_reset);
>
> @@ -362,10 +362,10 @@ static void at803x_link_change_notify(st
>
> at803x_context_save(phydev, &context);
>
> - gpiod_set_value(priv->gpiod_reset, 0);
> - msleep(1);
> gpiod_set_value(priv->gpiod_reset, 1);
> msleep(1);
> + gpiod_set_value(priv->gpiod_reset, 0);
> + msleep(1);
The new variant is better than the old one. The change however breaks
existing device trees which is not so nice. Given there are no mainline
users this is probably ok though. So:
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] at803x: fix reset handling
2016-03-23 6:45 ` Uwe Kleine-König
@ 2016-03-23 11:56 ` Daniel Mack
2016-03-23 13:30 ` Sergei Shtylyov
2016-03-23 13:23 ` Sergei Shtylyov
1 sibling, 1 reply; 6+ messages in thread
From: Daniel Mack @ 2016-03-23 11:56 UTC (permalink / raw)
To: Uwe Kleine-König, Sergei Shtylyov; +Cc: netdev, f.fainelli, Daniel Mack
Hi Sergei,
Hi Uwe,
On 03/23/2016 07:45 AM, Uwe Kleine-König wrote:
> I added the author of 13a56b449325 to Cc.
Thanks for doing that!
> On Wed, Mar 23, 2016 at 12:44:40AM +0300, Sergei Shtylyov wrote:
>> The driver of course "knows" that the chip's reset signal is active low,
>> so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
>> all this will only work iff the GPIO is specified as active-high in the
>> device tree! I think both the driver and the device trees (if there are
>> any -- I was unable to find them) need to be fixed in this case...
Well, the driver asserts the line by setting it to 1, while in fact the
chip itself considers 'low' as 'asserted'. Hence I opted for flipping
the logic in DT rather than in the driver core. IIRC, there was even
some sort of level-shifting inversion going on in our design, but I
don't recall the details.
That said, I don't care much. If the general assumption is to make the
driver calls match the actual output on the peripheral, then fine, let's
turn it around, but that's a matter of interpretation IMO.
>> Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>>
>> ---
>> The patch is against DaveM's 'net.git' repo.
>
> Don't you need to work against net-next for non-urgent stuff? Or do you
> consider this urgent?
It's certainly not :)
> The new variant is better than the old one. The change however breaks
> existing device trees which is not so nice. Given there are no mainline
> users this is probably ok though. So:
Hmm, one idea for DT was to allow for external board support via DTB
files, right? Then again, bindings breaks happen all the time anyway.
As far as I'm concerned, I'm fine with the change. If it lands, I'll
simply give my colleagues a short heads-up so they can flip the bit on
their side too.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] at803x: fix reset handling
2016-03-23 6:45 ` Uwe Kleine-König
2016-03-23 11:56 ` Daniel Mack
@ 2016-03-23 13:23 ` Sergei Shtylyov
1 sibling, 0 replies; 6+ messages in thread
From: Sergei Shtylyov @ 2016-03-23 13:23 UTC (permalink / raw)
To: Uwe Kleine-König; +Cc: netdev, f.fainelli, Daniel Mack
On 03/23/2016 09:45 AM, Uwe Kleine-König wrote:
> On Wed, Mar 23, 2016 at 12:44:40AM +0300, Sergei Shtylyov wrote:
>> The driver of course "knows" that the chip's reset signal is active low,
>> so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
>> all this will only work iff the GPIO is specified as active-high in the
>> device tree! I think both the driver and the device trees (if there are
>> any -- I was unable to find them) need to be fixed in this case...
>>
>> Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>>
>> ---
>> The patch is against DaveM's 'net.git' repo.
>
> Don't you need to work against net-next for non-urgent stuff? Or do you
> consider this urgent?
The net-next.git is not for fixes, net.git is. And net-next is closed
right now because of the merge window.
>> drivers/net/phy/at803x.c | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> Index: net/drivers/net/phy/at803x.c
>> ===================================================================
>> --- net.orig/drivers/net/phy/at803x.c
>> +++ net/drivers/net/phy/at803x.c
>> @@ -277,7 +277,7 @@ static int at803x_probe(struct phy_devic
>> if (!priv)
>> return -ENOMEM;
>>
>> - gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
>> + gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
>> if (IS_ERR(gpiod_reset))
>> return PTR_ERR(gpiod_reset);
>>
>> @@ -362,10 +362,10 @@ static void at803x_link_change_notify(st
>>
>> at803x_context_save(phydev, &context);
>>
>> - gpiod_set_value(priv->gpiod_reset, 0);
>> - msleep(1);
>> gpiod_set_value(priv->gpiod_reset, 1);
>> msleep(1);
>> + gpiod_set_value(priv->gpiod_reset, 0);
>> + msleep(1);
>
> The new variant is better than the old one. The change however breaks
> existing device trees which is not so nice. Given there are no mainline
> users this is probably ok though. So:
>
> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thank you!
MBR, Sergei
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] at803x: fix reset handling
2016-03-23 11:56 ` Daniel Mack
@ 2016-03-23 13:30 ` Sergei Shtylyov
0 siblings, 0 replies; 6+ messages in thread
From: Sergei Shtylyov @ 2016-03-23 13:30 UTC (permalink / raw)
To: Daniel Mack, Uwe Kleine-König; +Cc: netdev, f.fainelli, Daniel Mack
Hello.
On 03/23/2016 02:56 PM, Daniel Mack wrote:
>> I added the author of 13a56b449325 to Cc.
> Thanks for doing that!
I forgot to do it, sorry.
>> On Wed, Mar 23, 2016 at 12:44:40AM +0300, Sergei Shtylyov wrote:
>>> The driver of course "knows" that the chip's reset signal is active low,
>>> so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
>>> all this will only work iff the GPIO is specified as active-high in the
>>> device tree! I think both the driver and the device trees (if there are
>>> any -- I was unable to find them) need to be fixed in this case...
>
> Well, the driver asserts the line by setting it to 1, while in fact the
Contariwise, it sets GPIO to 0 to assert the reset signal.
> chip itself considers 'low' as 'asserted'.
My Micrel chips do that as well...
> Hence I opted for flipping the logic in DT rather than in the driver core.
So did you use GPIO_ACTIVE_LOW or _HIGH in the device tree? AFAIU, only
the latter ould work with this patch, but it'll be in error.
> IIRC, there was even
> some sort of level-shifting inversion going on in our design, but I
> don't recall the details.
>
> That said, I don't care much. If the general assumption is to make the
> driver calls match the actual output on the peripheral,
They seem to do now, but that doesn't fly well with the modern gpiolob
where you can declare the active-low/high for each GPIO, so that gpiolib would
automatically invert the value for the active-low pins.
> then fine, let's
> turn it around, but that's a matter of interpretation IMO.
>>> Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
>>> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>>>
>>> ---
>>> The patch is against DaveM's 'net.git' repo.
>>
>> Don't you need to work against net-next for non-urgent stuff? Or do you
>> consider this urgent?
>
> It's certainly not :)
>
>> The new variant is better than the old one. The change however breaks
>> existing device trees which is not so nice. Given there are no mainline
>> users this is probably ok though. So:
>
> Hmm, one idea for DT was to allow for external board support via DTB
> files, right? Then again, bindings breaks happen all the time anyway.
Contrariwise, the drivers are supposed to be able to work with older .dtb
files... but if we have out-of-tree .dtb's to consider only, our hands are
untied then.
> As far as I'm concerned, I'm fine with the change. If it lands, I'll
> simply give my colleagues a short heads-up so they can flip the bit on
> their side too.
Thank you. :-)
> Thanks,
> Daniel
MBR, Sergei
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] at803x: fix reset handling
2016-03-22 21:44 [PATCH] at803x: fix reset handling Sergei Shtylyov
2016-03-23 6:45 ` Uwe Kleine-König
@ 2016-03-23 17:40 ` David Miller
1 sibling, 0 replies; 6+ messages in thread
From: David Miller @ 2016-03-23 17:40 UTC (permalink / raw)
To: sergei.shtylyov; +Cc: netdev, f.fainelli, u.kleine-koenig
From: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Date: Wed, 23 Mar 2016 00:44:40 +0300
> The driver of course "knows" that the chip's reset signal is active low,
> so it drives the GPIO to 0 to reset the PHY and to 1 otherwise; however
> all this will only work iff the GPIO is specified as active-high in the
> device tree! I think both the driver and the device trees (if there are
> any -- I was unable to find them) need to be fixed in this case...
>
> Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Applied.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-03-23 17:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-22 21:44 [PATCH] at803x: fix reset handling Sergei Shtylyov
2016-03-23 6:45 ` Uwe Kleine-König
2016-03-23 11:56 ` Daniel Mack
2016-03-23 13:30 ` Sergei Shtylyov
2016-03-23 13:23 ` Sergei Shtylyov
2016-03-23 17:40 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).