[U-Boot] [PATCH 1/2] drivers/net/at91_emac.c: increase timeout for autonegotiation

Reinhard Meyer u-boot at emk-elektronik.de
Thu Oct 7 10:20:52 CEST 2010


> Dear Andreas Bießmann,
>> This patch increases timeout for autonegotiation from 1 second to 3 seconds.
>> Some boards (e.g. at91rm9200ek) did not negotiate within 1 second.
> 
>> @@ -220,7 +220,7 @@ static int at91emac_phy_reset(struct eth_device *netdev)
>>  	at91emac_write(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMCR,
>>  		(BMCR_ANENABLE | BMCR_ANRESTART));
>>  
>> -	for (i = 0; i < 100000 / 100; i++) {
>> +	for (i = 0; i < 30000; i++) {
>>  		at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
>>  			MII_BMSR, &status);
>>  		if (status & BMSR_ANEGCOMPLETE)
> 
> You might want to change the timeout to use the timer like here,
> otherwise such looped timeouts are subject to toolchain version
> and cache and optimisation and cpu clock and whatever ;)

Ok, the patch did not show the udelay(100) in the next line:)
With AT91 timer frequency, udelay(100) is quite exact, so the loop
will work fine. Nevertheless the other timeout mechanism is more
accurate and better to read (I think).

Reinhard



More information about the U-Boot mailing list