• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/arch/i386/kernel/cpu/cpufreq/
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 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 */
59static const 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
78static const 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 */
100static const 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 */
122static const 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
141static const 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 */
163static const 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
199static const 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
238static const int __initdata  nehemiah_clock_ratio[32] = {
239	100, /* 0000 -> 10.0x */
240	160, /* 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	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 (13.0x) */
270	120, /* 1111 -> 12.0x */
271};
272
273static const int __initdata 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 __initdata 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 __initdata 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 __initdata 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 __initdata 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