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

Bjørn Forsman bjorn.forsman at gmail.com
Thu Jan 20 19:02:34 EST 2011


2011/1/20 Russell King - ARM Linux <linux at arm.linux.org.uk>:
> On Thu, Jan 20, 2011 at 09:25:36PM +0100, 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
>> >
>> > So despite scaling lpj by a factor of two for the doubling in clock
>> > frequency, we see a 30% error in it?
>>
>> No. udelay() is ~30 % of what it should be. My gpio + oscilloscope
>> test showed that udelay(50) => 16 us in real time with cpufreq
>> enabled. This gives 16/50 = 0.32.
>>
>> > Is it possible to boot at 624MHz and report the resulting lpj?
>>
>> I think I need some help doing that. I found some clock setup in
>> <u-boot-pxa>/arch/arm/cpu/pxa/start.S (OpenPXA tree) but I'm not
>> familiar with it.
>>
>> > Alternatively, call calibrate_delay() after the cpufreq switch to
>> > 624MHz, disabling the 'printed' stuff and see what it reports.
>>
>> First attempts at moving calibrate_delay() after freq switch failed. I
>> will try more. Just had to send this so stop the misunderstanding
>> about how much udelay() is off...
>
> Not a good idea to remove it from its current location.  I was suggesting
> adding another call to calibrate_delay() after the cpufreq stuff has
> initialized.

Ok, thanks!

>> What do you mean by disabling the 'printed' stuff? The cpufreq debug stuff?
>
> See calibrate_delay() in init/calibrate.c.  'static bool printed;'  It's
> set true after the first run, and there after it won't print the
> information again.  So if you want to see it from subsequent runs, you
> need to defeat it.

Thanks for the pointers!

Best regards,
Bjørn Forsman



More information about the linux-arm-kernel mailing list