[patch 01/54] i386: HPET, check if the counter works

2007-06-08 Thread Chris Wright
-stable review patch.  If anyone has any objections, please let us know.
-

From: Thomas Gleixner <[EMAIL PROTECTED]>

Some systems have a HPET which is not incrementing, which leads to a
complete hang. Detect it during HPET setup.

Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
Signed-off-by: Chris Wright <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
---
[chrisw: again, this time with feeling ;-)  expected upstream soon]

 arch/i386/kernel/hpet.c |   24 +++-
 1 file changed, 23 insertions(+), 1 deletion(-)

--- linux-2.6.21.4.orig/arch/i386/kernel/hpet.c
+++ linux-2.6.21.4/arch/i386/kernel/hpet.c
@@ -226,7 +226,8 @@ int __init hpet_enable(void)
 {
unsigned long id;
uint64_t hpet_freq;
-   u64 tmp;
+   u64 tmp, start, now;
+   cycle_t t1;
 
if (!is_hpet_capable())
return 0;
@@ -273,6 +274,27 @@ int __init hpet_enable(void)
/* Start the counter */
hpet_start_counter();
 
+   /* Verify whether hpet counter works */
+   t1 = read_hpet();
+   rdtscll(start);
+
+   /*
+* We don't know the TSC frequency yet, but waiting for
+* 20 TSC cycles is safe:
+* 4 GHz == 50us
+* 1 GHz == 200us
+*/
+   do {
+   rep_nop();
+   rdtscll(now);
+   } while ((now - start) < 20UL);
+
+   if (t1 == read_hpet()) {
+   printk(KERN_WARNING
+  "HPET counter not counting. HPET disabled\n");
+   goto out_nohpet;
+   }
+
/* Initialize and register HPET clocksource
 *
 * hpet period is in femto seconds per cycle

-- 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[patch 01/54] i386: HPET, check if the counter works

2007-06-08 Thread Chris Wright
-stable review patch.  If anyone has any objections, please let us know.
-

From: Thomas Gleixner [EMAIL PROTECTED]

Some systems have a HPET which is not incrementing, which leads to a
complete hang. Detect it during HPET setup.

Signed-off-by: Thomas Gleixner [EMAIL PROTECTED]
Signed-off-by: Chris Wright [EMAIL PROTECTED]
Signed-off-by: Greg Kroah-Hartman [EMAIL PROTECTED]
---
[chrisw: again, this time with feeling ;-)  expected upstream soon]

 arch/i386/kernel/hpet.c |   24 +++-
 1 file changed, 23 insertions(+), 1 deletion(-)

--- linux-2.6.21.4.orig/arch/i386/kernel/hpet.c
+++ linux-2.6.21.4/arch/i386/kernel/hpet.c
@@ -226,7 +226,8 @@ int __init hpet_enable(void)
 {
unsigned long id;
uint64_t hpet_freq;
-   u64 tmp;
+   u64 tmp, start, now;
+   cycle_t t1;
 
if (!is_hpet_capable())
return 0;
@@ -273,6 +274,27 @@ int __init hpet_enable(void)
/* Start the counter */
hpet_start_counter();
 
+   /* Verify whether hpet counter works */
+   t1 = read_hpet();
+   rdtscll(start);
+
+   /*
+* We don't know the TSC frequency yet, but waiting for
+* 20 TSC cycles is safe:
+* 4 GHz == 50us
+* 1 GHz == 200us
+*/
+   do {
+   rep_nop();
+   rdtscll(now);
+   } while ((now - start)  20UL);
+
+   if (t1 == read_hpet()) {
+   printk(KERN_WARNING
+  HPET counter not counting. HPET disabled\n);
+   goto out_nohpet;
+   }
+
/* Initialize and register HPET clocksource
 *
 * hpet period is in femto seconds per cycle

-- 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/