From: Pavel Machek <pavel@suse.cz>
To: Lutz Vieweg <lkv@isg.de>
Cc: patches@x86-64.org, paul.devriendt@amd.com, cpufreq@www.linux.org.uk
Subject: Re: [patches] 2.6.2 to 2.6.3 regression: powernow-k8 doesn't work anymore
Date: Sat, 28 Feb 2004 01:16:49 +0100 [thread overview]
Message-ID: <20040228001649.GJ425@elf.ucw.cz> (raw)
In-Reply-To: <403E8248.2040902@isg.de>
Hi!
> >Andrew, we made mistake in 2.6.2 to 2.6.3 update; this one should fix
> >it. Please apply,
> >
> > Pavel
> >
> >--- clean/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2004-02-22
> >23:30:27.000000000 +0100
> >+++ linux/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2004-02-22
> >23:29:38.000000000 +0100
> >@@ -521,7 +517,8 @@
> > }
> > if ((pst[j].fid > MAX_FID)
> > || (pst[j].fid & 1)
> >- || (pst[j].fid < HI_FID_TABLE_BOTTOM)){
> >+ || (j && (pst[j].fid < HI_FID_TABLE_BOTTOM))) {
> >+ /* Only first fid is allowed to be in "low" range */
> > printk(KERN_ERR PFX "fid %d invalid : 0x%x\n", j,
> > pst[j].fid);
> > return -EINVAL;
> > }
> >
> >
>
> While this patch seems to fix one problem, there's still another
>one:
Sorry, I do not have production hardware here.
> powernow-k8: Found AMD64 processor supporting PowerNow (version 1.00.08a)
> powernow-k8: voltage stable in 100 usec, ramp voltage offset: 2,
> isochronous relief time: 3, maximum voltage step: 0
> powernow-k8: pll lock time: 0x2, maxfid 0xc (2000 MHz), maxvid 0x0
> powernow-k8: 0 : fid 0x0 (800 MHz), vid 0xa
> powernow-k8: 1 : fid 0xa (1800 MHz), vid 0x6
> powernow-k8: 2 : fid 0xc (2000 MHz), vid 0x2
> powernow-k8: currfid 0xc (2000 MHz), currvid 0x0
> powernow-k8: BIOS error: currfid/vid do not match PST, ignoring
> powernow-k8: cpu_init done, current fid 0xc, vid 0x0
> powernow-k8: ph2 null fid transition 0xc
>
> (this looks similar to what the working version from 2.6.2 prints)
>
> but...:
>
> > cat /proc/cpufreq
>
> minimum CPU frequency - maximum CPU frequency - policy
> CPU 0 2000 kHz (100 %) - 2000 kHz (100 %) - powersave
>
> Well... looks like a funny idea to run an Athlon64 at 2MHz, but it feels
> much faster... but what is really a problem: No matter what I "echo" into
> /proc/cpufreq, nothing changes.
>
> A factor 1000 lost somewhere?
Yes.
Try this one. [Warning: extremely ugly hand-edited patch follows;
taking akpm off Cc list, I do not want him to even see it]
Pavel
--- clean/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2004-02-20 12:29:10.000000000 +0100
+++ linux/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2004-02-23 21:06:01.000000000 +0100
@@ -8,6 +8,8 @@
*
* Based on the powernow-k7.c module written by Dave Jones.
* (C) 2003 Dave Jones <davej@codemonkey.ork.uk> on behalf of SuSE Labs
+ * (C) 2004 Dominik Brodowski <linux@brodo.de>
+ * (C) 2004 Pavel Machek <pavel@suse.cz>
* Licensed under the terms of the GNU GPL License version 2.
* Based upon datasheets & sample CPUs kindly provided by AMD.
*
@@ -34,10 +36,6 @@
#define VERSION "version 1.00.08a"
#include "powernow-k8.h"
-#ifdef CONFIG_PREEMPT
-#warning this driver has not been tested on a preempt system
-#endif
-
static u32 vstable; /* voltage stabalization time, from PSB, units 20 us */
static u32 plllock; /* pll lock time, from PSB, units 1 us */
static u32 numps; /* number of p-states, from PSB */
@@ -521,7 +519,8 @@
}
if ((pst[j].fid > MAX_FID)
|| (pst[j].fid & 1)
- || (pst[j].fid < HI_FID_TABLE_BOTTOM)){
+ || (j && (pst[j].fid < HI_FID_TABLE_BOTTOM))) {
+ /* Only first fid is allowed to be in "low" range */
printk(KERN_ERR PFX "fid %d invalid : 0x%x\n", j, pst[j].fid);
return -EINVAL;
}
@@ -548,6 +547,7 @@
unsigned int i, j;
u32 mvs;
u8 maxvid;
+ int arima = 0;
for (i = 0xc0000; i < 0xffff0; i += 0x10) {
/* Scan BIOS looking for the signature. */
@@ -589,7 +589,7 @@
dprintk(KERN_DEBUG PFX "numpst: 0x%x\n", psb->numpst);
if (psb->numpst != 1) {
printk(KERN_ERR BFX "numpst must be 1\n");
- return -ENODEV;
+ arima = 0;
}
dprintk(KERN_DEBUG PFX "cpuid: 0x%x\n", psb->cpuid);
@@ -601,7 +601,7 @@
printk("maxfid 0x%x (%d MHz), maxvid 0x%x\n",
psb->maxfid, find_freq_from_fid(psb->maxfid), maxvid);
- numps = psb->numpstates;
+ numps = arima ? 3 : psb->numpstates;
if (numps < 2) {
printk(KERN_ERR BFX "no p states to transition\n");
return -ENODEV;
@@ -626,8 +626,10 @@
}
pst = (struct pst_s *) (psb + 1);
- if (check_pst_table(pst, maxvid))
- return -EINVAL;
+ if (check_pst_table(pst, maxvid)) {
+ if (!arima)
+ return -EINVAL;
+ }
powernow_table = kmalloc((sizeof(struct cpufreq_frequency_table) * (numps + 1)), GFP_KERNEL);
if (!powernow_table) {
@@ -635,13 +637,24 @@
return -ENOMEM;
}
- for (j = 0; j < numps; j++) {
- printk(KERN_INFO PFX " %d : fid 0x%x (%d MHz), vid 0x%x\n", j,
- pst[j].fid, find_freq_from_fid(pst[j].fid), pst[j].vid);
+ for (j = 0; j < numps; j++) {
powernow_table[j].index = pst[j].fid; /* lower 8 bits */
powernow_table[j].index |= (pst[j].vid << 8); /* upper 8 bits */
- powernow_table[j].frequency = find_freq_from_fid(pst[j].fid);
}
+
+ if (arima) {
+ powernow_table[1].index = 0x0608;
+ powernow_table[2].index = 0x020a;
+ }
+
+ for (j = 0; j < numps; j++) {
+ powernow_table[j].frequency = find_freq_from_fid(powernow_table[j].index & 0xff)*1000;
+ printk(KERN_INFO PFX " %d : fid 0x%x (%d MHz), vid 0x%x\n", j,
+ powernow_table[j].index & 0xff,
+ powernow_table[j].frequency/1000,
+ powernow_table[j].index >> 8);
+ }
+
powernow_table[numps].frequency = CPUFREQ_TABLE_END;
powernow_table[numps].index = 0;
--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
next parent reply other threads:[~2004-02-28 0:16 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4038ED24.3080402@isg.de>
[not found] ` <20040222231431.GA24835@elf.ucw.cz>
[not found] ` <403E8248.2040902@isg.de>
2004-02-28 0:16 ` Pavel Machek [this message]
2004-02-28 13:15 ` [patches] 2.6.2 to 2.6.3 regression: powernow-k8 doesn't work anymore Pavel Machek
2004-03-01 10:15 ` Lutz Vieweg
2004-03-01 10:12 ` Lutz Vieweg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040228001649.GJ425@elf.ucw.cz \
--to=pavel@suse.cz \
--cc=cpufreq@www.linux.org.uk \
--cc=lkv@isg.de \
--cc=patches@x86-64.org \
--cc=paul.devriendt@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox