Messages in this thread Patch in this message | | | Date | Wed, 19 Oct 2005 15:49:00 +0200 (METDST) | From | Clemens Ladisch <> | Subject | Re: [PATCH 0/7] more HPET fixes and enhancements |
| |
I wrote: > This means that hpet.c must initialize the interrupt routing register > in this case. I'll write a patch for this.
Okay, this is a quick hack, untested. It just tries to set the first interrupt that the timer could use.
Regards, Clemens Index: linux/arch/i386/kernel/time_hpet.c =================================================================== --- linux.orig/arch/i386/kernel/time_hpet.c 2005-10-02 17:23:20.000000000 +0200 +++ linux/arch/i386/kernel/time_hpet.c 2005-10-19 14:37:55.000000000 +0200 @@ -196,6 +196,12 @@ int __init hpet_enable(void) for (i = 2, timer = &hpet->hpet_timers[2]; i < ntimer; timer++, i++) + if (!(timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) && + !(timer->hpet_config & Tn_FSB_EN_CNF_MASK)) { + int irq = ffs(timer->hpet_config >> Tn_INI_ROUTE_CAP_SHIFT); + timer->hpet_config |= irq << Tn_INT_ROUTE_CNF_SHIFT; + printk(KERN_INFO "HPET: timer %d configured for IRQ %d\n", i, irq); + } hd.hd_irq[i] = (timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) >> Tn_INT_ROUTE_CNF_SHIFT; Index: linux/arch/x86_64/kernel/time.c =================================================================== --- linux.orig/arch/x86_64/kernel/time.c 2005-10-02 17:23:20.000000000 +0200 +++ linux/arch/x86_64/kernel/time.c 2005-10-19 14:36:23.000000000 +0200 @@ -783,6 +783,12 @@ static __init int late_hpet_init(void) for (i = 2, timer = &hpet->hpet_timers[2]; i < ntimer; timer++, i++) + if (!(timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) && + !(timer->hpet_config & Tn_FSB_EN_CNF_MASK)) { + int irq = ffs(timer->hpet_config >> Tn_INI_ROUTE_CAP_SHIFT); + timer->hpet_config |= irq << Tn_INT_ROUTE_CNF_SHIFT; + printk(KERN_INFO "HPET: timer %d configured for IRQ %d\n", i, irq); + } hd.hd_irq[i] = (timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) >> Tn_INT_ROUTE_CNF_SHIFT; | |