[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

tdfxfb fixes - take 2



Ok, I'm attaching a better version of the previous patch, including a
fix that makes the boot logo appear correctly. I'm still trying to sort
out the hardware cursor.

-- 
Derrik Pates
dpates@dsdk12.net
dpates@voxel.net
--- linux/drivers/video/tdfxfb.c.old	2002-12-14 12:42:10.000000000 -0500
+++ linux/drivers/video/tdfxfb.c	2002-12-14 19:54:45.000000000 -0500
@@ -762,7 +762,12 @@
    tdfx_outl(SRCXY,     0);
    tdfx_outl(DSTXY,     xx | (yy << 16));
    tdfx_outl(COMMAND_2D, COMMAND_2D_H2S_BITBLT | (ROP_COPY << 24));
+#if defined(__BIG_ENDIAN)
+   /* Add the bit to automatically reorder bytes on BE systems.  -- dpates */
+   tdfx_outl(SRCFORMAT, 0x500000);
+#elif defined(__LITTLE_ENDIAN)
    tdfx_outl(SRCFORMAT, 0x400000);
+#endif
    tdfx_outl(DSTFORMAT, fmt);
    tdfx_outl(DSTSIZE,   fontwidth(p) | (fontheight(p) << 16));
    i=fontheight(p);
@@ -820,7 +825,12 @@
    tdfx_outl(COMMAND_3D, COMMAND_3D_NOP);
    tdfx_outl(COLORFORE, fgx);
    tdfx_outl(COLORBACK, bgx);
+#if defined(__BIG_ENDIAN)
+   /* Add the bit to automatically reorder bytes for BE systems.  -- dpates */
+   tdfx_outl(SRCFORMAT, 0x500000);
+#elif defined(__LITTLE_ENDIAN)
    tdfx_outl(SRCFORMAT, 0x400000);
+#endif
    tdfx_outl(DSTFORMAT, fmt);
    tdfx_outl(DSTSIZE, w | (h << 16));
    tdfx_outl(SRCXY,     0);
@@ -1620,10 +1630,6 @@
     v.blue.length  = 5;
     break;
   case 24:
-    v.red.offset=16;
-    v.green.offset=8;
-    v.blue.offset=0;
-    v.red.length = v.green.length = v.blue.length = 8;
   case 32:
     v.red.offset   = 16;
     v.green.offset = 8;
@@ -1672,7 +1678,7 @@
   fix->line_length = par->lpitch;
   fix->visual      = (par->bpp == 8) 
                      ? FB_VISUAL_PSEUDOCOLOR
-                     : FB_VISUAL_DIRECTCOLOR;
+                     : FB_VISUAL_TRUECOLOR;
 
   fix->xpanstep    = 0; 
   fix->ypanstep    = nopan ? 0 : 1;
@@ -1951,6 +1957,10 @@
 		return -ENXIO;
 	}
 
+	/* make sure PCI resource 2 (IO port range) is turned on. of course, if
+	 * this is on a secondary PCI bus (where the IO range isn't at the 
+	 * global 0-offset point), things _will_ break. */
+	pci_enable_device_bars (pdev, 1<<2);
 	fb_info.iobase = pci_resource_start (pdev, 2);
       
 	printk("fb: %s memory = %ldK\n", name, fb_info.bufbase_size >> 10);

Reply to: