Hi, the net/net.c implemenation of timeouts assumes that get_timer() returns values in milliseconds. As this is true for most platforms, it does not apply to PXA3x where the OSCR register increments with more than 3MHz.
The following patch fixes the problem by calculation with the CONFIG_SYS_HZ variable. Best regards, Daniel diff --git a/net/net.c b/net/net.c index 77e83b5..b9326de 100644 --- a/net/net.c +++ b/net/net.c @@ -206,6 +206,11 @@ uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN]; ulong NetArpWaitTimerStart; int NetArpWaitTry; +static long net_get_timer(long base) +{ + return get_timer(base) / (CONFIG_SYS_HZ / 1000); +} + void ArpRequest (void) { int i; @@ -256,7 +261,7 @@ void ArpTimeoutCheck(void) if (!NetArpWaitPacketIP) return; - t = get_timer(0); + t = net_get_timer(0); /* check for arp timeout */ if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT) { @@ -517,7 +522,7 @@ restart: * Check for a timeout, and run the timeout handler * if we have one. */ - if (timeHandler && ((get_timer(0) - timeStart) > timeDelta)) { + if (timeHandler && ((net_get_timer(0) - timeStart) > timeDelta)) { thand_f *x; #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) @@ -639,7 +644,7 @@ NetSetTimeout(ulong iv, thand_f * f) timeHandler = (thand_f *)0; } else { timeHandler = f; - timeStart = get_timer(0); + timeStart = net_get_timer(0); timeDelta = iv; } } @@ -684,7 +689,7 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len) /* and do the ARP request */ NetArpWaitTry = 1; - NetArpWaitTimerStart = get_timer(0); + NetArpWaitTimerStart = net_get_timer(0); ArpRequest(); return 1; /* waiting */ } @@ -755,7 +760,7 @@ int PingSend(void) /* and do the ARP request */ NetArpWaitTry = 1; - NetArpWaitTimerStart = get_timer(0); + NetArpWaitTimerStart = net_get_timer(0); ArpRequest(); return 1; /* waiting */ } _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot