summaryrefslogtreecommitdiff
path: root/net/net.c
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <lg@denx.de>2008-04-03 17:04:19 +0200
committerBen Warren <biggerbadderben@gmail.com>2008-04-28 22:23:21 -0700
commit40cb90ee2b97db1f697e1b54f19a548ffc96d71b (patch)
treef9f7a531844abad357db09a00a8b83018c5ea1d0 /net/net.c
parent13e0b8f7ca9d29267bf01d7a01e521a0517adce1 (diff)
downloadu-boot-imx-40cb90ee2b97db1f697e1b54f19a548ffc96d71b.zip
u-boot-imx-40cb90ee2b97db1f697e1b54f19a548ffc96d71b.tar.gz
u-boot-imx-40cb90ee2b97db1f697e1b54f19a548ffc96d71b.tar.bz2
net: make ARP timeout configurable
Currently the timeout waiting for an ARP reply is hard set to 5 seconds. On i.MX31ADS due to a hardware "strangeness" up to four first IP packets to the boards get lost, which typically are ARP replies. By configuring the timeout to a lower value we significantly improve the first network transfer time on this board. The timeout is specified in milliseconds, later internally it is converted to deciseconds, because it has to be converted to hardware ticks, and CFG_HZ ranges from 900 to 27000000 on different boards. Signed-off-by: Guennadi Liakhovetski <lg@denx.de> Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'net/net.c')
-rw-r--r--net/net.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/net/net.c b/net/net.c
index 44feee2..b6dad89 100644
--- a/net/net.c
+++ b/net/net.c
@@ -94,11 +94,22 @@
DECLARE_GLOBAL_DATA_PTR;
-#define ARP_TIMEOUT 5UL /* Seconds before trying ARP again */
+#ifndef CONFIG_ARP_TIMEOUT
+# define ARP_TIMEOUT 50UL /* Deciseconds before trying ARP again */
+#elif (CONFIG_ARP_TIMEOUT < 100)
+# error "Due to possible overflow CONFIG_ARP_TIMEOUT must be greater than 100ms"
+#else
+# if (CONFIG_ARP_TIMEOUT % 100)
+# warning "Supported ARP_TIMEOUT precision is 100ms"
+# endif
+# define ARP_TIMEOUT (CONFIG_ARP_TIMEOUT / 100)
+#endif
+
+
#ifndef CONFIG_NET_RETRY_COUNT
-# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
+# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
-# define ARP_TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
+# define ARP_TIMEOUT_COUNT CONFIG_NET_RETRY_COUNT
#endif
#if 0
@@ -129,7 +140,7 @@ uchar NetOurEther[6]; /* Our ethernet address */
uchar NetServerEther[6] = /* Boot server enet address */
{ 0, 0, 0, 0, 0, 0 };
IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
-IPaddr_t NetServerIP; /* Our IP addr (0 = unknown) */
+IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */
volatile uchar *NetRxPkt; /* Current receive packet */
int NetRxPktLen; /* Current rx packet length */
unsigned NetIPID; /* IP packet ID */
@@ -253,7 +264,7 @@ void ArpTimeoutCheck(void)
t = get_timer(0);
/* check for arp timeout */
- if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT * CFG_HZ) {
+ if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT * CFG_HZ / 10) {
NetArpWaitTry++;
if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {
@@ -494,7 +505,7 @@ restart:
* Check the ethernet for a new packet. The ethernet
* receive routine will process it.
*/
- eth_rx();
+ eth_rx();
/*
* Abort if ctrl-c was pressed.