ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / arch / i386 / kernel / cpu / cpufreq / longhaul.h
1 /*
2  *  longhaul.h
3  *  (C) 2003 Dave Jones.
4  *
5  *  Licensed under the terms of the GNU GPL License version 2.
6  *
7  *  VIA-specific information
8  */
9
10 union msr_bcr2 {
11         struct {
12                 unsigned Reseved:19,    // 18:0
13                 ESOFTBF:1,              // 19
14                 Reserved2:3,            // 22:20
15                 CLOCKMUL:4,             // 26:23
16                 Reserved3:5;            // 31:27
17         } bits;
18         unsigned long val;
19 };
20
21 union msr_longhaul {
22         struct {
23                 unsigned RevisionID:4,  // 3:0
24                 RevisionKey:4,          // 7:4
25                 EnableSoftBusRatio:1,   // 8
26                 EnableSoftVID:1,        // 9
27                 EnableSoftBSEL:1,       // 10
28                 Reserved:3,             // 11:13
29                 SoftBusRatio4:1,        // 14
30                 VRMRev:1,               // 15
31                 SoftBusRatio:4,         // 19:16
32                 SoftVID:5,              // 24:20
33                 Reserved2:3,            // 27:25
34                 SoftBSEL:2,             // 29:28
35                 Reserved3:2,            // 31:30
36                 MaxMHzBR:4,             // 35:32
37                 MaximumVID:5,           // 40:36
38                 MaxMHzFSB:2,            // 42:41
39                 MaxMHzBR4:1,            // 43
40                 Reserved4:4,            // 47:44
41                 MinMHzBR:4,             // 51:48
42                 MinimumVID:5,           // 56:52
43                 MinMHzFSB:2,            // 58:57
44                 MinMHzBR4:1,            // 59
45                 Reserved5:4;            // 63:60
46         } bits;
47         unsigned long long val;
48 };
49
50 /*
51  * Clock ratio tables. Div/Mod by 10 to get ratio.
52  * The eblcr ones specify the ratio read from the CPU.
53  * The clock_ratio ones specify what to write to the CPU.
54  */
55
56 /*
57  * VIA C3 Samuel 1  & Samuel 2 (stepping 0)
58  */
59 static int __initdata samuel1_clock_ratio[16] = {
60         -1, /* 0000 -> RESERVED */
61         30, /* 0001 ->  3.0x */
62         40, /* 0010 ->  4.0x */
63         -1, /* 0011 -> RESERVED */
64         -1, /* 0100 -> RESERVED */
65         35, /* 0101 ->  3.5x */
66         45, /* 0110 ->  4.5x */
67         55, /* 0111 ->  5.5x */
68         60, /* 1000 ->  6.0x */
69         70, /* 1001 ->  7.0x */
70         80, /* 1010 ->  8.0x */
71         50, /* 1011 ->  5.0x */
72         65, /* 1100 ->  6.5x */
73         75, /* 1101 ->  7.5x */
74         -1, /* 1110 -> RESERVED */
75         -1, /* 1111 -> RESERVED */
76 };
77
78 static int __initdata samuel1_eblcr[16] = {
79         50, /* 0000 -> RESERVED */
80         30, /* 0001 ->  3.0x */
81         40, /* 0010 ->  4.0x */
82         -1, /* 0011 -> RESERVED */
83         55, /* 0100 ->  5.5x */
84         35, /* 0101 ->  3.5x */
85         45, /* 0110 ->  4.5x */
86         -1, /* 0111 -> RESERVED */
87         -1, /* 1000 -> RESERVED */
88         70, /* 1001 ->  7.0x */
89         80, /* 1010 ->  8.0x */
90         60, /* 1011 ->  6.0x */
91         -1, /* 1100 -> RESERVED */
92         75, /* 1101 ->  7.5x */
93         -1, /* 1110 -> RESERVED */
94         65, /* 1111 ->  6.5x */
95 };
96
97 /*
98  * VIA C3 Samuel2 Stepping 1->15
99  */
100 static int __initdata samuel2_eblcr[16] = {
101         50,  /* 0000 ->  5.0x */
102         30,  /* 0001 ->  3.0x */
103         40,  /* 0010 ->  4.0x */
104         100, /* 0011 -> 10.0x */
105         55,  /* 0100 ->  5.5x */
106         35,  /* 0101 ->  3.5x */
107         45,  /* 0110 ->  4.5x */
108         110, /* 0111 -> 11.0x */
109         90,  /* 1000 ->  9.0x */
110         70,  /* 1001 ->  7.0x */
111         80,  /* 1010 ->  8.0x */
112         60,  /* 1011 ->  6.0x */
113         120, /* 1100 -> 12.0x */
114         75,  /* 1101 ->  7.5x */
115         130, /* 1110 -> 13.0x */
116         65,  /* 1111 ->  6.5x */
117 };
118
119 /*
120  * VIA C3 Ezra
121  */
122 static int __initdata ezra_clock_ratio[16] = {
123         100, /* 0000 -> 10.0x */
124         30,  /* 0001 ->  3.0x */
125         40,  /* 0010 ->  4.0x */
126         90,  /* 0011 ->  9.0x */
127         95,  /* 0100 ->  9.5x */
128         35,  /* 0101 ->  3.5x */
129         45,  /* 0110 ->  4.5x */
130         55,  /* 0111 ->  5.5x */
131         60,  /* 1000 ->  6.0x */
132         70,  /* 1001 ->  7.0x */
133         80,  /* 1010 ->  8.0x */
134         50,  /* 1011 ->  5.0x */
135         65,  /* 1100 ->  6.5x */
136         75,  /* 1101 ->  7.5x */
137         85,  /* 1110 ->  8.5x */
138         120, /* 1111 -> 12.0x */
139 };
140
141 static int __initdata ezra_eblcr[16] = {
142         50,  /* 0000 ->  5.0x */
143         30,  /* 0001 ->  3.0x */
144         40,  /* 0010 ->  4.0x */
145         100, /* 0011 -> 10.0x */
146         55,  /* 0100 ->  5.5x */
147         35,  /* 0101 ->  3.5x */
148         45,  /* 0110 ->  4.5x */
149         95,  /* 0111 ->  9.5x */
150         90,  /* 1000 ->  9.0x */
151         70,  /* 1001 ->  7.0x */
152         80,  /* 1010 ->  8.0x */
153         60,  /* 1011 ->  6.0x */
154         120, /* 1100 -> 12.0x */
155         75,  /* 1101 ->  7.5x */
156         85,  /* 1110 ->  8.5x */
157         65,  /* 1111 ->  6.5x */
158 };
159
160 /*
161  * VIA C3 (Ezra-T) [C5M].
162  */
163 static int __initdata ezrat_clock_ratio[32] = {
164         100, /* 0000 -> 10.0x */
165         30,  /* 0001 ->  3.0x */
166         40,  /* 0010 ->  4.0x */
167         90,  /* 0011 ->  9.0x */
168         95,  /* 0100 ->  9.5x */
169         35,  /* 0101 ->  3.5x */
170         45,  /* 0110 ->  4.5x */
171         55,  /* 0111 ->  5.5x */
172         60,  /* 1000 ->  6.0x */
173         70,  /* 1001 ->  7.0x */
174         80,  /* 1010 ->  8.0x */
175         50,  /* 1011 ->  5.0x */
176         65,  /* 1100 ->  6.5x */
177         75,  /* 1101 ->  7.5x */
178         85,  /* 1110 ->  8.5x */
179         120, /* 1111 ->  12.0x */
180
181         -1,  /* 0000 -> RESERVED (10.0x) */
182         110, /* 0001 -> 11.0x */
183         120, /* 0010 -> 12.0x */
184         -1,  /* 0011 -> RESERVED (9.0x)*/
185         105, /* 0100 -> 10.5x */
186         115, /* 0101 -> 11.5x */
187         125, /* 0110 -> 12.5x */
188         135, /* 0111 -> 13.5x */
189         140, /* 1000 -> 14.0x */
190         150, /* 1001 -> 15.0x */
191         160, /* 1010 -> 16.0x */
192         130, /* 1011 -> 13.0x */
193         145, /* 1100 -> 14.5x */
194         155, /* 1101 -> 15.5x */
195         -1,  /* 1110 -> RESERVED (13.0x) */
196         -1,  /* 1111 -> RESERVED (12.0x) */
197 };
198
199 static int __initdata ezrat_eblcr[32] = {
200         50,  /* 0000 ->  5.0x */
201         30,  /* 0001 ->  3.0x */
202         40,  /* 0010 ->  4.0x */
203         100, /* 0011 -> 10.0x */
204         55,  /* 0100 ->  5.5x */
205         35,  /* 0101 ->  3.5x */
206         45,  /* 0110 ->  4.5x */
207         95,  /* 0111 ->  9.5x */
208         90,  /* 1000 ->  9.0x */
209         70,  /* 1001 ->  7.0x */
210         80,  /* 1010 ->  8.0x */
211         60,  /* 1011 ->  6.0x */
212         120, /* 1100 -> 12.0x */
213         75,  /* 1101 ->  7.5x */
214         85,  /* 1110 ->  8.5x */
215         65,  /* 1111 ->  6.5x */
216
217         -1,  /* 0000 -> RESERVED (9.0x) */
218         110, /* 0001 -> 11.0x */
219         120, /* 0010 -> 12.0x */
220         -1,  /* 0011 -> RESERVED (10.0x)*/
221         135, /* 0100 -> 13.5x */
222         115, /* 0101 -> 11.5x */
223         125, /* 0110 -> 12.5x */
224         105, /* 0111 -> 10.5x */
225         130, /* 1000 -> 13.0x */
226         150, /* 1001 -> 15.0x */
227         160, /* 1010 -> 16.0x */
228         140, /* 1011 -> 14.0x */
229         -1,  /* 1100 -> RESERVED (12.0x) */
230         155, /* 1101 -> 15.5x */
231         -1,  /* 1110 -> RESERVED (13.0x) */
232         145, /* 1111 -> 14.5x */
233 };
234
235 /*
236  * VIA C3 Nehemiah */
237 static int __initdata nehemiah_clock_ratio[32] = {
238         100, /* 0000 -> 10.0x */
239         160, /* 0001 -> 16.0x */
240         -1,  /* 0010 -> RESERVED */
241         90,  /* 0011 ->  9.0x */
242         95,  /* 0100 ->  9.5x */
243         -1,  /* 0101 -> RESERVED */
244         -1,  /* 0110 -> RESERVED */
245         55,  /* 0111 ->  5.5x */
246         60,  /* 1000 ->  6.0x */
247         70,  /* 1001 ->  7.0x */
248         80,  /* 1010 ->  8.0x */
249         50,  /* 1011 ->  5.0x */
250         65,  /* 1100 ->  6.5x */
251         75,  /* 1101 ->  7.5x */
252         85,  /* 1110 ->  8.5x */
253         120, /* 1111 ->  12.0x */
254
255         100, /* 0000 -> 10.0x */
256         110, /* 0001 -> 11.0x */
257         120, /* 0010 -> 12.0x */
258         90,  /* 0011 ->  9.0x */
259         105, /* 0100 -> 10.5x */
260         115, /* 0101 -> 11.5x */
261         125, /* 0110 -> 12.5x */
262         135, /* 0111 -> 13.5x */
263         140, /* 1000 -> 14.0x */
264         150, /* 1001 -> 15.0x */
265         160, /* 1010 -> 16.0x */
266         130, /* 1011 -> 13.0x */
267         145, /* 1100 -> 14.5x */
268         155, /* 1101 -> 15.5x */
269         -1,  /* 1110 -> RESERVED */
270         120, /* 1111 -> 12.0x */
271 };
272
273 static int __initdata nehemiah_eblcr[32] = {
274         50,  /* 0000 ->  5.0x */
275         160, /* 0001 -> 16.0x */
276         -1,  /* 0010 -> RESERVED */
277         100, /* 0011 -> 10.0x */
278         55,  /* 0100 ->  5.5x */
279         -1,  /* 0101 -> RESERVED */
280         -1,  /* 0110 -> RESERVED */
281         95,  /* 0111 ->  9.5x */
282         90,  /* 1000 ->  9.0x */
283         70,  /* 1001 ->  7.0x */
284         80,  /* 1010 ->  8.0x */
285         60,  /* 1011 ->  6.0x */
286         120, /* 1100 -> 12.0x */
287         75,  /* 1101 ->  7.5x */
288         85,  /* 1110 ->  8.5x */
289         65,  /* 1111 ->  6.5x */
290
291         90,  /* 0000 ->  9.0x */
292         110, /* 0001 -> 11.0x */
293         120, /* 0010 -> 12.0x */
294         100, /* 0011 -> 10.0x */
295         135, /* 0100 -> 13.5x */
296         115, /* 0101 -> 11.5x */
297         125, /* 0110 -> 12.5x */
298         105, /* 0111 -> 10.5x */
299         130, /* 1000 -> 13.0x */
300         150, /* 1001 -> 15.0x */
301         160, /* 1010 -> 16.0x */
302         140, /* 1011 -> 14.0x */
303         120, /* 1100 -> 12.0x */
304         155, /* 1101 -> 15.5x */
305         -1,  /* 1110 -> RESERVED */
306         -1,  /* 1111 -> RESERVED */
307 };
308 /* 
309  * Voltage scales. Div/Mod by 1000 to get actual voltage.
310  * Which scale to use depends on the VRM type in use.
311  */
312 static int __initdata vrm85scales[32] = {
313         1250, 1200, 1150, 1100, 1050, 1800, 1750, 1700,
314         1650, 1600, 1550, 1500, 1450, 1400, 1350, 1300,
315         1275, 1225, 1175, 1125, 1075, 1825, 1775, 1725,
316         1675, 1625, 1575, 1525, 1475, 1425, 1375, 1325,
317 };
318
319 static int __initdata mobilevrmscales[32] = {
320         2000, 1950, 1900, 1850, 1800, 1750, 1700, 1650,
321         1600, 1550, 1500, 1450, 1500, 1350, 1300, -1,
322         1275, 1250, 1225, 1200, 1175, 1150, 1125, 1100,
323         1075, 1050, 1025, 1000, 975, 950, 925, -1,
324 };
325