On Sun, 8 Jun 2014, Segher Boessenkool wrote:
The correct thing to do is similar to SPARC in that you create a 100Hz interrupt (possibly using the PPC decrementer?) that should increment a variable representing the number of ms elapsed. All you need to do is then point the new code towards that variable and it will handle get-msecs and milliseconds automatically.
The interrupt routine is probably do-able in about 20 lines or less of PPC asm but it's beyond my current PPC-fu. It would be a good project for you though, and would probably fix the incorrect timing CIF milliseconds with -M mac99 :)
There is no reason at all to use the decrementer and interrupts, with all the problems inherent in that; just use the timebase, it's what it's for. The decrementer and timebase tick at the same frequency.
That's what I thought and the current code already does that only using the wrong TBFREQ value. This could be easily fixed the same way as is done in arch/ppc/qemu/init.c:223:
/* From drivers/timer.c */ extern unsigned long timer_freq;
but probably it would be better to clean this up at the same time. The definition in drivers/timer.c:79 says:
/* * TODO: pass via lb table */ unsigned long timer_freq = 10000000 / 4;
What is the lb table and where is it?
Regards, BALATON Zoltan