[arch-commits] Commit in xf86-video-r128/trunk (5 files)

Tobias Powalowski tpowa at archlinux.org
Thu Mar 26 07:44:25 UTC 2015


    Date: Thursday, March 26, 2015 @ 08:44:24
  Author: tpowa
Revision: 234950

upgpkg: xf86-video-r128 6.9.2-5

fix segfaults and autodetection of VGA ports

Added:
  xf86-video-r128/trunk/0001-Fix-allocation-of-private-entity.patch
  xf86-video-r128/trunk/0001-Look-for-VGA-ports-in-the-VBIOS.patch
  xf86-video-r128/trunk/0001-Update-bitmasks-for-DDC.patch
  xf86-video-r128/trunk/exa.patch
Modified:
  xf86-video-r128/trunk/PKGBUILD

---------------------------------------------+
 0001-Fix-allocation-of-private-entity.patch |   83 ++++++++++++++++++++++++++
 0001-Look-for-VGA-ports-in-the-VBIOS.patch  |   57 +++++++++++++++++
 0001-Update-bitmasks-for-DDC.patch          |   59 ++++++++++++++++++
 PKGBUILD                                    |   23 +++++--
 exa.patch                                   |   40 ++++++++++++
 5 files changed, 258 insertions(+), 4 deletions(-)

Added: 0001-Fix-allocation-of-private-entity.patch
===================================================================
--- 0001-Fix-allocation-of-private-entity.patch	                        (rev 0)
+++ 0001-Fix-allocation-of-private-entity.patch	2015-03-26 07:44:24 UTC (rev 234950)
@@ -0,0 +1,83 @@
+From bae1922f1a38e51633644cf65d2c6f8c73490d12 Mon Sep 17 00:00:00 2001
+From: Connor Behan <connor.behan at gmail.com>
+Date: Thu, 12 Mar 2015 17:18:13 -0400
+Subject: [PATCH] Fix allocation of private entity
+
+In the past, pR128Ent was only used for Xinerama-style dualhead and
+therefore only allocated for cards with two outputs. However, recent
+patches have repurposed pR128Ent as a general struct for things that are
+card-specific instead of instance-specific. It therefore needs to be
+allocated for all cards.
+
+Signed-off-by: Connor Behan <connor.behan at gmail.com>
+---
+ src/r128_probe.c | 32 +++++++++++++++-----------------
+ 1 file changed, 15 insertions(+), 17 deletions(-)
+
+diff --git a/src/r128_probe.c b/src/r128_probe.c
+index 9771d52..0fd31c6 100644
+--- a/src/r128_probe.c
++++ b/src/r128_probe.c
+@@ -234,6 +234,7 @@ r128_get_scrninfo(int entity_num)
+ {
+     ScrnInfoPtr   pScrn = NULL;
+     EntityInfoPtr pEnt;
++    DevUnion*     pPriv;
+ 
+     pScrn = xf86ConfigPciEntity(pScrn, 0, entity_num, R128PciChipsets,
+                                 NULL,
+@@ -261,6 +262,20 @@ r128_get_scrninfo(int entity_num)
+ 
+     pEnt = xf86GetEntityInfo(entity_num);
+ 
++    /* Allocate private entity used for convenience with one or two heads. */
++    if (gR128EntityIndex < 0) {
++        gR128EntityIndex = xf86AllocateEntityPrivateIndex();
++        pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gR128EntityIndex);
++
++	if (!pPriv->ptr) {
++	    R128EntPtr pR128Ent;
++	    pPriv->ptr = xnfcalloc(sizeof(R128EntRec), 1);
++	    pR128Ent = pPriv->ptr;
++	    pR128Ent->HasSecondary = FALSE;
++	    pR128Ent->IsSecondaryRestored = FALSE;
++	}
++    }
++
+     /* mobility cards support Dual-Head, mark the entity as sharable*/
+     if (pEnt->chipset == PCI_CHIP_RAGE128LE ||
+         pEnt->chipset == PCI_CHIP_RAGE128LF ||
+@@ -268,7 +283,6 @@ r128_get_scrninfo(int entity_num)
+         pEnt->chipset == PCI_CHIP_RAGE128ML)
+     {
+         static int instance = 0;
+-        DevUnion* pPriv;
+ 
+         xf86SetEntitySharable(entity_num);
+ 
+@@ -276,22 +290,6 @@ r128_get_scrninfo(int entity_num)
+                                        pScrn->entityList[0],
+                                        instance);
+ 
+-        if (gR128EntityIndex < 0)
+-        {
+-            gR128EntityIndex = xf86AllocateEntityPrivateIndex();
+-
+-            pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+-                                         gR128EntityIndex);
+-
+-            if (!pPriv->ptr)
+-            {
+-                R128EntPtr pR128Ent;
+-                pPriv->ptr = xnfcalloc(sizeof(R128EntRec), 1);
+-                pR128Ent = pPriv->ptr;
+-                pR128Ent->HasSecondary = FALSE;
+-                pR128Ent->IsSecondaryRestored = FALSE;
+-            }
+-        }
+         instance++;
+     }
+ 
+-- 
+2.3.2
+

Added: 0001-Look-for-VGA-ports-in-the-VBIOS.patch
===================================================================
--- 0001-Look-for-VGA-ports-in-the-VBIOS.patch	                        (rev 0)
+++ 0001-Look-for-VGA-ports-in-the-VBIOS.patch	2015-03-26 07:44:24 UTC (rev 234950)
@@ -0,0 +1,57 @@
+From bd8f067e559bab3bba187a0aa905a0ebd3f957c2 Mon Sep 17 00:00:00 2001
+From: Connor Behan <connor.behan at gmail.com>
+Date: Mon, 16 Mar 2015 18:53:04 -0400
+Subject: [PATCH] Look for VGA ports in the VBIOS
+
+It appears that not all r128 chipsets marked as DFP capable have DVI
+ports. Some have VGA which we should detect. The old driver "detected"
+this by attempting a DVI based probe for monitors. Anything that failed
+this was assumed to be VGA.
+
+Signed-off-by: Connor Behan <connor.behan at gmail.com>
+---
+ src/r128_output.c | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+diff --git a/src/r128_output.c b/src/r128_output.c
+index 0160880..c042c98 100644
+--- a/src/r128_output.c
++++ b/src/r128_output.c
+@@ -400,6 +400,24 @@ void R128SetupGenericConnectors(ScrnInfoPtr pScrn, R128OutputType *otypes)
+     otypes[1] = OUTPUT_VGA;
+ }
+ 
++void R128GetConnectorInfoFromBIOS(ScrnInfoPtr pScrn, R128OutputType *otypes)
++{
++    R128InfoPtr info = R128PTR(pScrn);
++    uint16_t bios_header;
++    int offset;
++
++    /* XXX: Currently, this function only finds VGA ports misidentified as DVI. */
++    if (!info->VBIOS || otypes[0] != OUTPUT_DVI) return;
++
++    bios_header = R128_BIOS16(0x48);
++    offset = R128_BIOS16(bios_header + 0x60);
++
++    if (offset) {
++        otypes[0] = OUTPUT_VGA;
++	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Found CRT table, assuming VGA connector\n");
++    }
++}
++
+ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
+ {
+     R128InfoPtr info    = R128PTR(pScrn);
+@@ -411,8 +429,8 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
+     int num_dvi = 0;
+     int i;
+ 
+-    /* XXX: Can we make R128GetConnectorInfoFromBIOS()? */
+     R128SetupGenericConnectors(pScrn, otypes);
++    R128GetConnectorInfoFromBIOS(pScrn, otypes);
+ 
+     for (i = 0; i < R128_MAX_BIOS_CONNECTOR; i++) {
+         if (otypes[i] == OUTPUT_VGA)
+-- 
+2.3.2
+

Added: 0001-Update-bitmasks-for-DDC.patch
===================================================================
--- 0001-Update-bitmasks-for-DDC.patch	                        (rev 0)
+++ 0001-Update-bitmasks-for-DDC.patch	2015-03-26 07:44:24 UTC (rev 234950)
@@ -0,0 +1,59 @@
+From ffa931387c627ee04292e745b4adadd4243aa122 Mon Sep 17 00:00:00 2001
+From: Connor Behan <connor.behan at gmail.com>
+Date: Thu, 19 Mar 2015 15:48:18 -0400
+Subject: [PATCH] Update bitmasks for DDC
+
+A RAGE128TR chipset with a VGA port uses different i2c clock bits than
+the VGA cards previously tested. It seems reasonable to assume that
+other Pro2 cards are set up this way as well. In case this is incorrect,
+a newly added xf86I2CProbeAddress() should still allow a monitor to be
+detected.
+
+Signed-off-by: Connor Behan <connor.behan at gmail.com>
+---
+ src/r128_output.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/src/r128_output.c b/src/r128_output.c
+index 0160880..bd418ba 100644
+--- a/src/r128_output.c
++++ b/src/r128_output.c
+@@ -239,6 +239,9 @@ static R128MonitorType R128DisplayDDCConnected(xf86OutputPtr output)
+ 
+     if (r128_output->type == OUTPUT_LVDS) {
+         return MT_LCD;
++    } else if (r128_output->type == OUTPUT_VGA && info->isPro2) {
++        mask1 = R128_GPIO_MONID_MASK_1 | R128_GPIO_MONID_MASK_2;
++        mask2 = R128_GPIO_MONID_A_1    | R128_GPIO_MONID_A_2;
+     } else if (r128_output->type == OUTPUT_VGA) {
+         mask1 = R128_GPIO_MONID_MASK_1 | R128_GPIO_MONID_MASK_3;
+         mask2 = R128_GPIO_MONID_A_1    | R128_GPIO_MONID_A_3;
+@@ -268,6 +271,9 @@ static R128MonitorType R128DisplayDDCConnected(xf86OutputPtr output)
+             else
+                 MonType = MT_CRT;
+ 	}
++    } else if (xf86I2CProbeAddress(r128_output->pI2CBus, 0x0060)) {
++        /* Just in case. */
++        MonType = MT_CRT;
+     }
+ 
+     return MonType;
+@@ -454,8 +460,13 @@ Bool R128SetupConnectors(ScrnInfoPtr pScrn)
+ 
+         if (otypes[i] != OUTPUT_LVDS && info->DDC) {
+             i2c.ddc_reg      = R128_GPIO_MONID;
+-            i2c.put_clk_mask = R128_GPIO_MONID_EN_3;
+-            i2c.get_clk_mask = R128_GPIO_MONID_Y_3;
++            if (otypes[i] == OUTPUT_VGA && info->isPro2) {
++                i2c.put_clk_mask = R128_GPIO_MONID_EN_2;
++                i2c.get_clk_mask = R128_GPIO_MONID_Y_2;
++            } else {
++                i2c.put_clk_mask = R128_GPIO_MONID_EN_3;
++                i2c.get_clk_mask = R128_GPIO_MONID_Y_3;
++            }
+             if (otypes[i] == OUTPUT_VGA) {
+                 i2c.put_data_mask = R128_GPIO_MONID_EN_1;
+                 i2c.get_data_mask = R128_GPIO_MONID_Y_1;
+-- 
+2.3.2
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2015-03-26 00:09:37 UTC (rev 234949)
+++ PKGBUILD	2015-03-26 07:44:24 UTC (rev 234950)
@@ -3,7 +3,7 @@
 
 pkgname=xf86-video-r128
 pkgver=6.9.2
-pkgrel=4
+pkgrel=5
 pkgdesc="X.org ati Rage128 video driver"
 arch=(i686 x86_64)
 url="http://xorg.freedesktop.org/"
@@ -13,13 +13,28 @@
 conflicts=('xorg-server<1.16' 'X-ABI-VIDEODRV_VERSION<19' 'X-ABI-VIDEODRV_VERSION>=20')
 optdepends=('r128-dri: DRI1 support from community repo')
 groups=('xorg-drivers' 'xorg')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 git-fixes.patch)
-sha256sums=('8b2d295f1842d07304a75da1cfb9bf139b320a6539970eaf8d5ecc010cd36ee0'
-            '2139a1d3b12950f452b72f4d9b916143814789df5080cee03a1e0955421b1808')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2 
+        git-fixes.patch
+        exa.patch
+        0001-Fix-allocation-of-private-entity.patch
+        0001-Look-for-VGA-ports-in-the-VBIOS.patch
+        0001-Update-bitmasks-for-DDC.patch)
+md5sums=('2e906d856a1c477bde000254b142445c'
+         '4f1b508b64dd0435f1ab85c043bd531d'
+         'de1c99f8697c25d0d07cc31754d31a4e'
+         '1fe6389478461b71704f66161a1d3a91'
+         '086aba37a33d624bd83686fb190639b2'
+         '6d8bbf5c7f77596d7df040b14b542806')
 
 prepare() {
   cd ${pkgname}-${pkgver}
   patch -Np1 -i ../git-fixes.patch
+  # fixes for r128 with VGA port, pushed upstream by Connor Behan
+  # tested by Tobias Powalowski
+  patch -Np1 -i ../exa.patch
+  patch -Np1 -i ../0001-Fix-allocation-of-private-entity.patch
+  patch -Np1 -i ../0001-Look-for-VGA-ports-in-the-VBIOS.patch
+  patch -Np1 -i ../0001-Update-bitmasks-for-DDC.patch
   autoreconf -fi
 }
 

Added: exa.patch
===================================================================
--- exa.patch	                        (rev 0)
+++ exa.patch	2015-03-26 07:44:24 UTC (rev 234950)
@@ -0,0 +1,40 @@
+From bfff401440c5bb72fb1ce90c804f3a5623d733b0 Mon Sep 17 00:00:00 2001
+From: Connor Behan <connor.behan at gmail.com>
+Date: Mon, 2 Mar 2015 16:15:16 -0500
+Subject: Make it easier to find EXA
+
+As of commit e31564e1a21e73f4d20d6471da4fc7a9b63e4062, the xserver is
+more picky about the order in which headers are included. We need to
+account for this in order for the compile time exa.h check to succeed.
+
+Signed-off-by: Connor Behan <connor.behan at gmail.com>
+
+diff --git a/configure.ac b/configure.ac
+index 3cc3113..7b461c6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -121,12 +121,7 @@ CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
+ AC_MSG_CHECKING([whether to enable EXA support])
+ if test "x$EXA" = xyes; then
+         AC_MSG_RESULT(yes)
+-
+-        SAVE_CPPFLAGS="$CPPFLAGS"
+-        CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
+-        AC_CHECK_HEADER(exa.h,
+-                       [have_exa_h="yes"], [have_exa_h="no"])
+-        CPPFLAGS="$SAVE_CPPFLAGS"
++        AC_CHECK_FILE(${sdkdir}/exa.h, [have_exa_h="yes"], [have_exa_h="no"])
+ else
+         AC_MSG_RESULT(no)
+ fi
+@@ -136,6 +131,7 @@ CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
+ if test "x$have_exa_h" = xyes; then
+         AC_MSG_CHECKING([whether EXA version is at least 2.0.0])
+         AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[
++#include "xorg-server.h"
+ #include "exa.h"
+ #if EXA_VERSION_MAJOR < 2
+ #error OLD EXA!
+-- 
+cgit v0.10.2
+



More information about the arch-commits mailing list