]> git.pld-linux.org Git - packages/XFree86.git/blob - XFree86-tdfxdrmfixes.patch
- outdated
[packages/XFree86.git] / XFree86-tdfxdrmfixes.patch
1 --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c.chmou  Tue Sep 19 17:34:43 2000
2 +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_dri.c        Tue Sep 19 18:30:25 2000
3 @@ -127,9 +127,10 @@
4        }
5      }
6      if (i!=numConfigs) {
7 -      ErrorF("Incorrect initialization of visuals\n");
8 +      xf86DrvMsg(pScreen->myNum, X_ERROR,
9 +                 "Incorrect initialization of visuals\n");
10        return FALSE;
11 -    } else ErrorF("Created %d visuals\n", numConfigs);
12 +    }
13      break; /* 16bpp */
14  
15    case 24:
16 @@ -224,7 +225,7 @@
17        xf86DrvMsg(pScreen->myNum, X_ERROR,
18                   "Incorrect initialization of visuals\n");
19        return FALSE;
20 -    } else ErrorF("Created %d visuals\n", numConfigs);
21 +    }
22      break;
23    }
24    pTDFX->numVisualConfigs = numConfigs;
25 @@ -263,12 +264,21 @@
26  
27    switch (pScrn->bitsPerPixel) {
28    case 8:
29 +    xf86DrvMsg(pScreen->myNum, X_ERROR,
30 +                 "DRI not supported in 8 bpp mode, disabling DRI.\n");
31      return FALSE;
32    case 16:
33      break;
34    case 24:
35 +    xf86DrvMsg(pScreen->myNum, X_ERROR,
36 +                 "DRI not supported in 24 bpp mode, disabling DRI.\n");
37 +    return FALSE;
38    case 32:
39 -    if (pTDFX->ChipType<=PCI_CHIP_VOODOO3) return FALSE;
40 +     if (pTDFX->ChipType<=PCI_CHIP_VOODOO3) {
41 +       xf86DrvMsg(pScreen->myNum, X_ERROR,
42 +                  "DRI requires Voodoo3 or later, disabling DRI.\n");
43 +       return FALSE;
44 +     }
45    }
46  
47      /* Check that the GLX, DRI, and DRM modules have been loaded by testing
48 @@ -295,8 +305,12 @@
49    }
50  
51    pDRIInfo = DRICreateInfoRec();
52 -  if (!pDRIInfo)
53 -     return FALSE;
54 +  if (!pDRIInfo) {
55 +    xf86DrvMsg(pScreen->myNum, X_ERROR,
56 +               "DRICreatInfoRect() failed, disabling DRI.\n");
57 +    return FALSE;
58 +  }
59 +
60    pTDFX->pDRIInfo = pDRIInfo;
61  
62    pDRIInfo->drmDriverName = TDFXKernelDriverName;
63 @@ -336,13 +350,14 @@
64     * in the SAREA header
65     */
66    if (sizeof(XF86DRISAREARec)+sizeof(TDFXSAREAPriv)>SAREA_MAX) {
67 -     xf86DrvMsg(pScreen->myNum, X_ERROR, "Data does not fit in SAREA\n");
68 +    xf86DrvMsg(pScreen->myNum, X_ERROR, "Data does not fit in SAREA\n");
69      return FALSE;
70    }
71    pDRIInfo->SAREASize = SAREA_MAX;
72  #endif
73  
74    if (!(pTDFXDRI = (TDFXDRIPtr)xnfcalloc(sizeof(TDFXDRIRec),1))) {
75 +    xf86DrvMsg(pScreen->myNum, X_ERROR, "DRI memory allocation failed, disabling DRI.\n");
76      DRIDestroyInfoRec(pTDFX->pDRIInfo);
77      pTDFX->pDRIInfo=0;
78      return FALSE;
79 @@ -363,6 +378,8 @@
80      pDRIInfo->devPrivate=0;
81      DRIDestroyInfoRec(pTDFX->pDRIInfo);
82      pTDFX->pDRIInfo=0;
83 +    xf86DrvMsg(pScreen->myNum, X_ERROR, "DRIScreenInit failed, disabling DRI.\n");
84 +
85      return FALSE;
86    }
87  
88 @@ -391,6 +408,7 @@
89    if (drmAddMap(pTDFX->drmSubFD, (drmHandle)pTDFX->MMIOAddr[0], 
90                 pTDFXDRI->regsSize, DRM_REGISTERS, 0, &pTDFXDRI->regs)<0) {
91      TDFXDRICloseScreen(pScreen);
92 +    xf86DrvMsg(pScreen->myNum, X_ERROR, "drmAddMap failed, disabling DRI.\n");
93      return FALSE;
94    }
95    xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Registers = 0x%08lx\n",
96 @@ -398,6 +416,7 @@
97  
98    if (!(TDFXInitVisualConfigs(pScreen))) {
99      TDFXDRICloseScreen(pScreen);
100 +    xf86DrvMsg(pScreen->myNum, X_ERROR, "TDFXInitVisualConfigs failed, disabling DRI.\n");
101      return FALSE;
102    }
103    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "visual configs initialized\n" );
104 --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c.chmou       Tue Sep 19 17:34:43 2000
105 +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_driver.c     Tue Sep 19 18:30:25 2000
106 @@ -636,7 +636,6 @@
107    ClockRangePtr clockRanges;
108    int i;
109    MessageType from;
110 -  char *mod=0, *reqSym=0;
111    int flags24;
112    rgb defaultWeight = {0, 0, 0};
113    pciVideoPtr match;
114 @@ -663,7 +662,7 @@
115  
116    if (flags & PROBE_DETECT) {
117      TDFXProbeDDC(pScrn, pTDFX->pEnt->index);
118 -    return FALSE;
119 +    return TRUE;
120    }
121    
122    /* The vgahw module should be loaded here when needed */
123 @@ -1195,7 +1194,10 @@
124      maxm=24;
125    } else {
126      minm=1;
127 -    maxm=64;
128 +    maxm=57; /* This used to be 64, alas it seems the last 8 (funny that ?)
129 +              * values cause jittering at lower resolutions. I've not done
130 +              * any calculations to what the adjustment affects clock ranges,
131 +              * but I can still run at 1600x1200@75Hz */
132    }
133    for (n=1; n<256; n++) {
134      f_cur=REFFREQ*(n+2);
135 @@ -1604,15 +1606,6 @@
136    pTDFX = TDFXPTR(pScrn);
137    pTDFX->stride = pScrn->displayWidth*pTDFX->cpp;
138  
139 -  /* Layout the memory.  Start with all the ram */
140 -  memRemaining=pScrn->videoRam<<10;
141 -  /* Remove the cursor space */
142 -  memRemaining-=4096;
143 -  /* Remove the main screen and offscreen pixmaps */
144 -  memRemaining-=pTDFX->stride*(pScrn->virtualY+128);
145 -  /* Remove one scanline for page alignment */
146 -  memRemaining-=4095;
147 -  /* Remove the back and Z buffers */
148    if (pTDFX->cpp!=3) {
149      screenSizeInTiles=calcBufferSize(pScrn->virtualX, pScrn->virtualY,
150                                      TRUE, pTDFX->cpp);
151 @@ -1622,41 +1615,77 @@
152      screenSizeInTiles=calcBufferSize(pScrn->virtualX, pScrn->virtualY,
153                                      TRUE, 4);
154    }
155 -  memRemaining-=screenSizeInTiles*2;
156 -
157 -  /* Give all the rest to textures, rounded down to a page */
158 -  texSize=memRemaining&~0xFFF;
159 -
160 -  /* Make sure fifo has CMDFIFO_PAGES<fifoSize<255 pages */
161 -  if (memRemaining-texSize<CMDFIFO_PAGES<<12)
162 -    texSize=(memRemaining-(CMDFIFO_PAGES<<12))&~0xFFF;
163 -  /* Fifo uses the remaining space up to 255 pages */
164 -  fifoSize = (memRemaining-texSize)&~0xFFF;
165 -  if (fifoSize>255<<12) fifoSize=255<<12;
166 -
167 -  /* Assign the variables */
168 -  /* Cursor */
169 -  pTDFX->cursorOffset=0; /* Size 1024 bytes */
170 -
171 -  /* Point the fifo at the first page */
172 +  memRemaining=((pScrn->videoRam<<10) - 1) &~ 0xFFF;
173 +  /* Note that a page is 4096 bytes, and a  */
174 +  /* tile is 32 x 128 = 4096 bytes.  So,    */
175 +  /* page and tile boundaries are the same  */
176 +  /* Place the depth offset first, forcing  */
177 +  /* it to be on an *odd* page boundary.    */
178 +  pTDFX->depthOffset = (memRemaining - screenSizeInTiles) &~ 0xFFF;
179 +  if ((pTDFX->depthOffset & (0x1 << 12)) == 0) {
180 +#if    0
181 +      xf86DrvMsg(pScrn->scrnIndex, X_INFO,
182 +                 "Changing depth offset from 0x%08x to 0x%08x\n",
183 +                 pTDFX->depthOffset,
184 +                 pTDFX->depthOffset - (0x1 << 12));
185 +#endif
186 +      pTDFX->depthOffset -= (0x1 << 12);
187 +  }
188 +  /* Now, place the back buffer, forcing it */
189 +  /* to be on an *even* page boundary.      */
190 +  pTDFX->backOffset = (pTDFX->depthOffset - screenSizeInTiles) &~ 0xFFF;
191 +  if (pTDFX->backOffset & (0x1 << 12)) {
192 +#if    0
193 +      xf86DrvMsg(pScrn->scrnIndex, X_INFO,
194 +                 "Changing back offset from 0x%08x to 0x%08x\n",
195 +                 pTDFX->backOffset,
196 +                 pTDFX->backOffset - (0x1 << 12));
197 +#endif
198 +      pTDFX->backOffset -= (0x1 << 12);
199 +  }
200 +  /* Now, place the front buffer, forcing   */
201 +  /* it to be on a page boundary too, just  */
202 +  /* for giggles.                           */
203 +  pTDFX->fbOffset
204 +      = (pTDFX->backOffset - (pScrn->virtualY+128)*pTDFX->stride) &~ 0xFFF;
205 +  /* Give the cmd fifo at least             */
206 +  /* CMDFIFO_PAGES pages, but no more than  */
207 +  /* 255.                                   */
208 +  fifoSize = ((255 <= CMDFIFO_PAGES) ? 255 : CMDFIFO_PAGES) << 12;
209 +  /* We give 4096 bytes to the cursor, fifoSize to the */
210 +  /* FIFO, and everything to textures.                 */
211 +  texSize = (pTDFX->fbOffset - fifoSize - 4096);
212 +  pTDFX->texOffset = pTDFX->fbOffset - texSize;
213 +  pTDFX->texSize = texSize;
214    pTDFX->fifoOffset = 4096;
215    pTDFX->fifoSize = fifoSize;
216 -
217 -  /* Textures */
218 -  pTDFX->texOffset = pTDFX->fifoOffset+fifoSize;
219 -  pTDFX->texSize = texSize;
220 -
221 -  /* Frame buffer */
222 -  pTDFX->fbOffset=pTDFX->texOffset+pTDFX->texSize;
223 -
224 -  /* Back buffer */
225 -  pTDFX->backOffset=pTDFX->fbOffset+(pScrn->virtualY+128)*pTDFX->stride;
226 -  /* Round off to a page */
227 -  pTDFX->backOffset=(pTDFX->backOffset+4095)&~0xFFF;
228 -
229 -  /* Depth buffer */
230 -  pTDFX->depthOffset=pTDFX->backOffset+screenSizeInTiles;
231 -
232 +  pTDFX->cursorOffset = 0;
233 +#if    0
234 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
235 +             "Cursor Offset: [0x%08X,0x%08X)\n",
236 +             pTDFX->cursorOffset,
237 +             pTDFX->cursorOffset+1024);
238 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
239 +             "Fifo Offset: [0x%08X, 0x%08X)\n",
240 +             pTDFX->fifoOffset,
241 +             pTDFX->fifoOffset+fifoSize);
242 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
243 +             "Texture Offset: [0x%08X, 0x%08X)\n",
244 +             pTDFX->texOffset,
245 +             pTDFX->texOffset + texSize);
246 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
247 +             "Front Buffer Offset: [0x%08X, 0x%08X)\n",
248 +             pTDFX->fbOffset,
249 +             pTDFX->fbOffset + (pScrn->virtualY+128)*pTDFX->stride);
250 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
251 +             "BackOffset: [0x%08X, 0x%08X)\n",
252 +             pTDFX->backOffset,
253 +             pTDFX->backOffset+screenSizeInTiles);
254 +  xf86DrvMsg(pScrn->scrnIndex, X_INFO,
255 +             "DepthOffset: [0x%08X, 0x%08X)\n",
256 +             pTDFX->depthOffset,
257 +             pTDFX->depthOffset+screenSizeInTiles);
258 +#endif /* 0/1 */
259    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Textures Memory %0.02f MB\n",
260              (float)texSize/1024.0/1024.0);
261  }
262 --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_accel.c.chmou        Tue Sep 19 17:34:43 2000
263 +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_accel.c      Tue Sep 19 18:30:25 2000
264 @@ -163,12 +163,22 @@
265    } else {
266      int chip;
267      int stride, bits;
268 +    int TileAperturePitch, lg2TileAperturePitch;
269      if (pTDFX->cpp==2) stride=pTDFX->stride;
270      else stride=4*pTDFX->stride/pTDFX->cpp;
271      bits=pTDFX->backOffset>>12;
272 +    for (lg2TileAperturePitch = 0, TileAperturePitch = 1024;
273 +         (lg2TileAperturePitch < 5) &&
274 +             TileAperturePitch < stride;
275 +         lg2TileAperturePitch += 1, TileAperturePitch <<= 1);
276 +#if    0
277 +    fprintf(stderr, "Using %d (== lg2(%d)-10) for tile aperture pitch\n",
278 +            lg2TileAperturePitch, TileAperturePitch);
279 +    fprintf(stderr, "stride == %d\n", stride);
280 +#endif
281      for (chip=0; chip<pTDFX->numChips; chip++) {
282        TDFXWriteChipLongMMIO(pTDFX, chip, LFBMEMORYCONFIG, (bits&0x1FFF) |
283 -                           SST_RAW_LFB_ADDR_STRIDE_4K | 
284 +                           SST_RAW_LFB_ADDR_STRIDE(lg2TileAperturePitch) | 
285                             ((bits&0x6000)<<10) |
286                             ((stride+127)/128)<<SST_RAW_LFB_TILE_STRIDE_SHIFT);
287      }
288 --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c.chmou  Tue Sep 19 17:34:43 2000
289 +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c        Tue Sep 19 18:30:25 2000
290 @@ -1,4 +1,3 @@
291 -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfx_sli.c,v 1.2 2000/06/17 18:23:23 dawes Exp $ */
292  
293  #include "xf86.h"
294  #include "xf86_ansic.h"
295 --- XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfxdefs.h.chmou  Tue Sep 19 17:34:43 2000
296 +++ XFree86-4.0.1/xc/programs/Xserver/hw/xfree86/drivers/tdfx/tdfxdefs.h        Tue Sep 19 18:30:25 2000
297 @@ -52,8 +52,26 @@
298  
299  #define MEM_TYPE_SGRAM  0
300  #define MEM_TYPE_SDRAM  1
301 +/*
302 + * SST_RAW_LFB_ADDR_STRIDE(Lg2SizeInK) takes the
303 + * lfbMemoryConfig value for SGRAMStrideInTiles.  This
304 + * is given by this table:
305 + *  SGRAMStrideInBytes        lfbMemoryConfig Value
306 + *  ==================        =====================
307 + *          1k                          0
308 + *          2k                          1
309 + *          4k                          2
310 + *          8k                          3
311 + *         16k                          4
312 + *
313 + * FWIW, the right hand column is log2(left hand column)-10
314 + */
315  #define SST_RAW_LFB_ADDR_STRIDE_SHIFT 13
316 -#define SST_RAW_LFB_ADDR_STRIDE_4K 0x2<<SST_RAW_LFB_ADDR_STRIDE_SHIFT
317 +#define SST_RAW_LFB_ADDR_STRIDE(Lg2SizeInK) \
318 +               ((Lg2SizeInK)<<SST_RAW_LFB_ADDR_STRIDE_SHIFT)
319 +#define SST_RAW_LFB_ADDR_STRIDE_4K SST_RAW_LFB_ADDR_STRIDE(2)
320 +#define SST_RAW_LFB_ADDR_STRIDE_8K SST_RAW_LFB_ADDR_STRIDE(3)
321 +#define SST_RAW_LFB_ADDR_STRIDE_16K SST_RAW_LFB_ADDR_STRIDE(4)
322  #define SST_RAW_LFB_TILE_STRIDE_SHIFT 16
323  
324  #define BLIT_LEFT 1
This page took 0.10573 seconds and 3 git commands to generate.