1 diff -ru SVGATextMode-1.10.orig/XFREE/riva128_clock.c SVGATextMode-1.10/XFREE/riva128_clock.c
2 --- SVGATextMode-1.10.orig/XFREE/riva128_clock.c 2000-07-18 04:47:15.000000000 +0200
3 +++ SVGATextMode-1.10/XFREE/riva128_clock.c 2004-05-25 20:45:25.594991568 +0200
5 #define PCI_DEVICE_ID_NVIDIA_TNT 0x0020
6 #define PCI_DEVICE_ID_NVIDIA_TNT2 0x0028
7 #define PCI_DEVICE_ID_NVIDIA_UTNT2 0x0029
8 +#define PCI_DEVICE_ID_NVIDIA_UNKNOWN_TNT2 0x002A
9 #define PCI_DEVICE_ID_NVIDIA_VTNT2 0x002C
10 #define PCI_DEVICE_ID_NVIDIA_UVTNT2 0x002D
11 #define PCI_DEVICE_ID_NVIDIA_ITNT2 0x00A0
12 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR 0x0100
13 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR 0x0101
14 +#define PCI_DEVICE_ID_NVIDIA_QUADRO 0x0103
15 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX400 0x0110
16 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX200 0x0111
17 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO 0x0112
18 +#define PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR 0x0113
19 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS 0x0150
20 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS2 0x0151
21 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA 0x0152
22 +#define PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO 0x0153
23 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460 0x0170
24 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440 0x0171
25 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420 0x0172
26 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440SE 0x0173
27 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO 0x0174
28 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO 0x0175
29 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO32 0x0176
30 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_460GO 0x0177
31 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL 0x0178
32 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_460_GO64 0x0179
33 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_200 0x017A
34 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL 0x017B
35 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL 0x017C
36 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_410_GO16 0x017D
37 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440_AGP8x 0x0181
38 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440SE_AGP8x 0x0182
39 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX420_AGP8x 0x0183
40 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_448_GO 0x0186
41 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_488_GO 0x0187
42 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_580_XGL 0x0188
43 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_280_NVS 0x018A
44 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_380_XGL 0x018B
45 +#define PCI_DEVICE_ID_NVIDIA_IGEFORCE2 0x01a0
46 +#define PCI_DEVICE_ID_NVIDIA_IGEFORCE4_MX 0x01F0
47 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE3 0x0200
48 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI200 0x0201
49 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI500 0x0202
50 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_DCC 0x0203
51 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4600 0x0250
52 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4400 0x0251
53 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4200 0x0253
54 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL 0x0258
55 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL 0x0259
56 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL 0x025B
57 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4800 0x0280
58 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4200_AGP8x 0x0281
59 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4800SE 0x0282
60 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE4_4200GO 0x0286
61 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_700GOGL 0x028C
62 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_980XGL 0x0288
63 +#define PCI_DEVICE_ID_NVIDIA_QUADRO4_780XGL 0x0289
64 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800U 0x0301
65 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800 0x0302
66 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_2000 0x0308
67 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1000 0x0309
68 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600U 0x0311
69 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600 0x0312
70 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600SE 0x0314
71 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5600 0x031A
72 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5650 0x031B
73 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO700 0x031C
74 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200 0x0320
75 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200U 0x0321
76 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200_U 0x0322
77 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200SE 0x0323
78 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5200 0x0324
79 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5250 0x0325
80 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5200_32M_64M 0x0328
81 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_NVS_280_PCI 0x032A
82 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_500 0x032B
83 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5300 0x032C
84 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5100 0x032D
85 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900U 0x0330
86 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900 0x0331
87 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900XT 0x0332
88 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5950U 0x0333
89 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_3000 0x0338
90 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700U 0x0341
91 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700 0x0342
92 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700LE 0x0343
93 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700VE 0x0344
94 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700 0x0347
95 +#define PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700_ 0x0348
96 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 0x034C
97 +#define PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100 0x034E
99 vgaPCIInformation *vgaPCIInfo;
102 #define PRAMDAC_PLL_COEFF 0x00000508
103 #define PRAMDAC_PLL_COEFF_SELECT 0x0000050C
106 +#define PEXTDEV_BASE 0x00101000
108 #define NV3_MIN_CLOCK_IN_KHZ 25000 // Not sure about this, but it seems reasonable
109 #define NV3_MAX_CLOCK_IN_KHZ 230000
110 #define NV4_MAX_CLOCK_IN_KHZ 350000
112 static int max_clock, is_nv3, pll_coeff;
114 -/* NTSC cards have approx 14.3Mhz. Need to detect, but leave for now*/
115 -#define PLL_INPUT_FREQ 13500
116 +static int PLL_INPUT_FREQ;
120 @@ -107,79 +196,102 @@
121 #define P_MAX 4 /* Not sure about this. Could be 4 */
123 //=== Function section ===
124 -// From xc/programs/Xserver/hw/xfree86/vga256/drivers/nv/riva_hw.c in XFree86 3.3.6
125 +// From xc/programs/Xserver/hw/xfree86/drivers/nv/nv_hw.c in X11R6.7.0
127 * Calculate the Video Clock parameters for the PLL.
129 -static int CalcVClock
131 +static void CalcVClock (
138 - RIVA_HW_INST *chip*/
139 + unsigned int *pllOut
142 - unsigned lowM, highM, highP;
143 + unsigned lowM, highM;
144 unsigned DeltaNew, DeltaOld;
149 DeltaOld = 0xFFFFFFFF;
151 - VClk = (unsigned)clockIn;
155 - if (/*chip->CrystalFreqKHz*/PLL_INPUT_FREQ == 14318)
158 - highM = 14 - (/*chip->Architecture == NV_ARCH_03*/is_nv3);
162 + VClk = (unsigned)clockIn;
164 + if (/*pNv->CrystalFreqKHz*/ PLL_INPUT_FREQ == 13500) {
166 highM = 13 - (/*chip->Architecture == NV_ARCH_03*/is_nv3);
169 + highM = 14 - (/*chip->Architecture == NV_ARCH_03*/is_nv3);
172 - highP = 4 - (/*chip->Architecture == NV_ARCH_03*/is_nv3);
173 - for (P = 0; P <= highP; P ++)
175 + for (P = 0; P <= 4 - is_nv3; P++) {
177 - if ((Freq >= 128000) && (Freq <= /*chip->MaxVClockFreqKHz*/max_clock))
179 - for (M = lowM; M <= highM; M++)
181 - N = (VClk * M / /*chip->CrystalFreqKHz*/PLL_INPUT_FREQ) << P;
182 - Freq = (/*chip->CrystalFreqKHz*/PLL_INPUT_FREQ * N / M) >> P;
184 - DeltaNew = Freq - VClk;
186 - DeltaNew = VClk - Freq;
187 - if (DeltaNew < DeltaOld)
193 - DeltaOld = DeltaNew;
194 + if ((Freq >= 128000) && (Freq <= max_clock)) {
195 + for (M = lowM; M <= highM; M++) {
196 + N = ((VClk << P) * M) / /* pNv->CrystalFreqKHz */ PLL_INPUT_FREQ;
198 + Freq = ((/*pNv->CrystalFreqKHz*/ PLL_INPUT_FREQ * N) / M) >> P;
200 + DeltaNew = Freq - VClk;
202 + DeltaNew = VClk - Freq;
203 + if (DeltaNew < DeltaOld) {
204 + *pllOut = (P << 16) | (N << 8) | M;
206 + DeltaOld = DeltaNew;
212 - return (DeltaOld != 0xFFFFFFFF);
215 +static void CalcVClock2Stage (
218 + unsigned int *pllOut,
219 + unsigned int *pllBOut
222 + unsigned DeltaNew, DeltaOld;
223 + unsigned VClk, Freq;
226 + DeltaOld = 0xFFFFFFFF;
228 + *pllBOut = 0x80000401; /* fixed at x4 for now */
230 + VClk = (unsigned)clockIn;
232 + for (P = 0; P <= 6; P++) {
234 + if ((Freq >= 400000) && (Freq <= 1000000)) {
235 + for (M = 1; M <= 13; M++) {
236 + N = ((VClk << P) * M) / (PLL_INPUT_FREQ << 2);
237 + if((N >= 5) && (N <= 255)) {
238 + Freq = (((PLL_INPUT_FREQ << 2) * N) / M) >> P;
240 + DeltaNew = Freq - VClk;
242 + DeltaNew = VClk - Freq;
243 + if (DeltaNew < DeltaOld) {
244 + *pllOut = (P << 16) | (N << 8) | M;
246 + DeltaOld = DeltaNew;
254 // Set the clock to the given speed (in KHz)
255 Bool RIVA128ClockSelect( int clockspeed )
259 + int implementation = 0;
262 - int m, n, p, value;
266 pciConfigPtr pcr = NULL;
268 @@ -203,13 +315,101 @@
269 if (pcr->_device == PCI_DEVICE_ID_NVIDIA_TNT ||
270 pcr->_device == PCI_DEVICE_ID_NVIDIA_TNT2 ||
271 pcr->_device == PCI_DEVICE_ID_NVIDIA_UTNT2 ||
272 + pcr->_device == PCI_DEVICE_ID_NVIDIA_UNKNOWN_TNT2 ||
273 pcr->_device == PCI_DEVICE_ID_NVIDIA_VTNT2 ||
274 pcr->_device == PCI_DEVICE_ID_NVIDIA_UVTNT2 ||
275 - pcr->_device == PCI_DEVICE_ID_NVIDIA_ITNT2)
276 + pcr->_device == PCI_DEVICE_ID_NVIDIA_ITNT2 ||
277 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_SDR ||
278 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_DDR ||
279 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO ||
280 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX400 ||
281 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_MX200 ||
282 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_GO ||
283 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO2_MXR ||
284 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS ||
285 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_GTS2 ||
286 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE2_ULTRA ||
287 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO2_PRO ||
288 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_460 ||
289 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_440 ||
290 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX_420 ||
291 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440SE ||
292 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_440_GO ||
293 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO ||
294 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_420_GO32 ||
295 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_460GO ||
296 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_500XGL ||
297 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_460_GO64 ||
298 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_200 ||
299 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_550XGL ||
300 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_500_GOGL ||
301 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_410_GO16 ||
302 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440_AGP8x ||
303 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX440SE_AGP8x ||
304 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_MX420_AGP8x ||
305 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_448_GO ||
306 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_488_GO ||
307 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_580_XGL ||
308 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_280_NVS ||
309 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_380_XGL ||
310 + pcr->_device == PCI_DEVICE_ID_NVIDIA_IGEFORCE2 ||
311 + pcr->_device == PCI_DEVICE_ID_NVIDIA_IGEFORCE4_MX ||
312 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE3 ||
313 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI200 ||
314 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE3_TI500 ||
315 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_DCC ||
316 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4600 ||
317 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4400 ||
318 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4200 ||
319 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_900XGL ||
320 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_750XGL ||
321 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_700XGL ||
322 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4800 ||
323 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4200_AGP8x ||
324 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_TI4800SE ||
325 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE4_4200GO ||
326 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_700GOGL ||
327 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_980XGL ||
328 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO4_780XGL ||
329 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800U ||
330 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5800 ||
331 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_2000 ||
332 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1000 ||
333 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600U ||
334 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600 ||
335 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5600SE ||
336 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5600 ||
337 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5650 ||
338 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO700 ||
339 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200 ||
340 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200U ||
341 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200 ||
342 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5200SE ||
343 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5200 ||
344 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5250 ||
345 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5200_32M_64M ||
346 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_NVS_280_PCI ||
347 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_500 ||
348 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5300 ||
349 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5100 ||
350 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900U ||
351 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900 ||
352 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5900XT ||
353 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5950U ||
354 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_3000 ||
355 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700U ||
356 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700 ||
357 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700LE ||
358 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_5700VE ||
359 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700 ||
360 + pcr->_device == PCI_DEVICE_ID_NVIDIA_GEFORCE_FX_GO5700 ||
361 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_GO1000 ||
362 + pcr->_device == PCI_DEVICE_ID_NVIDIA_QUADRO_FX_1100)
365 pll_coeff = 0x00010700;
366 max_clock = NV4_MAX_CLOCK_IN_KHZ;
367 + implementation = pcr->_device & 0x0ff0;
375 + ptr2 = (int*)mmap(0, 0x1000,PROT_READ|PROT_WRITE,MAP_SHARED, fd, (off_t)(pcr->_base0) + PEXTDEV_BASE);
377 + if( ptr2 == (int*)-1 )
379 + PERROR(( "Error mmap'ing /dev/mem" ));
385 + PLL_INPUT_FREQ = (ptr2[0x00000000/4]&0x20) ? 13500 : 14318;
389 + PLL_INPUT_FREQ = (ptr2[0x00000000/4]&0x40) ? 14318 : 13500;
392 + if((implementation == 0x0170) ||
393 + (implementation == 0x0180) ||
394 + (implementation == 0x01F0) ||
395 + (implementation >= 0x0250))
397 + if(ptr2[0x00000000/4] & (1 << 22)) PLL_INPUT_FREQ = 27000;
400 + munmap(ptr2, 0x1000);
404 ptr=(int*) malloc(0x4000);
405 @@ -261,13 +488,15 @@
407 // Calculate the clock
408 //NV3ClockSelect( (float)clockspeed, &out, &m, &n, &p );
409 - CalcVClock ((float) clockspeed, 0, &out, &m, &n, &p);
411 - value = (m) + (n<<8) + (p<<16);
412 + if ((implementation == 0x0310) || (implementation == 0x0340)) {
413 + CalcVClock2Stage ((float) clockspeed, &clockout, &pll, &pllB);
415 + CalcVClock ((float) clockspeed, &clockout, &pll);
419 - PDEBUG(( "Wanted %dkHz, got %dkHz (m=%d, n=%d, p=%d, value=0x%08X)\n",
420 - clockspeed, (int)out, m, n, p, value ));
421 + PDEBUG(( "Wanted %dkHz, got %dkHz (pll=0x%08X)\n",
422 + clockspeed, (int)clockout, pll));
424 // Default value is 0x00000100 (NV3)
425 // X uses 0x10010100 (NV3) or 0x10000700 (NV4)
427 ptr[PRAMDAC_PLL_COEFF_SELECT/4] = pll_coeff; // could use |=
429 // Divide by 4 because we're dealing with integers
430 - ptr[PRAMDAC_PLL_COEFF/4] = value;
432 + ptr[PRAMDAC_PLL_COEFF/4] = pll;
433 + if ((implementation == 0x0310) || (implementation == 0x0340)) {
434 + ptr[0x00000578/4] = pllB;
438 munmap( ptr, 0x1000 );