
On 6/22/07, Robert Delien robert.delien@nxp.com wrote:
When building MIPS targets the warning 'integer overflow in expression' occurs in nfs.c and net.c because these targets still define their clock speed in CFG_HZ instead of the number of miliseconds per second (1000). This will cause incorrect timer behavior. The patch attached fixes this and makes sure MIPS targets now use a CFG_HZ of 1000.
A couple of comments/questions:
Why did you change the while loop and add the rollover code? The old code: - while ((ulong)((mips_count_get() - start)) < tmo) - /*NOP*/; seems perfectly sane to me and should work whether or not you use read_32bit_cp0_register(CP0_COUNT) or mips_count_get() assuming tmo gets set correctly. Is this something NXP specific?
In udelay() I don't like this part that silently truncates delays. This could lead to some ugly hard to find timing bugs.
+ /* Safeguard for too-long delays */ + if (delayTicks >= 0x80000000) + delayTicks = 0x7FFFFFFF;
I would calculate the max. count you can handle in the code and run the timer polling loop multiple times if need be.
Other nits:
long lines might be a good idea to throw in a compile time warning message if CFG_HZ != 1000