View | Details | Raw Unified | Return to bug 103786
Collapse All | Expand All

(-)linux-2.6.13.4/arch/i386/kernel/cpu/cpufreq/powernow-k8.c (-11 / +19 lines)
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",

Return to bug 103786