|
Lines 44-50
Link Here
|
| 44 |
|
44 |
|
| 45 |
#define PFX "powernow-k8: " |
45 |
#define PFX "powernow-k8: " |
| 46 |
#define BFX PFX "BIOS error: " |
46 |
#define BFX PFX "BIOS error: " |
| 47 |
#define VERSION "version 1.50.3" |
47 |
#define VERSION "version 1.50.4" |
| 48 |
#include "powernow-k8.h" |
48 |
#include "powernow-k8.h" |
| 49 |
|
49 |
|
| 50 |
/* serialize freq changes */ |
50 |
/* serialize freq changes */ |
|
Lines 111-118
Link Here
|
| 111 |
u32 i = 0; |
111 |
u32 i = 0; |
| 112 |
|
112 |
|
| 113 |
do { |
113 |
do { |
| 114 |
if (i++ > 0x1000000) { |
114 |
if (i++ > 10000) { |
| 115 |
printk(KERN_ERR PFX "detected change pending stuck\n"); |
115 |
dprintk("detected change pending stuck\n"); |
| 116 |
return 1; |
116 |
return 1; |
| 117 |
} |
117 |
} |
| 118 |
rdmsr(MSR_FIDVID_STATUS, lo, hi); |
118 |
rdmsr(MSR_FIDVID_STATUS, lo, hi); |
|
Lines 159-164
Link Here
|
| 159 |
{ |
159 |
{ |
| 160 |
u32 lo; |
160 |
u32 lo; |
| 161 |
u32 savevid = data->currvid; |
161 |
u32 savevid = data->currvid; |
|
|
162 |
u32 i = 0; |
| 162 |
|
163 |
|
| 163 |
if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { |
164 |
if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) { |
| 164 |
printk(KERN_ERR PFX "internal error - overflow on fid write\n"); |
165 |
printk(KERN_ERR PFX "internal error - overflow on fid write\n"); |
|
Lines 170-179
Link Here
|
| 170 |
dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", |
171 |
dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n", |
| 171 |
fid, lo, data->plllock * PLL_LOCK_CONVERSION); |
172 |
fid, lo, data->plllock * PLL_LOCK_CONVERSION); |
| 172 |
|
173 |
|
| 173 |
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); |
174 |
do { |
| 174 |
|
175 |
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION); |
| 175 |
if (query_current_values_with_pending_wait(data)) |
176 |
if (i++ > 100) { |
| 176 |
return 1; |
177 |
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
|
|
178 |
retrun 1; |
| 179 |
} |
| 180 |
} while (query_current_values_with_pending_wait(data)); |
| 177 |
|
181 |
|
| 178 |
count_off_irt(data); |
182 |
count_off_irt(data); |
| 179 |
|
183 |
|
|
Lines 197-202
Link Here
|
| 197 |
{ |
201 |
{ |
| 198 |
u32 lo; |
202 |
u32 lo; |
| 199 |
u32 savefid = data->currfid; |
203 |
u32 savefid = data->currfid; |
|
|
204 |
int i = 0; |
| 200 |
|
205 |
|
| 201 |
if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { |
206 |
if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) { |
| 202 |
printk(KERN_ERR PFX "internal error - overflow on vid write\n"); |
207 |
printk(KERN_ERR PFX "internal error - overflow on vid write\n"); |
|
Lines 208-217
Link Here
|
| 208 |
dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", |
213 |
dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n", |
| 209 |
vid, lo, STOP_GRANT_5NS); |
214 |
vid, lo, STOP_GRANT_5NS); |
| 210 |
|
215 |
|
| 211 |
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); |
216 |
do { |
| 212 |
|
217 |
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS); |
| 213 |
if (query_current_values_with_pending_wait(data)) |
218 |
if (i++ > 100) { |
| 214 |
return 1; |
219 |
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n"); |
|
|
220 |
return 1; |
| 221 |
} |
| 222 |
} while (query_current_values_with_pending_wait(data)); |
| 215 |
|
223 |
|
| 216 |
if (savefid != data->currfid) { |
224 |
if (savefid != data->currfid) { |
| 217 |
printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", |
225 |
printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n", |