Peter Hutterer 77cc640
From 2e79f2eb5a0fbef5f0698b066938d8f1ada44698 Mon Sep 17 00:00:00 2001
55028b0
From: Fedora X Ninjas <x@fedoraproject.org>
f21d354
Date: Tue, 16 Feb 2010 11:38:17 +1000
Peter Hutterer 77cc640
Subject: [PATCH] autoconfig: select nouveau by default for NVIDIA GPUs
55028b0
55028b0
Also, don't treat DRI setup failure as an error for nouveau.
55028b0
---
c22de5d
 glx/glxdri.c                   |    7 +++++--
c22de5d
 glx/glxdri2.c                  |    7 +++++--
c22de5d
 hw/xfree86/common/xf86pciBus.c |   18 +++++++++++++++++-
f21d354
 3 files changed, 27 insertions(+), 5 deletions(-)
55028b0
55028b0
diff --git a/glx/glxdri.c b/glx/glxdri.c
Peter Hutterer 77cc640
index db3fcd5..82cdb87 100644
55028b0
--- a/glx/glxdri.c
55028b0
+++ b/glx/glxdri.c
Peter Hutterer 77cc640
@@ -979,6 +979,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
     const __DRIconfig **driConfigs;
55028b0
     const __DRIextension **extensions;
55028b0
     int i;
55028b0
+    int from = X_ERROR;
55028b0
 
55028b0
     if (!xf86LoaderCheckSymbol("DRIQueryDirectRenderingCapable") ||
55028b0
 	!DRIQueryDirectRenderingCapable(pScreen, &isCapable) ||
Peter Hutterer 77cc640
@@ -1058,7 +1059,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
 
55028b0
     screen->driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
55028b0
     if (screen->driver == NULL) {
55028b0
-	LogMessage(X_ERROR, "AIGLX error: dlopen of %s failed (%s)\n",
55028b0
+	if (!strcmp(driverName, "nouveau"))
55028b0
+	    from = X_INFO;
55028b0
+	LogMessage(from, "AIGLX error: dlopen of %s failed (%s)\n",
55028b0
 		   filename, dlerror());
55028b0
         goto handle_error;
55028b0
     }
Peter Hutterer 77cc640
@@ -1194,7 +1197,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
 
c22de5d
     free(screen);
55028b0
 
55028b0
-    LogMessage(X_ERROR, "AIGLX: reverting to software rendering\n");
55028b0
+    LogMessage(from, "AIGLX: reverting to software rendering\n");
55028b0
 
55028b0
     return NULL;
55028b0
 }
55028b0
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
Peter Hutterer 77cc640
index 0b69201..1c58023 100644
55028b0
--- a/glx/glxdri2.c
55028b0
+++ b/glx/glxdri2.c
Peter Hutterer 77cc640
@@ -709,6 +709,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
     const __DRIextension **extensions;
55028b0
     const __DRIconfig **driConfigs;
55028b0
     int i;
55028b0
+    int from = X_ERROR;
55028b0
 
c22de5d
     screen = calloc(1, sizeof *screen);
55028b0
     if (screen == NULL)
Peter Hutterer 77cc640
@@ -735,7 +736,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
 
55028b0
     screen->driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
55028b0
     if (screen->driver == NULL) {
55028b0
-	LogMessage(X_ERROR, "AIGLX error: dlopen of %s failed (%s)\n",
55028b0
+	if (!strcmp(driverName, "nouveau"))
55028b0
+	    from = X_INFO;
55028b0
+	LogMessage(from, "AIGLX error: dlopen of %s failed (%s)\n",
55028b0
 		   filename, dlerror());
55028b0
         goto handle_error;
55028b0
     }
Peter Hutterer 77cc640
@@ -827,7 +830,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
55028b0
 
c22de5d
     free(screen);
55028b0
 
55028b0
-    LogMessage(X_ERROR, "AIGLX: reverting to software rendering\n");
55028b0
+    LogMessage(from, "AIGLX: reverting to software rendering\n");
55028b0
 
55028b0
     return NULL;
55028b0
 }
c22de5d
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
Peter Hutterer 77cc640
index 3e9c455..e34e6d6 100644
c22de5d
--- a/hw/xfree86/common/xf86pciBus.c
c22de5d
+++ b/hw/xfree86/common/xf86pciBus.c
Peter Hutterer 77cc640
@@ -1123,7 +1123,23 @@ videoPtrToDriverList(struct pci_device *dev,
55028b0
 	    break;
55028b0
 	case 0x102b:		    driverList[0] = "mga";	break;
55028b0
 	case 0x10c8:		    driverList[0] = "neomagic"; break;
55028b0
-	case 0x10de: case 0x12d2:   driverList[0] = "nv";	break;
55028b0
+	case 0x10de: case 0x12d2:
55028b0
+	    switch (dev->device_id) {
55028b0
+	    /* NV1 */
55028b0
+	    case 0x0008:
55028b0
+	    case 0x0009:
55028b0
+		driverList[0] = "vesa";
55028b0
+		break;
55028b0
+	    /* NV3 */
55028b0
+	    case 0x0018:
55028b0
+	    case 0x0019:
55028b0
+		driverList[0] = "nv";
55028b0
+		break;
55028b0
+	    default:
ff26d98
+		driverList[0] = "nouveau";
55028b0
+		break;
55028b0
+	    }
55028b0
+	    break;
55028b0
 	case 0x1106:		    driverList[0] = "openchrome"; break;
f21d354
         case 0x1b36:		    driverList[0] = "qxl"; break;
55028b0
 	case 0x1163:		    driverList[0] = "rendition"; break;
55028b0
-- 
Peter Hutterer 77cc640
1.7.3.2
55028b0