On 09.12.2010 17:31, Dirk Behme wrote: > Reuse the gd->tbl value for timestamp and add gd->lastinc for lastinc bss > values in the OMAP timer driver. > > The usage of bss values in drivers before initialisation of bss is forbidden. > In that special case some data in .rel.dyn gets corrupted. > > Signed-off-by: Dirk Behme<dirk.be...@gmail.com>
Tested-by: John Rigby <john.ri...@linaro.org> Tested-by: Nishanth Menon <n...@ti.com> Acked-by: Nishanth Menon <n...@ti.com > Note: This is compile tested only (therefore the RFC). Please *test* > on real OMAP HW, e.g. Beagle. To the custodian who has to apply this: Regarding the RFC in the subject: Now that this patch is confirmed to work, will you apply this patch as is? Or do I have to resend it without 'RFC'? Many tanks for testing! Dirk > This is change is inspired by > > http://git.denx.de/u-boot.git/?p=u-boot.git;a=commitdiff;h=a429db7e3ce6136f80f22584588247926ba60b05 > > arch/arm/cpu/armv7/omap-common/timer.c | 22 +++++++++++----------- > 1 file changed, 11 insertions(+), 11 deletions(-) > > Index: u-boot.git/arch/arm/cpu/armv7/omap-common/timer.c > =================================================================== > --- u-boot.git.orig/arch/arm/cpu/armv7/omap-common/timer.c > +++ u-boot.git/arch/arm/cpu/armv7/omap-common/timer.c > @@ -35,8 +35,8 @@ > #include<common.h> > #include<asm/io.h> > > -static ulong timestamp; > -static ulong lastinc; > +DECLARE_GLOBAL_DATA_PTR; > + > static struct gptimer *timer_base = (struct gptimer *)CONFIG_SYS_TIMERBASE; > > /* > @@ -74,7 +74,7 @@ ulong get_timer(ulong base) > > void set_timer(ulong t) > { > - timestamp = t; > + gd->tbl = t; > } > > /* delay x useconds */ > @@ -96,8 +96,8 @@ void __udelay(unsigned long usec) > void reset_timer_masked(void) > { > /* reset time, capture current incrementer value time */ > - lastinc = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ); > - timestamp = 0; /* start "advancing" time stamp from 0 */ > + gd->lastinc = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ); > + gd->tbl = 0; /* start "advancing" time stamp from 0 */ > } > > ulong get_timer_masked(void) > @@ -105,14 +105,14 @@ ulong get_timer_masked(void) > /* current tick value */ > ulong now = readl(&timer_base->tcrr) / (TIMER_CLOCK / CONFIG_SYS_HZ); > > - if (now>= lastinc) /* normal mode (non roll) */ > + if (now>= gd->lastinc) /* normal mode (non roll) */ > /* move stamp fordward with absoulte diff ticks */ > - timestamp += (now - lastinc); > + gd->tbl += (now - gd->lastinc); > else /* we have rollover of incrementer */ > - timestamp += ((TIMER_LOAD_VAL / (TIMER_CLOCK / CONFIG_SYS_HZ)) > - - lastinc) + now; > - lastinc = now; > - return timestamp; > + gd->tbl += ((TIMER_LOAD_VAL / (TIMER_CLOCK / CONFIG_SYS_HZ)) > + - gd->lastinc) + now; > + gd->lastinc = now; > + return gd->tbl; > } > > /* > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot