[Openchrome-devel] xf86-video-openchrome: 2 commits - configure.ac src/via_driver.c src/via_driver.h src/via_xvmc.c

Kevin Brace kevinbrace at kemper.freedesktop.org
Tue Jan 2 22:31:03 UTC 2018


 configure.ac     |    2 
 src/via_driver.c |  135 +++++++++++++++++++++++++++++++++++++++----------------
 src/via_driver.h |    2 
 src/via_xvmc.c   |    3 -
 4 files changed, 101 insertions(+), 41 deletions(-)

New commits:
commit cc8876c1ad163560704d2539ce0e44497f14334b
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Tue Jan 2 16:30:29 2018 -0600

    Version bumped to 0.6.165
    
    OpenChrome DDX will now search for both OpenChrome DRM and “legacy”
    VIA DRM. Moving forward, only OpenChrome DRM will be actively developed.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/configure.ac b/configure.ac
index fae6288..7834eea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ(2.57)
 AC_INIT([xf86-video-openchrome],
-        [0.6.164],
+        [0.6.165],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome],
         [xf86-video-openchrome])
 
commit 55e380abc1d7295b3323af4df61950bf28c3c53a
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Tue Jan 2 16:26:01 2018 -0600

    Search for both OpenChrome DRM and VIA DRM
    
    As a temporary solution, the search for VIA DRM was dropped in favor of
    OpenChrome DRM. Code was rewritten to look for OpenChrome DRM first and
    then look for VIA DRM. This is primarily meant for legacy platforms that
    still use VIA DRM.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_driver.c b/src/via_driver.c
index 2771fa1..db25254 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -65,8 +65,9 @@ typedef struct
 	int patchlevel;
 } ViaDRMVersion;
 
-static const ViaDRMVersion drmExpected = { 1, 3, 0 };
-static const ViaDRMVersion drmCompat = { 3, 1, 0 };
+static const ViaDRMVersion drmVIADRMExpected = { 1, 3, 0 };
+static const ViaDRMVersion drmVIADRMCompat = { 3, 0, 0 };
+static const ViaDRMVersion drmOpenChromeDRMVersion = { 3, 0, 0 };
 
 /* Prototypes. */
 static void VIAIdentify(int flags);
@@ -1134,58 +1135,116 @@ VIAPreInit(ScrnInfoPtr pScrn, int flags)
     pVia->KMS = FALSE;
 #ifdef HAVE_DRI
     busId = DRICreatePCIBusID(pVia->PciInfo);
+
+    /* Look for OpenChrome DRM first. */
+    /* KMS supports needs to be present for OpenChrome DRM to
+     * function properly.*/
     pVia->drmmode.fd = drmOpen("openchrome", busId);
     if (pVia->drmmode.fd != -1) {
-        if (!drmCheckModesettingSupported(busId)) {
-            xf86DrvMsg(-1, X_INFO, "[drm] KMS supported\n");
-            pVia->KMS = TRUE;
-        } else
-            xf86DrvMsg(-1, X_INFO, "[drm] KMS not enabled\n");
-
+        xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                    "OpenChrome DRM detected.\n");
         drmVer = drmGetVersion(pVia->drmmode.fd);
         if (drmVer) {
             pVia->drmVerMajor = drmVer->version_major;
             pVia->drmVerMinor = drmVer->version_minor;
-            pVia->drmVerPL = drmVer->version_patchlevel;
+            pVia->drmVerPatchLevel = drmVer->version_patchlevel;
             drmFreeVersion(drmVer);
-
             xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                        "[drm] OpenChrome DRM Interface Version: %d.%d.%d\n",
-                        pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPL);
-
-            /* DRI2 or DRI1 support */
-            if ((pVia->drmVerMajor < drmExpected.major) ||
-                (pVia->drmVerMajor > drmCompat.major) ||
-               ((pVia->drmVerMajor == drmExpected.major) &&
-                (pVia->drmVerMinor < drmExpected.minor))) {
-                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
-                            "[drm] Kernel drm is not compatible with this driver.\n"
-                            "[drm] Kernel drm version is %d.%d.%d, "
-                            "and I can work with versions %d.%d.x - %d.x.x.\n"
-                            "[drm] Update either this 2D driver or your kernel DRM. "
-                            "Disabling DRI.\n", pVia->drmVerMajor, pVia->drmVerMinor,
-                            pVia->drmVerPL, drmExpected.major, drmExpected.minor,
-                            drmCompat.major);
-            } else {
-                /* DRI2 or DRI1 support */
-                if (pVia->drmVerMajor < drmCompat.major) {
-                    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "DRI 1 api supported\n");
-                    pVia->directRenderingType = DRI_1;
-                } else {
-                    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "DRI 2 api not supported yet\n");
+                        "OpenChrome DRM Version: %d.%d.%d\n",
+                        pVia->drmVerMajor, pVia->drmVerMinor,
+                        pVia->drmVerPatchLevel);
+
+            if ((pVia->drmVerMajor > drmOpenChromeDRMVersion.major) ||
+                ((pVia->drmVerMajor == drmOpenChromeDRMVersion.major) &&
+                (pVia->drmVerMinor >= drmOpenChromeDRMVersion.minor))) {
+                if (!drmCheckModesettingSupported(busId)) {
+                    pVia->KMS = TRUE;
                     pVia->directRenderingType = DRI_2;
                     pVia->NoAccel = TRUE;
+                    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                                "KMS is supported by "
+                                "OpenChrome DRM.\n");
+                } else {
+                    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                                "KMS is not available.\n");
+                    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                                "Disabling OpenChrome DRM support.\n");
                 }
+            } else {
+                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                            "Unsupported version of OpenChrome DRM "
+                            "detected.\n");
+                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                            "Only OpenChrome DRM Version %d.%d or "
+                            "later is supported.\n",
+                            drmOpenChromeDRMVersion.major,
+                            drmOpenChromeDRMVersion.minor);
+                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                            "Disabling OpenChrome DRM support.\n");
             }
         } else {
-            xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Could not get DRM driver version\n");
+            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                        "Not able to obtain OpenChrome DRM version.\n");
+            xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                        "Disabling OpenChrome DRM support.\n");
         }
-    } else {
-        xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-                    "[drm] Failed to open DRM device for %s: %s\n",
-                    busId, strerror(errno));
     }
+
     free(busId);
+
+    /* Now, check for "legacy" DRI1 VIA DRM. */
+    if (!pVia->KMS) {
+        busId = DRICreatePCIBusID(pVia->PciInfo);
+        pVia->drmmode.fd = drmOpen("via", busId);
+        if (pVia->drmmode.fd != -1) {
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "VIA DRM detected.\n");
+            drmVer = drmGetVersion(pVia->drmmode.fd);
+            if (drmVer) {
+                pVia->drmVerMajor = drmVer->version_major;
+                pVia->drmVerMinor = drmVer->version_minor;
+                pVia->drmVerPatchLevel = drmVer->version_patchlevel;
+                drmFreeVersion(drmVer);
+
+                xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                            "VIA DRM Version: %d.%d.%d\n",
+                            pVia->drmVerMajor, pVia->drmVerMinor,
+                            pVia->drmVerPatchLevel);
+
+                if (((pVia->drmVerMajor > drmVIADRMExpected.major) &&
+                    (pVia->drmVerMajor < drmVIADRMCompat.major)) ||
+                    ((pVia->drmVerMajor == drmVIADRMExpected.major) &&
+                    (pVia->drmVerMinor >= drmVIADRMExpected.minor) &&
+                    (pVia->drmVerMajor < drmVIADRMCompat.major))) {
+                    pVia->directRenderingType = DRI_1;
+                    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                                "This version of VIA DRM is "
+                                "compatible with OpenChrome DDX.\n");
+                } else {
+                    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                                "This version of VIA DRM is not "
+                                "compatible with OpenChrome DDX.\n"
+                                "OpenChrome DDX can work with "
+                                "VIA DRM Version %d.%d to %d.%d.\n",
+                                drmVIADRMExpected.major,
+                                drmVIADRMExpected.minor,
+                                drmVIADRMCompat.major,
+                                drmVIADRMCompat.minor);
+                    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                                "Disabling VIA DRM support.\n");
+                }
+            } else {
+                xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                            "Not able to obtain VIA DRM version.\n");
+            }
+        } else {
+            xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                        "OpenChrome DDX will now operate "
+                        "without DRM.\n");
+        }
+
+        free(busId);
+    }
 #endif
 
     /* After umsPreInit function succeeds, PCI hardware resources are
diff --git a/src/via_driver.h b/src/via_driver.h
index 4ec363b..8212c07 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -307,7 +307,7 @@ typedef struct _VIA {
     ViaXvMC             xvmc;
     int                 drmVerMajor;
     int                 drmVerMinor;
-    int                 drmVerPL;
+    int                 drmVerPatchLevel;
     struct buffer_object *driOffScreenMem;
     void *              driOffScreenSave;
 #endif
diff --git a/src/via_xvmc.c b/src/via_xvmc.c
index 8882947..cd886bf 100644
--- a/src/via_xvmc.c
+++ b/src/via_xvmc.c
@@ -342,7 +342,8 @@ ViaInitXVMC(ScreenPtr pScreen)
         xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
                    "[XvMC] Kernel drm version is %d.%d.%d; "
                    "at least version 2.4.0 is needed.\n",
-                   pVia->drmVerMajor, pVia->drmVerMinor, pVia->drmVerPL);
+                   pVia->drmVerMajor, pVia->drmVerMinor,
+                   pVia->drmVerPatchLevel);
         xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
                    "[XvMC] Please update. Disabling XvMC.\n");
         return;


More information about the Openchrome-devel mailing list