* [PATCH] Improve PHY AutoNeg procedure
@ 2015-10-31 13:07 Anton Bondarenko
2015-10-31 13:07 ` [PATCH] net: phy: wait for link OK after successfull autonegotiation Anton Bondarenko
0 siblings, 1 reply; 3+ messages in thread
From: Anton Bondarenko @ 2015-10-31 13:07 UTC (permalink / raw)
To: s.hauer, barebox
While working with IMX6Q Embedsky E9 I've noticed the problem with
first attempt to run 'ifup eth0'. The root cause of the failure is in PHY
not setting bit '1.2 Link Status' at the same time as setting
bit '1.5 Auto-Negotiation Complete'. The delay between these changes
could be up to 4 ms. PHY is Realtek RTL8211E. The proposed change would
improve handling of similar situations.
Anton Bondarenko (1):
net: phy: wait for link OK after successfull autonegotiation
drivers/net/phy/phy.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
--
2.6.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] net: phy: wait for link OK after successfull autonegotiation
2015-10-31 13:07 [PATCH] Improve PHY AutoNeg procedure Anton Bondarenko
@ 2015-10-31 13:07 ` Anton Bondarenko
2015-11-02 8:00 ` Sascha Hauer
0 siblings, 1 reply; 3+ messages in thread
From: Anton Bondarenko @ 2015-10-31 13:07 UTC (permalink / raw)
To: s.hauer, barebox
It may take some time for PHY to indicate link OK status after
autonegotiation completed. This change addresses this case
and prevent network commands fails due to the delay.
Signed-off-by: Anton Bondarenko <anton.bondarenko.sama@gmail.com>
---
drivers/net/phy/phy.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 2b3c5e2..73569f3 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -502,13 +502,17 @@ int phy_wait_aneg_done(struct phy_device *phydev)
return 0;
while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND)) {
- if (phy_aneg_done(phydev) > 0) {
- phydev->link = 1;
+ if (phy_aneg_done(phydev) > 0)
+ break;
+ }
+
+ genphy_update_link(phydev);
+ while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND)) {
+ if (phydev->link == 1)
return 0;
- }
+ genphy_update_link(phydev);
}
- phydev->link = 0;
return -ETIMEDOUT;
}
--
2.6.2
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] net: phy: wait for link OK after successfull autonegotiation
2015-10-31 13:07 ` [PATCH] net: phy: wait for link OK after successfull autonegotiation Anton Bondarenko
@ 2015-11-02 8:00 ` Sascha Hauer
0 siblings, 0 replies; 3+ messages in thread
From: Sascha Hauer @ 2015-11-02 8:00 UTC (permalink / raw)
To: Anton Bondarenko; +Cc: barebox
On Sat, Oct 31, 2015 at 02:07:52PM +0100, Anton Bondarenko wrote:
> It may take some time for PHY to indicate link OK status after
> autonegotiation completed. This change addresses this case
> and prevent network commands fails due to the delay.
>
> Signed-off-by: Anton Bondarenko <anton.bondarenko.sama@gmail.com>
> ---
> drivers/net/phy/phy.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 2b3c5e2..73569f3 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -502,13 +502,17 @@ int phy_wait_aneg_done(struct phy_device *phydev)
> return 0;
>
> while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND)) {
> - if (phy_aneg_done(phydev) > 0) {
> - phydev->link = 1;
> + if (phy_aneg_done(phydev) > 0)
> + break;
> + }
> +
> + genphy_update_link(phydev);
> + while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND)) {
> + if (phydev->link == 1)
> return 0;
> - }
> + genphy_update_link(phydev);
> }
The additional call to genphy_update_link() before the loop shouldn't be
necessary, right? Or to be 100% correct you could use a do {} while loop
to make sure to always call genphy_update_link() at least once.
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] 3+ messages in thread
end of thread, other threads:[~2015-11-02 8:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-31 13:07 [PATCH] Improve PHY AutoNeg procedure Anton Bondarenko
2015-10-31 13:07 ` [PATCH] net: phy: wait for link OK after successfull autonegotiation Anton Bondarenko
2015-11-02 8:00 ` Sascha Hauer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox