[Nouveau] [PATCH v2 2/2] xorg/nouveau: blacklist all pre NV30 cards

Marcin Slusarz marcin.slusarz at gmail.com
Mon May 16 15:20:14 PDT 2011


Bail out early in probe, so other driver can take control of the card.
Doing it in screen_create would be too late.
---
 src/gallium/targets/xorg-nouveau/nouveau_xorg.c |   44 ++++++++++++++++++-----
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/src/gallium/targets/xorg-nouveau/nouveau_xorg.c b/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
index a25254a..5392e50 100644
--- a/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
+++ b/src/gallium/targets/xorg-nouveau/nouveau_xorg.c
@@ -38,16 +38,9 @@ static Bool nouveau_xorg_pci_probe(DriverPtr driver, int entity_num,
 static const struct pci_id_match nouveau_xorg_device_match[] = {
     { 0x10de, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
       0x00030000, 0x00ffffff, 0 },
-    { 0x12d2, PCI_MATCH_ANY, PCI_MATCH_ANY, PCI_MATCH_ANY,
-      0x00030000, 0x00ffffff, 0 },
     {0, 0, 0},
 };
 
-static SymTabRec nouveau_xorg_chipsets[] = {
-    {PCI_MATCH_ANY, "NVIDIA Graphics Device"},
-    {-1, NULL}
-};
-
 static PciChipsets nouveau_xorg_pci_devices[] = {
     {PCI_MATCH_ANY, PCI_MATCH_ANY, NULL},
     {-1, -1, NULL}
@@ -121,16 +114,49 @@ nouveau_xorg_setup(pointer module, pointer opts, int *errmaj, int *errmin)
 static void
 nouveau_xorg_identify(int flags)
 {
-    xf86PrintChipsets("nouveau2", "Driver for Modesetting Kernel Drivers",
-		      nouveau_xorg_chipsets);
+    xf86DrvMsg(0, X_INFO, "nouveau2: Gallium3D based 2D driver for NV30+ NVIDIA chipsets\n");
 }
 
+struct pcirange {
+	unsigned int low;
+	unsigned int high;
+};
+
+/* List of cards we DO NOT SUPPORT. */
+static struct pcirange NVPreNV30Chipsets[] =
+{
+  {0x0020, 0x002F}, /* NV04/05 */
+  {0x00A0, 0x00AF}, /* ? */
+  {0x0100, 0x010F}, /* NV10 */
+  {0x0110, 0x011F}, /* NV11 */
+  {0x01A0, 0x01AF}, /* NV1A */
+  {0x0150, 0x015F}, /* NV15 */
+  {0x0170, 0x017F}, /* NV17 */
+  {0x0180, 0x018F}, /* NV18 */
+  {0x01F0, 0x01FF}, /* NV1F */
+  {0x0200, 0x020F}, /* NV20 */
+  {0x02A0, 0x02AF}, /* NV2A */
+  {0x0250, 0x025F}, /* NV25 */
+  {0x0280, 0x028F}, /* NV28 */
+  {0, 0}
+};
+
+
 static Bool
 nouveau_xorg_pci_probe(DriverPtr driver,
 	  int entity_num, struct pci_device *device, intptr_t match_data)
 {
     ScrnInfoPtr scrn = NULL;
     EntityInfoPtr entity;
+    struct pcirange *cur;
+
+    if (device->vendor_id != 0x10DE)
+	return FALSE;
+
+    for (cur = &NVPreNV30Chipsets[0]; cur->low != 0; cur++) {
+	if (device->device_id >= cur->low && device->device_id <= cur->high)
+	    return FALSE;
+    }
 
     scrn = xf86ConfigPciEntity(scrn, 0, entity_num, nouveau_xorg_pci_devices,
 			       NULL, NULL, NULL, NULL, NULL);
-- 
1.7.4.1



More information about the Nouveau mailing list