On Fri, 21 Jan 2005, Tony Lindgren wrote:
This doesn't seem to cover the local APIC timer, what do you do about the 1kHz tick which it's programmed to do?
Sorry for the delay in replaying. Thanks for pointing that out, I
don't know yet what to do with the local APIC timer. Have to look at
more.
Pavel does your test system have a Local APIC? If so that may also explain why you didn't see a difference.
Tony, something like the following for oneshot should work, untested of course. Perhaps you could use that for the wakeup interrupt instead?
void setup_oneshot_apic_timer(unsigned int count)
{
unsigned int lvtt, tmp_value;
unsigned long flags;
count *= calibration_result;
local_irq_save(flags);
lvtt = ~APIC_LVT_TIMER_PERIODIC | LOCAL_TIMER_VECTOR;
apic_write_around(APIC_LVTT, lvtt);
tmp_value = apic_read(APIC_TDCR);
apic_write_around(APIC_TDCR, (tmp_value
& ~(APIC_TDR_DIV_1 | APIC_TDR_DIV_TMBASE))
| APIC_TDR_DIV_16);
apic_write_around(APIC_TMICT, count/APIC_DIVISOR);
local_irq_restore(flags);
}