--- linux-2.6.16.5/arch/i386/kernel/cpu/cpufreq/powernow-k7.c.orig	2006-04-14 13:12:58.000000000 +0200
+++ linux-2.6.16.5/arch/i386/kernel/cpu/cpufreq/powernow-k7.c	2006-04-15 18:55:46.015537000 +0200
@@ -102,6 +102,34 @@
 static unsigned int latency;
 static char have_a0;
 
+static unsigned char *fake_pst;
+
+static void create_fake_pst(void)
+{
+	fake_pst = kmalloc((sizeof(u32) + 4*sizeof(u8) + 10*sizeof(u8)), GFP_KERNEL);
+	
+	*((u32*)fake_pst) = 0x681;   /* cpuid */
+	*(fake_pst+4) = 133; /* fsbspeed */
+	*(fake_pst+5) = 1;   /* maxfid (11.5) */
+	*(fake_pst+6) = 23;  /* startvid (1.1) */
+	*(fake_pst+7) = 5;   /* numpstates */
+
+	*(fake_pst+8) = 4;   /*  666 MHz */
+	*(fake_pst+9) = 23;  /*  1.1 V   */
+
+	*(fake_pst+10) = 6;  /*  800 MHz */
+	*(fake_pst+11) = 19; /*  1.2 V   */
+
+	*(fake_pst+12) = 8;  /*  933 MHz */
+	*(fake_pst+13) = 14; /*  1.3 V   */
+
+	*(fake_pst+14) = 13; /* 1266 MHz */
+	*(fake_pst+15) = 12; /*  1.4 V   */
+
+	*(fake_pst+16) = 1;  /* 1533 MHz */
+	*(fake_pst+17) = 10; /*  1.5 V   */
+}
+
 #define dprintk(msg...) cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER, "powernow-k7", msg)
 
 static int check_fsb(unsigned int fsbspeed)
@@ -450,10 +478,15 @@
 
 			p += sizeof (struct psb_s);
 
-			pst = (struct pst_s *) p;
+			create_fake_pst();
+			pst = fake_pst;
 
+			etuple = pst->cpuid;
+			maxfid = pst->maxfid;
+			startvid = pst->startvid;
+						
 			for (i = 0 ; i <psb->numpst; i++) {
-				pst = (struct pst_s *) p;
+				pst = fake_pst;
 				number_scales = pst->numpstates;
 
 				if ((etuple == pst->cpuid) && check_fsb(pst->fsbspeed) &&
@@ -643,6 +676,7 @@
 #endif
 
 	kfree(powernow_table);
+	kfree(fake_pst);
 	return 0;
 }
 

