aboutsummaryrefslogtreecommitdiffstats
path: root/x11/XFree86
diff options
context:
space:
mode:
authorjmz <jmz@FreeBSD.org>2000-10-23 20:32:03 +0800
committerjmz <jmz@FreeBSD.org>2000-10-23 20:32:03 +0800
commita21a755b27e475f613d989f8425902005a0bb073 (patch)
tree27e86d15e2ec76f90a939b354ac2674ceb9a3798 /x11/XFree86
parent4e46aeca42976e9410fd948f418b027cfdab9aeb (diff)
downloadfreebsd-ports-gnome-a21a755b27e475f613d989f8425902005a0bb073.tar.gz
freebsd-ports-gnome-a21a755b27e475f613d989f8425902005a0bb073.tar.zst
freebsd-ports-gnome-a21a755b27e475f613d989f8425902005a0bb073.zip
Add support for the Savage IX/MV chipset.
Submitted by: Andreas Klemm <andreas@klemm.gtn.com>
Diffstat (limited to 'x11/XFree86')
-rw-r--r--x11/XFree86/files/patch-i208
1 files changed, 208 insertions, 0 deletions
diff --git a/x11/XFree86/files/patch-i b/x11/XFree86/files/patch-i
new file mode 100644
index 000000000000..c042eae5760a
--- /dev/null
+++ b/x11/XFree86/files/patch-i
@@ -0,0 +1,208 @@
+S3 Savage/MX and Savage/IX patches for XFree86 3.3.6 post fix-08
+
+http://www.probo.com/timr/savagemx.html
+
+from: Sun Oct 22 10:12:06 CEST 2000
+
+--- programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_cursor.c.orig Sun Oct 22 09:52:21 2000
++++ programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_cursor.c Fri Sep 1 22:12:56 2000
+@@ -250,7 +250,7 @@
+ /* VerticalRetraceWait(); */
+
+ /* turn cursor off */
+- S3VHideCursor();
++ S3SAVHideCursor();
+
+ /* move cursor off-screen */
+ outb(vgaCRIndex, 0x46);
+--- programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_driver.c.orig Sun Oct 22 09:52:21 2000
++++ programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_driver.c Fri Sep 29 23:19:23 2000
+@@ -94,6 +94,7 @@
+ static void S3SAVRestore();
+ static void S3SAVAdjust();
+ static void S3SAVFbInit();
++static int S3SAVPitchAdjust();
+ void S3SAVSetRead();
+ void S3SAVAccelInit();
+ void S3SAVInitialize2DEngine();
+@@ -721,12 +722,12 @@
+
+ /* Restore the desired video mode with CR67 */
+
+- outb(vgaCRIndex, 0x67);
+ #if 0
++ outb(vgaCRIndex, 0x67);
+ cr67 = inb(vgaCRReg) & 0xf; /* Possible hardware bug on VX? */
+-#endif
+ outb(vgaCRReg, 0x50 | cr67);
+ usleep(10000);
++#endif
+ outb(vgaCRIndex, 0x67);
+ outb(vgaCRReg, restore->CR67 & ~0x0c); /* Don't enable STREAMS yet */
+
+@@ -745,9 +746,11 @@
+ outb(vgaCRReg, restore->CR51);
+
+ /* Memory timings */
+- outb(vgaCRIndex, 0x36);
++ outb(vgaCRIndex, 0x36);
+ outb(vgaCRReg, restore->CR36);
+- outb(vgaCRIndex, 0x68);
++ outb(vgaCRIndex, 0x60);
++ outb(vgaCRReg, restore->CR60);
++ outb(vgaCRIndex, 0x68);
+ outb(vgaCRReg, restore->CR68);
+ outb(vgaCRIndex, 0x69);
+ outb(vgaCRReg, restore->CR69);
+@@ -764,8 +767,11 @@
+ outb(vgaCRReg, restore->CR90);
+ outb(vgaCRIndex, 0x91);
+ outb(vgaCRReg, restore->CR91);
+- outb(vgaCRIndex, 0xB0); /* Savage4 config3 */
+- outb(vgaCRReg, restore->CRB0);
++ if( s3vPriv.chip == S3_SAVAGE4 )
++ {
++ outb(vgaCRIndex, 0xB0); /* Savage4 config3 */
++ outb(vgaCRReg, restore->CRB0);
++ }
+
+ outb(vgaCRIndex, 0x32);
+ outb(vgaCRReg, restore->CR32);
+@@ -981,6 +987,8 @@
+ save->CR53 = inb(vgaCRReg);
+ outb(vgaCRIndex, 0x58);
+ save->CR58 = inb(vgaCRReg);
++ outb(vgaCRIndex, 0x60);
++ save->CR60 = inb(vgaCRReg);
+ outb(vgaCRIndex, 0x66);
+ save->CR66 = inb(vgaCRReg);
+ outb(vgaCRIndex, 0x67);
+@@ -1135,10 +1143,29 @@
+ }
+
+
++/*
++ * This function adjusts the pitch to a multiple of 16 pixels.
++ */
++
++static int
++S3SAVPitchAdjust( void )
++{
++ int pitch = vga256InfoRec.virtualX;
++
++ if( pitch % 16 != 0 )
++ {
++ pitch = (pitch + 15) & ~15;
++
++ ErrorF("%s %s: %s: Display width padded to %d bytes.\n",
++ XCONFIG_PROBED, vga256InfoRec.name, vga256InfoRec.chipset,
++ pitch);
++ }
++ return pitch;
++}
++
++
+ /*
+- * This is the main probe function for the virge chipsets.
+- * Right now, I have taken a shortcut and get most of the info from
+- * PCI probing.
++ * This is the main probe function for the Savage chipsets.
+ */
+
+ static Bool
+@@ -1511,6 +1538,8 @@
+ S3V.ChipLinearBase = vga256InfoRec.MemBase;
+ S3V.ChipLinearSize = vga256InfoRec.videoRam * 1024;
+
++ vgaSetPitchAdjustHook(S3SAVPitchAdjust);
++
+ return TRUE;
+ }
+
+@@ -1782,9 +1811,9 @@
+ outb(vgaCRIndex, 0x3a);
+ tmp = inb(vgaCRReg);
+ if(!OFLG_ISSET(OPTION_PCI_BURST_ON, &vga256InfoRec.options))
+- new->CR3A = tmp | 0x95; /* ENH 256, no PCI burst! */
++ new->CR3A = tmp | 0x90; /* ENH 256, no PCI burst! */
+ else
+- new->CR3A = (tmp & 0x7f) | 0x15; /* ENH 256, PCI burst */
++ new->CR3A = (tmp & 0x7f) | 0x10; /* ENH 256, PCI burst */
+
+ new->CR53 &= ~0x08; /* Enables MMIO */
+ new->CR31 = 0x8c; /* Dis. 64k window, en. ENH maps */
+@@ -1806,12 +1835,22 @@
+
+ dclk = vga256InfoRec.clock[mode->Clock];
+ new->CR67 = 0x00; /* Defaults */
+- new->SR15 = 0x03 | 0x80;
++ if( s3vPriv.chip != S3_SAVAGE2000 )
++ new->SR15 = 0x03 | 0x80;
++ else
++ /* One-cycle writes broken on Savage2000? */
++ new->SR15 = 0x03;
+ new->SR18 = 0x00;
+ new->CR43 = 0x00;
+ new->CR45 = 0x00;
+ new->CR65 = 0x00;
+
++ outb(vgaCRIndex, 0x60);
++ new->CR60 = inb(vgaCRReg);
++
++ if( s3vPriv.chip == S3_SAVAGE_MX )
++ new->CR60 = 0x09;
++
+ outb(vgaCRIndex, 0x40);
+ new->CR40 = inb(vgaCRReg) & ~0x01;
+
+@@ -1852,16 +1891,19 @@
+
+ {
+ if (vgaBitsPerPixel == 8) {
+- if (dclk <= 110000) new->CR67 = 0x00; /* 8bpp, 135MHz */
+- else new->CR67 = 0x10; /* 8bpp, 220MHz */
++ new->CR67 = 0x00; /* 8bpp, 220MHz */
+ }
+ else if ((vgaBitsPerPixel == 16) && (vga256InfoRec.weight.green == 5)) {
+- if (dclk <= 110000) new->CR67 = 0x20; /* 15bpp, 135MHz */
+- else new->CR67 = 0x30; /* 15bpp, 220MHz */
++ if( s3vPriv.chip == S3_SAVAGE_MX )
++ new->CR67 = 0x30; /* 15bpp, 220MHz */
++ else
++ new->CR67 = 0x20;
+ }
+ else if (vgaBitsPerPixel == 16) {
+- if (dclk <= 110000) new->CR67 = 0x40; /* 16bpp, 135MHz */
+- else new->CR67 = 0x50; /* 16bpp, 220MHz */
++ if( s3vPriv.chip == S3_SAVAGE_MX )
++ new->CR67 = 0x50; /* 16bpp, 220MHz */
++ else
++ new->CR67 = 0x40;
+ }
+ else if ((vgaBitsPerPixel == 24) || (vgaBitsPerPixel == 32)) {
+ new->CR67 = 0xd0; /* 24bpp, 135MHz */
+@@ -1967,8 +2009,12 @@
+ else
+ new->CR50 |= 0xC1; /* default to use GlobalBD */
+
+- new->CR33 = 0x20;
++ if( s3vPriv.chip == S3_SAVAGE2000 )
++ new->CR33 = 0x08;
++ else
++ new->CR33 = 0x20;
+
++ new->std.CRTC[0x17] = 0xeb;
+
+ /* Now we handle various XConfig memory options and others */
+
+--- programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_driver.h.orig Sun Oct 22 09:52:21 2000
++++ programs/Xserver/hw/xfree86/vga256/drivers/s3_savage/s3sav_driver.h Sat Sep 2 02:57:01 2000
+@@ -25,7 +25,7 @@
+ unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C;
+ unsigned char CR40, CR42, CR43, CR45;
+ unsigned char CR50, CR51, CR53, CR58, CR5B, CR5D, CR5E;
+- unsigned char CR65, CR66, CR67, CR68, CR69, CR6F; /* Video attrib. */
++ unsigned char CR60, CR65, CR66, CR67, CR68, CR69, CR6F; /* Video attrib. */
+ unsigned char CR86, CR88;
+ unsigned char CR90, CR91, CRB0;
+ unsigned char ColorStack[8]; /* S3 hw cursor color stack CR4A/CR4B */