Message ID | 1301408699.3605.24.camel@hrwks7001-l.haslerrail.net |
---|---|
State | Changes Requested |
Headers | show |
On 03/29/2011 04:24 PM, Laurent Joye wrote: > Hello, > I'm developing a product based on the imx35 cpu with NOR and NAND flash. > The SBC I use is the pcm-043 from Phytec. > I use the FEC to communicate over the ethernet. Hi Laurent, > It seems that the return value of the "get_timer_masked" function is not > given with the same unit as the input value for the "get_timer" > function. It seems also to me that this value should be dependent of the > "CONFIG_SYS_HZ" macro. I think you are right. However, examining your problem I checked that the i.MX35 timer functions are quite different compared to other i.MX processors (mX31 and MX5). There is no good reason to make things different and I think we should refactor this code containing the timer functions for the i.MX35 (and better having one single file with the i.MX31 code). Best regards, Stefano Babic
diff --git a/arch/arm/cpu/arm1136/mx35/timer.c b/arch/arm/cpu/arm1136/mx35/timer.c index db1e2c9..00ca3e6 100644 --- a/arch/arm/cpu/arm1136/mx35/timer.c +++ b/arch/arm/cpu/arm1136/mx35/timer.c @@ -70,7 +70,7 @@ inline ulong get_timer_masked(void) struct gpt_regs *gpt = (struct gpt_regs *)GPT1_BASE_ADDR; ulong val = readl(&gpt->counter); - return val; + return val / CONFIG_SYS_HZ; } void reset_timer(void) @@ -84,12 +84,14 @@ ulong get_timer(ulong base) tmp = get_timer_masked(); - if (tmp <= (base * 1000)) { + if (tmp < base) { /* Overflow */ - tmp += (0xffffffff - base); + tmp = (0xffffffff - (base - tmp)); + } else { + tmp = tmp -base; } - return (tmp / 1000) - base; + return tmp; } void set_timer(ulong t) @@ -103,6 +105,7 @@ void set_timer(ulong t) void __udelay(unsigned long usec) { ulong tmp; + usec /= CONFIG_SYS_HZ; tmp = get_timer_masked(); /* get current timestamp */