
On Thu, 3 Apr 2008, Ben Warren wrote:
Hi Guennadi,
Guennadi Liakhovetski wrote:
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.
I like this, but let's stick to SI units please, probably ms. This isn't an important enough calculation to worry about precision, only overflow, so just make sure you handle order of operations properly and it should be fine. If I'm not thinking this through properly, which is entirely possible, make the code do a /100 to get into ds rather than asking the user to provide it. I'm concerned that people will say ***WTF is a decisecond!***
Ok, expect a new version shortly.
@@ -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();
Not sure why you did this. Is it indented from the if() once applied?
It is not under an if - it is another hunk.
Thanks Guennadi --- Guennadi Liakhovetski, Ph.D.
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de