Skip to contentSkip to conversation

net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

PATCH New Kim Phillips 5 participants 5 messages Aug 24, 2009 – Aug 25, 2009 Network drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

if you don't have firmware installed for the PHY to come to life, this wait can be painful - let's give the option to avoid it if we want.

---
 drivers/net/tsec.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
drivers/net/tsec.c +7 -0
index 9c9fd37..5c3d261 100644
@@ -17,6 +17,7 @@
 #include <net.h>
 #include <command.h>
 #include <tsec.h>
+#include <asm/errno.h>
 
 #include "miiphy.h"
 
@@ -380,6 +381,12 @@ uint mii_parse_sr(uint mii_reg, struct tsec_private * priv)
 				return 0;
 			}
 
+			if (ctrlc()) {
+				puts("user interrupt!\n");
+				priv->link = 0;
+				return -EINTR;
+			}
+
 			if ((i++ % 1000) == 0) {
 				putc('.');
 			}
Signature · 1 line
1.6.4
#1 lore raw

PATCH 1/1 net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

Quoted 4 lines · Kim Phillips

if you don't have firmware installed for the PHY to come to life, this wait can be painful - let's give the option to avoid it if we want.

I've always wanted this change, but never looked into how to implement it.

However, it should be noted that this change is somewhat lessened in impact by the proposal to change the timeout to be only 2 seconds, instead of ...whatever it is now.

But even with 2 seconds, it's annoying to wait for N ports to be tried when you know none of them are hooked up. Or that you forgot to properly set the ipaddr, anyway.

Andy

#2 lore raw

PATCH 1/1 net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

Quoted 8 lines · Andy Fleming
Quoted 4 lines · Kim Phillips

if you don't have firmware installed for the PHY to come to life, this wait can be painful - let's give the option to avoid it if we want.

Quoted 7 lines

I've always wanted this change, but never looked into how to implement it.

However, it should be noted that this change is somewhat lessened in impact by the proposal to change the timeout to be only 2 seconds, instead of ...whatever it is now.

I thought it was established that that wasn't long enough for some configurations?

Quoted 3 lines

But even with 2 seconds, it's annoying to wait for N ports to be tried when you know none of them are hooked up. Or that you forgot to properly set the ipaddr, anyway.

ethrotate is annoying in general...

-Scott

#3 lore raw

PATCH 1/1 net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

Quoted 11 lines · Scott Wood
Quoted 10 lines · Andy Fleming
Quoted 4 lines · Kim Phillips

if you don't have firmware installed for the PHY to come to life, this wait can be painful - let's give the option to avoid it if we want.

Quoted 8 lines
Quoted 5 lines

I've always wanted this change, but never looked into how to implement it.

However, it should be noted that this change is somewhat lessened in impact by the proposal to change the timeout to be only 2 seconds, instead of ...whatever it is now.

I thought it was established that that wasn't long enough for some configurations?

It looks like 3.5 seconds was agreed upon to be safe:

http://lists.denx.de/pipermail/u-boot/2009-February/047233.html

The current timeout is set to 5 seconds.

We could set a default timeout value of 3.5 seconds, but allow boards to override this by defining something like CONFIG_SYS_PHY_AUTONEG_TIMEOUT to tweak the timeout if they wanted.

Quoted 3 lines
Quoted 3 lines

But even with 2 seconds, it's annoying to wait for N ports to be tried when you know none of them are hooked up. Or that you forgot to properly set the ipaddr, anyway.

Setting ethprime should work for the common case where you know which ports are connected.

Quoted 1 line

ethrotate is annoying in general...

Agreed. For a project a while back we replaced ethact, ethprime and ethrotate with an "ethorder" variable. If defined, the interfaces in ethorder would be tried in order. So to only use 1 interface you could set ethorder to "eTSEC1", to cycle between 2 non-contiguous ports it could be set to "eTSEC1, eTSEC3", to only use PCI ports it could be set to "e1000#0, e1000#1", etc. ethorder was more flexible and a bit more straightforward in my opinion. Anyone have any interest in the patches?

Best,
Peter

Applied
#4 lore raw

PATCH 1/1 net: tsec - handle user interrupt while waiting for PHY auto negotiation to complete

In reply to Kim Phillips
Quoted 24 lines · Kim Phillips

if you don't have firmware installed for the PHY to come to life, this wait can be painful - let's give the option to avoid it if we want.

---
 drivers/net/tsec.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)
drivers/net/tsec.c +1 -0
index 9c9fd37..5c3d261 100644
@@ -17,6 +17,7 @@
 #include <net.h>
 #include <command.h>
 #include <tsec.h>
+#include <asm/errno.h>
 
 #include "miiphy.h"
 
@@ -380,6 +381,12 @@ uint mii_parse_sr(uint mii_reg, struct tsec_private * priv)
 				return 0;
 			}

drivers/net/tsec.c uint mii_parse_sr(uint mii_reg, struct tsec_private * priv) · line 392

Quoted 10 lines
drivers/net/tsec.c +6 -0
 
+			if (ctrlc()) {
+				puts("user interrupt!\n");
+				priv->link = 0;
+				return -EINTR;
+			}
+
 			if ((i++ % 1000) == 0) {
 				putc('.');
 			}

Applied to net/next

regards,
Ben