ICH9 HPET Interrupts Not Seen

ICH9 HPET Interrupts Not Seen

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!

2 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Quoting - Paul Wren
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!

If you are using the 8259 model, orginally, there were linked in series to make the entire interrupt scheme of 0-15 (I think one of those got used as the link between the 8259's, not positive on that,been 25 years). If you only have 4 Intrs to use, the ISR can read the register in the 8259's to see which interrupt it is. Note: each 8259 interrupt can be masked, programed active hi or low, rising or falling edge triggered.Also the address of your ISR had to written into the fixed address ISRx. It is a ISR jump table, pionter to ISRs, Addres of jump table is fixed location in PC address space, I think around 0x0000 0x0000. That's all.

Leave a Comment

Please sign in to add a comment. Not a member? Join today