* [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 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-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-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).