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 <redacted>
---
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);
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 <redacted>
---
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?
quoted hunk
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 <redacted>
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
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:
quoted
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.
quoted
Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
Signed-off-by: Sergei Shtylyov <redacted>
---
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
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:
quoted
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 <redacted>
---
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.
quoted
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 <redacted>
Thank you!
MBR, Sergei
Hello.
On 03/23/2016 02:56 PM, Daniel Mack wrote:
quoted
I added the author of 13a56b449325 to Cc.
Thanks for doing that!
I forgot to do it, sorry.
quoted
On Wed, Mar 23, 2016 at 12:44:40AM +0300, Sergei Shtylyov wrote:
quoted
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.
quoted
quoted
Fixes: 13a56b449325 ("net: phy: at803x: Add support for hardware reset")
Signed-off-by: Sergei Shtylyov <redacted>
---
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 :)
quoted
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
From: Sergei Shtylyov <redacted>
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 <redacted>
Applied.