lkml.org 
[lkml]   [2005]   [Oct]   [19]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateWed, 19 Oct 2005 15:49:00 +0200 (METDST)
FromClemens Ladisch <>
SubjectRe: [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;
\
 
 \ /
  Last update: 2005-10-19 13:51    [from the cache]
©2003-2008