net: phy: mdio-gpio: fix access that may sleep
Subsystems (3)
PATCH 1/1 net: phy: mdio-gpio: fix access that may sleep
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
--- drivers/net/phy/mdio-gpio.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +10 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) + ||gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into" +"I2C/SMBus bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
Signature · 1 line
2.11.0
PATCH v2 1/1 net: phy: mdio-gpio: fix access that may sleep
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
---
v2:
- fixed copy/paste bug in warning about slow GPIO pins
--- drivers/net/phy/mdio-gpio.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +10 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) + ||gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into" +"MDIO bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
Signature · 1 line
2.11.0
Andrew Lunn
maintainerQuoted 5 lines · Martin Schiller
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12
Hi Martin
Was it really lost? It looks like _cansleep() just adds an extra check might_sleep_if(extra_checks), but it does not change any functionality.
So the change itself is O.K, i'm just not too sure about the commit message.
Andrew
Quoted 7 lines · Andrew Lunn
Quoted 5 lines · Martin Schiller
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12
Quoted 5 lines
Hi Martin
Was it really lost? It looks like
_cansleep()just adds an extra checkmight_sleep_if(extra_checks), but it does not change any functionality.
Well, you are right, the functionality itself is not broken, but using the NON _cansleep() functions on GPIOs that have the cansleep flag set, this leads to a lot of kernel warnings/backtraces which makes the system in fact useless.
Thats the WARN_ON() here:
and here:
Quoted 5 lines
So the change itself is O.K, i'm just not too sure about the commit message.
Andrew
Hmm, ok. What would you suggest for a better commit message?
I thought it would be helpful to know that this was already in there and got (inadvertently?) removed by another commit.
Martin
Andrew Lunn
maintainerQuoted 19 lines · Martin Schiller
Quoted 7 lines · Andrew Lunn
Quoted 5 lines · Martin Schiller
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12Quoted 5 lines
Hi Martin
Was it really lost? It looks like
_cansleep()just adds an extra checkmight_sleep_if(extra_checks), but it does not change any functionality.Well, you are right, the functionality itself is not broken, but using the NON
_cansleep()functions on GPIOs that have the cansleep flag set, this leads to a lot of kernel warnings/backtraces which makes the system in fact useless.
Quoted 7 lines
Thats the
WARN_ON()here:and here:
Hi Martin
Right, this is really what you are fixing. So the commit message should talk about these WARN_ON being hit.
Quoted 7 lines
Quoted 5 lines
So the change itself is O.K, i'm just not too sure about the commit message.
Andrew
Hmm, ok. What would you suggest for a better commit message?
Up until commit XXX, the _cansleep variants of the gpio_ API was used. After that commit and the change to gpiod_ API, the _cansleep() was dropped. This then results in WARN_ON() when used with GPIO devices which do sleep. Add back the _cansleep() to avoid this.
This is something which is useful in stable. So please base this fix on DaveM net tree, not net-next, and include a Fixes: tag for the patch which broke it.
Thanks
Andrew
Hello!
Quoted 5 lines · Martin Schiller
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab7630dfcf34417c6683ce4764d7d40a and got lost by commit 7e5fbd1e0700f1bdb94508f84ec2aeb01eed7b12
This is not how you cite a commit: 12 digits is enough and they should
be followed by the commit summary enclosed in ("").
Quoted 15 lines
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
Signed-off-by Martin Schiller <[email protected]>---
v2:
- fixed copy/paste bug in warning about slow GPIO pins--- drivers/net/phy/mdio-gpio.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)drivers/net/phy/mdio-gpio.c +0
-0
[...]
drivers/net/phy/mdio-gpio.c static int mdio_gpio_probe(struct platform_device *pdev) · line 166
Quoted 6 lines
drivers/net/phy/mdio-gpio.c +2
-0@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) + ||gpiod_cansleep (bitbang->mdo))
The line continued that way blends with the branch below, the networking
code uses a different style of line continuation where the continuation line starts immediately below the 1st gpiod_cansleep() call. Also, || should be left on the 1st line...
drivers/net/phy/mdio-gpio.c static int mdio_gpio_probe(struct platform_device *pdev) · line 172
Quoted 6 lines
drivers/net/phy/mdio-gpio.c +3
-0+dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into" +"MDIO bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
MBR, Sergei
David Miller
maintainerFrom: Martin Schiller <[email protected]>
Date: Wed, 14 Nov 2018 07:37:03 +0100
drivers/net/phy/mdio-gpio.c static int mdio_gpio_probe(struct platform_device *pdev) · line 166
Quoted 6 lines
drivers/net/phy/mdio-gpio.c +2
-0@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) + ||gpiod_cansleep (bitbang->mdo))
Please fix the formatting here, operators like "||" and "&&" never begin a line, they must always finish a line.
PATCH v3 1/1 net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerThis commit re-enables support for slow GPIO pins. It was initially introduced by commit 2d6c9091ab76 ("net: mdio-gpio: support access that may sleep") and got lost by commit 7e5fbd1e0700 ("net: mdio-gpio:
Convert to use gpiod functions where possible").
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
---
v3:
- modified commit summary
- fixed commit cites in commit message
- fixed line continuation
v2:
- fixed copy/paste bug in warning about slow GPIO pins
--- drivers/net/phy/mdio-gpio.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +10 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) || +gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into" +"MDIO bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
Signature · 1 line
2.11.0
Re: [PATCH v3] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
Quoted 24 lines · Martin Schiller
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab76("net: mdio-gpio: support access that may sleep") and got lost by commit7e5fbd1e0700("net: mdio-gpio:
Convert to use gpiod functions where possible").Also add a warning about slow GPIO pins like it is done in i2c-gpio.
Signed-off-by Martin Schiller <[email protected]>---
v3:
- modified commit summary
- fixed commit cites in commit message
- fixed line continuationv2:
- fixed copy/paste bug in warning about slow GPIO pins--- drivers/net/phy/mdio-gpio.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)drivers/net/phy/mdio-gpio.c +0
-0
[...]
drivers/net/phy/mdio-gpio.c static int mdio_gpio_probe(struct platform_device *pdev) · line 168
Quoted 8 lines
drivers/net/phy/mdio-gpio.c +4
-0@@ -162,6 +162,11 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) || +gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into" +"MDIO bus timing" );
Oops, missed this in the 1st review: you don't need to break the kernel messages
like that, they may violate the 80-column limit (to facilitate searching)...
[...]
MBR, Sergei
PATCH v4 1/1 net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerThis commit re-enables support for slow GPIO pins. It was initially introduced by commit 2d6c9091ab76 ("net: mdio-gpio: support access that may sleep") and got lost by commit 7e5fbd1e0700 ("net: mdio-gpio:
Convert to use gpiod functions where possible").
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
---
v4:
- remove linewrap of kernel message
v3:
- modified commit summary
- fixed commit cites in commit message
- fixed line continuation
v2:
- fixed copy/paste bug in warning about slow GPIO pins
--- drivers/net/phy/mdio-gpio.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +9 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
@@ -162,6 +162,10 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) || +gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into MDIO bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
Signature · 1 line
2.11.0
Re: [PATCH v4] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
From: Martin Schiller <[email protected]>
Date: Wed, 14 Nov 2018 12:54:49 +0100
Quoted 8 lines
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab76("net: mdio-gpio: support access that may sleep") and got lost by commit7e5fbd1e0700("net: mdio-gpio:
Convert to use gpiod functions where possible").Also add a warning about slow GPIO pins like it is done in i2c-gpio.
Signed-off-by Martin Schiller <[email protected]>
Applied, thanks.
Andrew Lunn
maintainerRe: [PATCH v4] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
Quoted 8 lines · David Miller
From: Martin Schiller <[email protected]>
Date: Wed, 14 Nov 2018 12:54:49 +0100Quoted 5 lines
This commit re-enables support for slow GPIO pins. It was initially introduced by commit
2d6c9091ab76("net: mdio-gpio: support access that may sleep") and got lost by commit7e5fbd1e0700("net: mdio-gpio:
Convert to use gpiod functions where possible").
Quoted 5 lines
Quoted 3 lines
Also add a warning about slow GPIO pins like it is done in i2c-gpio.
Signed-off-by Martin Schiller <[email protected]>Applied, thanks.
Hi David
We were intending that v6 would get merged, and into net. I guess it is too late now, but could you also add the v4 you merged into net. You can find the fixes: tag in v6.
Thanks
Andrew
PATCH v5 1/1 net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerUp until commit 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible"), the _cansleep variants of the gpio_ API was used. After that commit and the change to gpiod_ API, the _cansleep() was dropped. This then results in WARN_ON() when used with GPIO devices which do sleep. Add back the _cansleep() to avoid this.
---
v5:
- reworked commit message
- added "Fixes:" tag
- based on DaveM net tree instead of mainline
v4:
- remove linewrap of kernel message
v3:
- modified commit summary
- fixed commit cites in commit message
- fixed line continuation
v2:
- fixed copy/paste bug in warning about slow GPIO pins
--- drivers/net/phy/mdio-gpio.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +9 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
@@ -162,6 +162,10 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) || +gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into MDIO bus timing" ); +if (pdev->dev.of_node) { bus_id =of_alias_get_id (pdev->dev.of_node,"mdio-gpio" );if (bus_id <0 ) {
Signature · 1 line
2.11.0
Andrew Lunn
maintainerRe: [PATCH v5] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
Quoted 6 lines · Martin Schiller
Up until commit
7e5fbd1e0700("net: mdio-gpio: Convert to use gpiod functions where possible"), the_cansleepvariants of thegpio_API was used. After that commit and the change togpiod_API, the_cansleep()was dropped. This then results inWARN_ON()when used with GPIO devices which do sleep. Add back the_cansleep()to avoid this.
Quoted 7 lines
Fixes 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible")Signed-off-by Martin Schiller <[email protected]>---
v5:
- reworked commit message
- added "Fixes:" tag
- based on DaveM net tree instead of mainline
Hi Martin
Thanks for these changes. We are much closer now.
drivers/net/phy/mdio-gpio.c static int mdio_gpio_probe(struct platform_device *pdev) · line 168
Quoted 8 lines
drivers/net/phy/mdio-gpio.c +4
-0@@ -162,6 +162,10 @@ static int mdio_gpio_probe(struct platform_device *pdev)if (ret)return ret; +if (gpiod_cansleep (bitbang->mdc) ||gpiod_cansleep (bitbang->mdio) || +gpiod_cansleep (bitbang->mdo)) +dev_warn (&pdev->dev,"Slow GPIO pins might wreak havoc into MDIO bus timing" ); +
I talked with Florian about this. We would like this hunk of the patch dropped
1) For a patch which is going to stable, it does not fit. It does not actually fix anything.
2) I'm not sure it has any value. The hardware has been designed like that. There is nothing which can be done about it. Printing a message is not going to help users.
Andrew
David Miller
maintainerRe: [PATCH v5] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerFrom: Martin Schiller <[email protected]>
Date: Thu, 15 Nov 2018 06:24:28 +0100
Quoted 8 lines
Up until commit
7e5fbd1e0700("net: mdio-gpio: Convert to use gpiod functions where possible"), the_cansleepvariants of thegpio_API was used. After that commit and the change togpiod_API, the_cansleep()was dropped. This then results inWARN_ON()when used with GPIO devices which do sleep. Add back the_cansleep()to avoid this.Fixes 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible")Signed-off-by Martin Schiller <[email protected]>
Ok it seems there was still discussion going on here and I accidently applied v4 of this patch.
I'll revert it and wait for the review to conclude.
PATCH v6 1/1 net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerUp until commit 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible"), the _cansleep variants of the gpio_ API was used. After that commit and the change to gpiod_ API, the _cansleep() was dropped. This then results in WARN_ON() when used with GPIO devices which do sleep. Add back the _cansleep() to avoid this.
---
v6:
- dropped warning about slow GPIO pins
v5:
- reworked commit message
- added "Fixes:" tag
- based on DaveM net tree instead of mainline
v4:
- remove linewrap of kernel message
v3:
- modified commit summary
- fixed commit cites in commit message
- fixed line continuation
v2:
- fixed copy/paste bug in warning about slow GPIO pins
--- drivers/net/phy/mdio-gpio.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/net/phy/mdio-gpio.c +5 -5
@@ -63,7 +63,7 @@ static void mdio_dir(struct mdiobb_ctrl *ctrl, int dir)* assume the pin serves as pull-up. If direction is * output, the default value is high. */ -gpiod_set_value (bitbang->mdo,1 ); +gpiod_set_value_cansleep (bitbang->mdo,1 );return ; }
@@ -78,7 +78,7 @@ static int mdio_get(struct mdiobb_ctrl *ctrl)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -return gpiod_get_value (bitbang->mdio); +return gpiod_get_value_cansleep (bitbang->mdio); }static void mdio_set (struct mdiobb_ctrl *ctrl,int what)
@@ -87,9 +87,9 @@ static void mdio_set(struct mdiobb_ctrl *ctrl, int what) container_of(ctrl, struct mdio_gpio_info, ctrl);if (bitbang->mdo) -gpiod_set_value (bitbang->mdo, what); +gpiod_set_value_cansleep (bitbang->mdo, what);else -gpiod_set_value (bitbang->mdio, what); +gpiod_set_value_cansleep (bitbang->mdio, what); }static void mdc_set (struct mdiobb_ctrl *ctrl,int what)
@@ -97,7 +97,7 @@ static void mdc_set(struct mdiobb_ctrl *ctrl, int what)struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); -gpiod_set_value (bitbang->mdc, what); +gpiod_set_value_cansleep (bitbang->mdc, what); }static const struct mdiobb_ops mdio_gpio_ops = {
Signature · 1 line
2.11.0
Re: [PATCH v6] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
Quoted 8 lines · Martin Schiller
Up until commit
7e5fbd1e0700("net: mdio-gpio: Convert to use gpiod functions where possible"), the_cansleepvariants of thegpio_API was used. After that commit and the change togpiod_API, the_cansleep()was dropped. This then results inWARN_ON()when used with GPIO devices which do sleep. Add back the_cansleep()to avoid this.Fixes 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible")Signed-off-by Martin Schiller <[email protected]>
Andrew
Re: [PATCH v6] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerQuoted 8 lines · Martin Schiller
Up until commit
7e5fbd1e0700("net: mdio-gpio: Convert to use gpiod functions where possible"), the_cansleepvariants of thegpio_API was used. After that commit and the change togpiod_API, the_cansleep()was dropped. This then results inWARN_ON()when used with GPIO devices which do sleep. Add back the_cansleep()to avoid this.Fixes 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible")Signed-off-by Martin Schiller <[email protected]>
Thanks Martin!
Signature · 1 line
Florian
David Miller
maintainerRe: [PATCH v6] net: phy: mdio-gpio: Fix working over slow can_sleep GPIOs
In reply to Martin SchillerFrom: Martin Schiller <[email protected]>
Date: Fri, 16 Nov 2018 08:38:36 +0100
Quoted 8 lines
Up until commit
7e5fbd1e0700("net: mdio-gpio: Convert to use gpiod functions where possible"), the_cansleepvariants of thegpio_API was used. After that commit and the change togpiod_API, the_cansleep()was dropped. This then results inWARN_ON()when used with GPIO devices which do sleep. Add back the_cansleep()to avoid this.Fixes 7e5fbd1e0700 ("net: mdio-gpio: Convert to use gpiod functions where possible")Signed-off-by Martin Schiller <[email protected]>
Applied and queued up for -stable.