We have an existing timer driver which works fine with the MMT on a 6300ESB south bridge, and I am adapting it to work with the HPET on an ICH9M.
The changes I identified were minor-the ICH9M has a different device ID, and the offset address of the HPET configuration register has changed since the 6300ESB.
Everything seems to be working: a test program shows that the main counter is incrementing, the Timer 0 comparator register is being incremented by the interval value (it is configured to be periodic), and the interrupt active bit in the General Interrupt Status register is being set for Timer 0 but my interrupt service routine is not being called.
I am specifying PIRQ F (22) in the Interrupt Rout field of the TIM1_CONF register, and then mapping this PIRQ line to a standard ISA interrupt (IRQ10) using the PIRQ Routing Control Register (This is the same method we used in the 6300ESB MMT driver). Also, we are configuring the interrupt as level-triggered.
Has something changed between the 6300ESB MMT and the ICH9M HPET? The data sheets are nearly identical with regard to these timers, although there are some subtle changes that provide conflicting information.
Specifically, in the notes accompanying the description of the 5-bit Interrupt Rout field of the Timer Configuration and Capabilities (TIMn_CONF) register, a new note has been added (note 1) indicating that If the interrupt is handled via the 8259, only interrupts 0-15 are applicable and valid. Note 3 then says that for Timers 0 and 1, software must ensure that it programs a valid value which can only be 20, 21, 22, or 23 in this field.
Any help would be greatly appreciated!