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 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 <[EMAIL PROTECTED]>

---

diff --git a/README b/README
index a9663a3..9249064 100644
--- a/README
+++ b/README
@@ -1547,6 +1547,10 @@ The following options need to be configured:
                before giving up the operation. If not defined, a
                default value of 5 is used.
 
+               CONFIG_ARP_TIMEOUT
+
+               Timeout waiting for an ARP reply in deciseconds.
+
 - Command Interpreter:
                CONFIG_AUTO_COMPLETE
 
diff --git a/net/net.c b/net/net.c
index 44feee2..2128bd4 100644
--- a/net/net.c
+++ b/net/net.c
@@ -94,11 +94,16 @@
 
 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 
*/
+#else
+# define ARP_TIMEOUT           CONFIG_ARP_TIMEOUT
+#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 +134,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 +258,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 +499,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.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
U-Boot-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to