Root/drivers/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
10union 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
21union 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 values specify the ratio read from the CPU.
53 * The mults values specify what to write to the CPU.
54 */
55
56/*
57 * VIA C3 Samuel 1 & Samuel 2 (stepping 0)
58 */
59static const int __cpuinitdata samuel1_mults[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
78static const int __cpuinitdata 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 */
100static const int __cpuinitdata 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 */
122static const int __cpuinitdata ezra_mults[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
141static const int __cpuinitdata 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 */
163static const int __cpuinitdata ezrat_mults[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    -1, /* 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
199static const int __cpuinitdata 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
238static const int __cpuinitdata nehemiah_mults[32] = {
239    100, /* 0000 -> 10.0x */
240    -1, /* 0001 -> 16.0x */
241    40, /* 0010 -> 4.0x */
242    90, /* 0011 -> 9.0x */
243    95, /* 0100 -> 9.5x */
244    -1, /* 0101 -> RESERVED */
245    45, /* 0110 -> 4.5x */
246    55, /* 0111 -> 5.5x */
247    60, /* 1000 -> 6.0x */
248    70, /* 1001 -> 7.0x */
249    80, /* 1010 -> 8.0x */
250    50, /* 1011 -> 5.0x */
251    65, /* 1100 -> 6.5x */
252    75, /* 1101 -> 7.5x */
253    85, /* 1110 -> 8.5x */
254    120, /* 1111 -> 12.0x */
255    -1, /* 0000 -> 10.0x */
256    110, /* 0001 -> 11.0x */
257    -1, /* 0010 -> 12.0x */
258    -1, /* 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 (13.0x) */
270    -1, /* 1111 -> 12.0x */
271};
272
273static const int __cpuinitdata nehemiah_eblcr[32] = {
274    50, /* 0000 -> 5.0x */
275    160, /* 0001 -> 16.0x */
276    40, /* 0010 -> 4.0x */
277    100, /* 0011 -> 10.0x */
278    55, /* 0100 -> 5.5x */
279    -1, /* 0101 -> RESERVED */
280    45, /* 0110 -> 4.5x */
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    90, /* 0000 -> 9.0x */
291    110, /* 0001 -> 11.0x */
292    120, /* 0010 -> 12.0x */
293    100, /* 0011 -> 10.0x */
294    135, /* 0100 -> 13.5x */
295    115, /* 0101 -> 11.5x */
296    125, /* 0110 -> 12.5x */
297    105, /* 0111 -> 10.5x */
298    130, /* 1000 -> 13.0x */
299    150, /* 1001 -> 15.0x */
300    160, /* 1010 -> 16.0x */
301    140, /* 1011 -> 14.0x */
302    120, /* 1100 -> 12.0x */
303    155, /* 1101 -> 15.5x */
304    -1, /* 1110 -> RESERVED (13.0x) */
305    145 /* 1111 -> 14.5x */
306};
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
313struct mV_pos {
314    unsigned short mV;
315    unsigned short pos;
316};
317
318static const struct mV_pos __cpuinitdata vrm85_mV[32] = {
319    {1250, 8}, {1200, 6}, {1150, 4}, {1100, 2},
320    {1050, 0}, {1800, 30}, {1750, 28}, {1700, 26},
321    {1650, 24}, {1600, 22}, {1550, 20}, {1500, 18},
322    {1450, 16}, {1400, 14}, {1350, 12}, {1300, 10},
323    {1275, 9}, {1225, 7}, {1175, 5}, {1125, 3},
324    {1075, 1}, {1825, 31}, {1775, 29}, {1725, 27},
325    {1675, 25}, {1625, 23}, {1575, 21}, {1525, 19},
326    {1475, 17}, {1425, 15}, {1375, 13}, {1325, 11}
327};
328
329static const unsigned char __cpuinitdata mV_vrm85[32] = {
330    0x04, 0x14, 0x03, 0x13, 0x02, 0x12, 0x01, 0x11,
331    0x00, 0x10, 0x0f, 0x1f, 0x0e, 0x1e, 0x0d, 0x1d,
332    0x0c, 0x1c, 0x0b, 0x1b, 0x0a, 0x1a, 0x09, 0x19,
333    0x08, 0x18, 0x07, 0x17, 0x06, 0x16, 0x05, 0x15
334};
335
336static const struct mV_pos __cpuinitdata mobilevrm_mV[32] = {
337    {1750, 31}, {1700, 30}, {1650, 29}, {1600, 28},
338    {1550, 27}, {1500, 26}, {1450, 25}, {1400, 24},
339    {1350, 23}, {1300, 22}, {1250, 21}, {1200, 20},
340    {1150, 19}, {1100, 18}, {1050, 17}, {1000, 16},
341    {975, 15}, {950, 14}, {925, 13}, {900, 12},
342    {875, 11}, {850, 10}, {825, 9}, {800, 8},
343    {775, 7}, {750, 6}, {725, 5}, {700, 4},
344    {675, 3}, {650, 2}, {625, 1}, {600, 0}
345};
346
347static const unsigned char __cpuinitdata mV_mobilevrm[32] = {
348    0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
349    0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
350    0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
351    0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
352};
353
354

Archive Download this file



interactive