[ltp] Savage IX-MV / Thinkpad T20/T21/T22 AGP incompatibility
Bryce Harrington
linux-thinkpad@linux-thinkpad.org
Fri, 21 Mar 2008 19:03:25 -0700
Hi Alex,
A couple years ago you looked into[1] a problem with certain savage
cards on a particular Intel AGP bridge, and identified as a workaround
to force it to use BusType PCI, which has been documented as a
semi-official workaround by the thinkpad community[2].
This workaround has been quite thoroughly tested by Ubuntu users[3]. In
the spirit of minimizing xorg.conf hacking they need to do, I'd like to
put this into Ubuntu's savage driver. I've made a first cut at a
patch[4], and would appreciate if you could take a look. In particular,
while I think I have an adequate check for the device PCI ID, I'm
uncertain how to test the host bridge id?
Thanks,
Bryce
1: http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2006-March/032672.html
2: http://www.thinkwiki.org/wiki/Problem_with_video_related_system_lockup
3: https://bugs.launchpad.net/ubuntu/hardy/+source/xserver-xorg-video-savage/+bug/33617
4: http://launchpadlibrarian.net/12802717/03_s3_savage_ix_mv_agp_bridge_incompat.diff
diff -Nurp xserver-xorg-video-savage-2.1.3-patched/src/savage_driver.c xserver-xorg-video-savage-2.1.3-working/src/savage_driver.c
--- xserver-xorg-video-savage-2.1.3-patched/src/savage_driver.c 2008-03-21 17:27:16.000000000 -0700
+++ xserver-xorg-video-savage-2.1.3-working/src/savage_driver.c 2008-03-21 18:34:57.000000000 -0700
@@ -1535,6 +1535,25 @@ static Bool SavagePreInit(ScrnInfoPtr pS
"Invalid BusType option, using %s DMA\n",
psav->IsPCI ? "PCI" : "AGP");
}
+ } else {
+ /* Thinkpads T10, T21, T22 fail in AGP mode with this specific card
+ * due to an AGP bridge incompatibility (LP: #33617)
+ *
+ * S3 Inc. 86C270-294 Savage/IX-MV (rev 13)
+ * (chip 5333:8c12 card 1014:017f)
+ *
+ * "Intel 440BX/ZX/DX - 82443BX/ZX/DX" AGP bridge
+ * (8086:7192)
+ * TODO: Need to also verify the bridge ID
+ */
+ if (VENDOR_ID(psav->PciInfo) == 0x1014 &&
+ DEVICE_ID(psav->PciInfo) == 0x017f
+ /* && bridge == 8086:7192 (TODO: how to do this?) */
+ )
+ {
+ psav->IsPCI = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "BusType set to PCI (see LP: #33617)\n");
+ }
}
psav->AgpDMA = !psav->IsPCI;