bk://linux-dj.bkbits.net/cpufreq
davej@delerium.kernelslacker.org|ChangeSet|20040912215458|17123 davej

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/09/10 14:20:20+01:00 davej@redhat.com 
#   [CPUFREQ] Work around AMD64 2nd identical PST errata
#   
#   AMD recently errata'd the definition of the PSB/PST for recent Athlon 64 and Opteron parts.  The errata
#   allows for a second, identical PST for those parts.
#   The current powernow-k8 driver will not work in PST/PSB mode on those parts because it requires 
#   there be 1 and only 1 PST.
#   
#   From: Mark Langsdorf
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# arch/i386/kernel/cpu/cpufreq/powernow-k8.c
#   2004/09/10 14:19:12+01:00 davej@redhat.com +11 -2
#   [CPUFREQ] Work around AMD64 2nd identical PST errata
#   
#   AMD recently errata'd the definition of the PSB/PST for recent Athlon 64 and Opteron parts.  The errata
#   allows for a second, identical PST for those parts.
#   The current powernow-k8 driver will not work in PST/PSB mode on those parts because it requires 
#   there be 1 and only 1 PST.
#   
#   From: Mark Langsdorf
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# ChangeSet
#   2004/09/08 11:45:22-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# arch/i386/kernel/smpboot.c
#   2004/09/08 11:45:18-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/09/03 21:23:19+01:00 davej@redhat.com 
#   [CPUFREQ] speedstep-smi: only allow it to run on mobile Intel Pentium III
#   
#   speedstep-smi only makes sense on Intel mobile Pentium III systems.
#   So, unify the distributed checks for speedstep_processor there,
#   and disallow P4s.
#   
#   Signed-off-by: Dominik Brodowski <linux@brodo.de>
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
#   2004/09/03 21:23:10+01:00 davej@redhat.com +12 -13
#   [CPUFREQ] speedstep-smi: only allow it to run on mobile Intel Pentium III
#   
#   speedstep-smi only makes sense on Intel mobile Pentium III systems.
#   So, unify the distributed checks for speedstep_processor there,
#   and disallow P4s.
#   
#   Signed-off-by: Dominik Brodowski <linux@brodo.de>
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# ChangeSet
#   2004/08/25 14:07:34-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# arch/i386/kernel/smpboot.c
#   2004/08/25 14:07:30-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/24 17:39:15-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/cpufreq
#   into bix.(none):/usr/src/bk-cpufreq
# 
# include/asm-i386/acpi.h
#   2004/08/24 17:39:11-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/24 17:39:11-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/i386/kernel/smpboot.c
#   2004/08/24 17:39:11-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/24 17:37:54-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# arch/i386/kernel/smpboot.c
#   2004/08/24 17:37:47-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/23 13:53:34-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/cpufreq
#   into bix.(none):/usr/src/bk-cpufreq
# 
# include/asm-i386/acpi.h
#   2004/08/23 13:53:31-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/23 13:53:31-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/i386/kernel/smpboot.c
#   2004/08/23 13:53:31-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/22 21:09:40-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# include/asm-i386/acpi.h
#   2004/08/22 21:09:36-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/22 21:09:36-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# arch/i386/kernel/smpboot.c
#   2004/08/22 21:09:36-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/20 02:10:39-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/cpufreq
#   into bix.(none):/usr/src/bk-cpufreq
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/20 02:10:35-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/17 14:12:14-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/cpufreq
#   into bix.(none):/usr/src/bk-cpufreq
# 
# arch/i386/kernel/smpboot.c
#   2004/08/17 14:12:10-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/15 01:01:43-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/cpufreq
#   into bix.(none):/usr/src/bk-cpufreq
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/15 01:01:40-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/15 01:00:46-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# include/asm-i386/acpi.h
#   2004/08/15 01:00:42-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/08 02:12:22-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-cpufreq
# 
# drivers/cpufreq/cpufreq_userspace.c
#   2004/08/08 02:12:18-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c
--- a/arch/i386/kernel/cpu/cpufreq/powernow-k8.c	2004-09-12 22:00:50 -07:00
+++ b/arch/i386/kernel/cpu/cpufreq/powernow-k8.c	2004-09-12 22:00:50 -07:00
@@ -39,7 +39,7 @@
 
 #define PFX "powernow-k8: "
 #define BFX PFX "BIOS error: "
-#define VERSION "version 1.00.09b"
+#define VERSION "version 1.00.09e"
 #include "powernow-k8.h"
 
 /* serialize freq changes  */
@@ -596,6 +596,8 @@
 	unsigned int i;
 	u32 mvs;
 	u8 maxvid;
+	u32 cpst = 0;
+	u32 thiscpuid;
 
 	for (i = 0xc0000; i < 0xffff0; i += 0x10) {
 		/* Scan BIOS looking for the signature. */
@@ -634,7 +636,14 @@
 		dprintk(KERN_INFO PFX "maximum voltage step: %d - 0x%x\n", mvs, data->vidmvs);
 
 		dprintk(KERN_DEBUG PFX "numpst: 0x%x\n", psb->numpst);
-		if (psb->numpst != 1) {
+		cpst = psb->numpst;
+		if ((psb->cpuid == 0x00000fc0) || (psb->cpuid == 0x00000fe0) ){
+			thiscpuid = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
+			if ((thiscpuid == 0x00000fc0) || (thiscpuid == 0x00000fe0) ) {
+				cpst = 1;
+			}
+		}
+		if (cpst != 1) {
 			printk(KERN_ERR BFX "numpst must be 1\n");
 			return -ENODEV;
 		}
diff -Nru a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
--- a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c	2004-09-12 22:00:50 -07:00
+++ b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c	2004-09-12 22:00:50 -07:00
@@ -260,12 +260,6 @@
 	if (result) {
 		/* fall back to speedstep_lib.c dection mechanism: try both states out */
 		dprintk(KERN_INFO PFX "could not detect low and high frequencies by SMI call.\n");
-		if (!speedstep_processor)
-			speedstep_processor = speedstep_detect_processor();
-
-		if (!speedstep_processor)
-			return -ENODEV;
-
 		result = speedstep_get_freqs(speedstep_processor,
 				&speedstep_freqs[SPEEDSTEP_LOW].frequency,
 				&speedstep_freqs[SPEEDSTEP_HIGH].frequency,
@@ -310,10 +304,6 @@
 {
 	if (cpu)
 		return -ENODEV;
-	if (!speedstep_processor)
-		speedstep_processor = speedstep_detect_processor();
-	if (!speedstep_processor)
-		return 0;
 	return speedstep_get_processor_frequency(speedstep_processor);
 }
 
@@ -354,10 +344,19 @@
  */
 static int __init speedstep_init(void)
 {
-    struct cpuinfo_x86 *c = cpu_data;
+	speedstep_processor = speedstep_detect_processor();
+
+	switch (speedstep_processor) {
+	case SPEEDSTEP_PROCESSOR_PIII_T:
+	case SPEEDSTEP_PROCESSOR_PIII_C:
+	case SPEEDSTEP_PROCESSOR_PIII_C_EARLY:
+		break;
+	default:
+		speedstep_processor = 0;
+	}
 
-    if (c->x86_vendor != X86_VENDOR_INTEL) {
-		printk (KERN_INFO PFX "No Intel CPU detected.\n");
+	if (!speedstep_processor) {
+		dprintk (KERN_INFO PFX "No supported Intel CPU detected.\n");
 		return -ENODEV;
 	}