[Openpxa-users] Linux udelay() is way off

Marek Vasut marek.vasut at gmail.com
Sun Jan 23 05:35:52 EST 2011


On Friday 21 January 2011 18:46:48 Bjørn Forsman wrote:
> 2011/1/20 Russell King - ARM Linux <linux at arm.linux.org.uk>:
> > On Thu, Jan 20, 2011 at 08:18:10PM +0100, Bjørn Forsman wrote:
> >> [   11.425363] cpufreq-core: saving 518144 as reference value for
> >> loops_per_jiffy; freq is 312000 kHz
> >> [   11.425523] cpufreq-core: scaling loops_per_jiffy to 1036288 for
> >> frequency 624000 kHz
> 
> [snip]
> 
> > Is it possible to boot at 624MHz and report the resulting lpj?
> > Alternatively, call calibrate_delay() after the cpufreq switch to
> > 624MHz, disabling the 'printed' stuff and see what it reports.
> 
> Now I have an extra calibrate_delay() after cpufreq changes the frequency.
> 
> First call:
> Calibrating delay loop... 103.62 BogoMIPS (lpj=518144)
> 
> Second call:
> Calibrating delay loop... 622.59 BogoMIPS (lpj=3112960)
> 
> (udelay() is correct when having that second call.)
> 
> It seems cpufreq thinks it transitions from 312 to 624 MHz, but in
> reality it may be transitioning from 104 to 624 MHz (because it now
> runs 6 times as fast according to lpj). This may explain the udelay()
> error ratio (~0.32):
> 
>   104 MHz / 312 MHz = 0.3333..
> 
> I think this means either the clock speed or the jiffies interval do
> not match what the kernel thinks.
> 
> I also did some tests changing the clock speed in the bootloader. It
> seems like the only thing that works for the kernel is booting with a
> 104 MHz clock. Any other frequency and cpufreq will do bad things to
> udelay().
> 
> Any thoughts?
> 
> BTW, I failed at locating the jiffies implementation for PXA310. Any
> pointers?

DAMN.

I cannot replicate this. Bjorn, can you please write me a step-by-step howto for 
morons?

Ah, also, please update your OBM2 and u-boot from openpxa_new branch ;-)

Cheers, thanks
> 
> Best regards,
> Bjørn Forsman



More information about the linux-arm-kernel mailing list