Update to 1.15.99.904
This commit is contained in:
		
							parent
							
								
									3f526f4094
								
							
						
					
					
						commit
						ce1052ae89
					
				| @ -1,35 +0,0 @@ | ||||
| From 7103563676f5970e14da38923a15641fc1877328 Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Wed, 2 Jul 2014 17:19:30 +0200 | ||||
| Subject: [PATCH] fb: Fix xvfb crash in fbCloseScreen on client disconnect | ||||
| 
 | ||||
| Fix xvfb crash on client disconnect: | ||||
| https://bugzilla.redhat.com/show_bug.cgi?id=1113128 | ||||
| caused by: | ||||
| http://patchwork.freedesktop.org/patch/24757/ | ||||
| 
 | ||||
| The discussion there has some ideas for a better / cleaner fix, but for now | ||||
| lets gets this fixed before the 1.16 release with this simple fix. | ||||
| 
 | ||||
| Signed-off-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  fb/fbscreen.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/fb/fbscreen.c b/fb/fbscreen.c
 | ||||
| index 1f91089..0d4d87f 100644
 | ||||
| --- a/fb/fbscreen.c
 | ||||
| +++ b/fb/fbscreen.c
 | ||||
| @@ -37,7 +37,8 @@ fbCloseScreen(ScreenPtr pScreen)
 | ||||
|          free(depths[d].vids); | ||||
|      free(depths); | ||||
|      free(pScreen->visuals); | ||||
| -    FreePixmap((PixmapPtr)pScreen->devPrivate);
 | ||||
| +    if (pScreen->devPrivate)
 | ||||
| +        FreePixmap((PixmapPtr)pScreen->devPrivate);
 | ||||
|      return TRUE; | ||||
|  } | ||||
|   | ||||
| -- 
 | ||||
| 2.0.0 | ||||
| 
 | ||||
| @ -22,7 +22,7 @@ diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c | ||||
| index b966e50..a4aeecd 100644
 | ||||
| --- a/hw/xwayland/xwayland.c
 | ||||
| +++ b/hw/xwayland/xwayland.c
 | ||||
| @@ -326,25 +326,21 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
 | ||||
| @@ -326,31 +326,27 @@ xwl_screen_post_damage(struct xwl_screen *xwl_screen)
 | ||||
|      struct xwl_window *xwl_window; | ||||
|      RegionPtr region; | ||||
|      BoxPtr box; | ||||
| @ -37,7 +37,13 @@ index b966e50..a4aeecd 100644 | ||||
| -
 | ||||
|          pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window); | ||||
|   | ||||
|  #if GLAMOR_HAS_GBM | ||||
|          if (xwl_screen->glamor) | ||||
|              buffer = xwl_glamor_pixmap_get_wl_buffer(pixmap); | ||||
|  #endif | ||||
|          if (!xwl_screen->glamor) | ||||
|              buffer = xwl_shm_pixmap_get_wl_buffer(pixmap); | ||||
|   | ||||
|          wl_surface_attach(xwl_window->surface, buffer, 0, 0); | ||||
| -        for (i = 0; i < count; i++) {
 | ||||
| -            box = &RegionRects(region)[i];
 | ||||
|  | ||||
							
								
								
									
										133
									
								
								0002-Revert-dix-fix-up-coordinate-scaling-when-external-m.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								0002-Revert-dix-fix-up-coordinate-scaling-when-external-m.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,133 @@ | ||||
| From 5a16e22115ad88bf9abe91c43c203385e2ea41bb Mon Sep 17 00:00:00 2001 | ||||
| From: Hans de Goede <hdegoede@redhat.com> | ||||
| Date: Tue, 8 Jul 2014 11:10:39 +0200 | ||||
| Subject: [PATCH 2/2] Revert "dix: fix up coordinate scaling when external | ||||
|  monitors are present" | ||||
| 
 | ||||
| This reverts commit d90b5f83010248be65b2039b0b2d0b9e6a4e93cf. | ||||
| ---
 | ||||
|  dix/getevents.c | 80 +++++++++++++++------------------------------------------ | ||||
|  1 file changed, 20 insertions(+), 60 deletions(-) | ||||
| 
 | ||||
| diff --git a/dix/getevents.c b/dix/getevents.c
 | ||||
| index d68fa96..ffa89fa 100644
 | ||||
| --- a/dix/getevents.c
 | ||||
| +++ b/dix/getevents.c
 | ||||
| @@ -770,65 +770,27 @@ add_to_scroll_valuator(DeviceIntPtr dev, ValuatorMask *mask, int valuator, doubl
 | ||||
|  } | ||||
|   | ||||
|   | ||||
| -/* FIXME: relative events from devices with absolute axis ranges is
 | ||||
| -   fundamentally broken. We map the device coordinate range into the screen
 | ||||
| -   range, but don't really account for device resolution in that.
 | ||||
| -
 | ||||
| -   what we do here is a hack to make touchpads usable. for a given relative
 | ||||
| -   motion vector in device coordinates:
 | ||||
| -   1. calculate physical movement on the device in metres
 | ||||
| -   2. calculate pixel vector that is the same physical movement on the
 | ||||
| -      screen (times some magic number to provide sensible base speed)
 | ||||
| -   3. calculate what percentage this vector is of the current screen
 | ||||
| -      width/height
 | ||||
| -   4. calculate equivalent vector in % on the device's min/max axis range
 | ||||
| -   5. Use that device vector as the actual motion vector
 | ||||
| -
 | ||||
| -   e.g. 10/50mm on the device, 10/50mm on the screen are 30/100 pixels,
 | ||||
| -   30/100 pixels are 1/3% of the width, 1/3% of the device is a vector of
 | ||||
| -   20/80 -> use 20/80 as dx/dy.
 | ||||
| -
 | ||||
| -   dx/dy is then applied to the current position in device coordinates,
 | ||||
| -   mapped to screen coordinates and thus the movement on the screen reflects
 | ||||
| -   the motion direction on the device.
 | ||||
| - */
 | ||||
|  static void | ||||
|  scale_for_device_resolution(DeviceIntPtr dev, ValuatorMask *mask) | ||||
|  { | ||||
| -    double x, y;
 | ||||
| +    double y;
 | ||||
|      ValuatorClassPtr v = dev->valuator; | ||||
|      int xrange = v->axes[0].max_value - v->axes[0].min_value + 1; | ||||
|      int yrange = v->axes[1].max_value - v->axes[1].min_value + 1; | ||||
|   | ||||
| -    /* Assume 100 units/m for devices without resolution */
 | ||||
| -    int xres = 100000, yres = 100000;
 | ||||
| -
 | ||||
| -    /* If we have multiple screens with different dpi, it gets complicated:
 | ||||
| -       we have to map which screen we're on and then take the dpi of that
 | ||||
| -       screen to be somewhat accurate.  */
 | ||||
| -    const ScreenPtr s = screenInfo.screens[0];
 | ||||
| -    const double screen_res = 1000.0 * s->width/s->mmWidth; /* units/m */
 | ||||
| +    double screen_ratio = 1.0 * screenInfo.width/screenInfo.height;
 | ||||
| +    double device_ratio = 1.0 * xrange/yrange;
 | ||||
| +    double resolution_ratio = 1.0;
 | ||||
| +    double ratio;
 | ||||
|   | ||||
| -    /* some magic multiplier, so unaccelerated movement of x mm on the
 | ||||
| -       device reflects x * magic mm on the screen */
 | ||||
| -    const double magic = 4;
 | ||||
| +    if (!valuator_mask_fetch_double(mask, 1, &y))
 | ||||
| +        return;
 | ||||
|   | ||||
| -    if (v->axes[0].resolution != 0 && v->axes[1].resolution != 0) {
 | ||||
| -        xres = v->axes[0].resolution;
 | ||||
| -        yres = v->axes[1].resolution;
 | ||||
| -    }
 | ||||
| +    if (v->axes[0].resolution != 0 && v->axes[1].resolution != 0)
 | ||||
| +        resolution_ratio = 1.0 * v->axes[0].resolution/v->axes[1].resolution;
 | ||||
|   | ||||
| -    if (valuator_mask_isset(mask, 0)) {
 | ||||
| -        x = valuator_mask_get_double(mask, 0);
 | ||||
| -        x = magic * x/xres * screen_res/screenInfo.width * xrange;
 | ||||
| -        valuator_mask_set_double(mask, 0, x);
 | ||||
| -    }
 | ||||
| -
 | ||||
| -    if (valuator_mask_isset(mask, 1)) {
 | ||||
| -        y = valuator_mask_get_double(mask, 1);
 | ||||
| -        y = magic * y/yres * screen_res/screenInfo.height * yrange;
 | ||||
| -        valuator_mask_set_double(mask, 1, y);
 | ||||
| -    }
 | ||||
| +    ratio = device_ratio/resolution_ratio/screen_ratio;
 | ||||
| +    valuator_mask_set_double(mask, 1, y / ratio);
 | ||||
|  } | ||||
|   | ||||
|  /** | ||||
| @@ -842,6 +804,15 @@ moveRelative(DeviceIntPtr dev, int flags, ValuatorMask *mask)
 | ||||
|  { | ||||
|      int i; | ||||
|      Bool clip_xy = IsMaster(dev) || !IsFloating(dev); | ||||
| +    ValuatorClassPtr v = dev->valuator;
 | ||||
| +
 | ||||
| +    /* for abs devices in relative mode, we've just scaled wrong, since we
 | ||||
| +       mapped the device's shape into the screen shape. Undo this. */
 | ||||
| +    if ((flags & POINTER_ABSOLUTE) == 0 && v && v->numAxes > 1 &&
 | ||||
| +        v->axes[0].min_value < v->axes[0].max_value &&
 | ||||
| +        v->axes[1].min_value < v->axes[1].max_value) {
 | ||||
| +        scale_for_device_resolution(dev, mask);
 | ||||
| +    }
 | ||||
|   | ||||
|      /* calc other axes, clip, drop back into valuators */ | ||||
|      for (i = 0; i < valuator_mask_size(mask); i++) { | ||||
| @@ -1470,21 +1441,10 @@ fill_pointer_events(InternalEvent *events, DeviceIntPtr pDev, int type,
 | ||||
|              set_raw_valuators(raw, &mask, raw->valuators.data); | ||||
|      } | ||||
|      else { | ||||
| -        ValuatorClassPtr v = pDev->valuator;
 | ||||
| -
 | ||||
|          transformRelative(pDev, &mask); | ||||
|   | ||||
| -        /* for abs devices in relative mode, we've just scaled wrong, since we
 | ||||
| -           mapped the device's shape into the screen shape. Undo this. */
 | ||||
| -        if (v && v->numAxes > 1 &&
 | ||||
| -            v->axes[0].min_value < v->axes[0].max_value &&
 | ||||
| -            v->axes[1].min_value < v->axes[1].max_value) {
 | ||||
| -            scale_for_device_resolution(pDev, &mask);
 | ||||
| -        }
 | ||||
| -
 | ||||
|          if (flags & POINTER_ACCELERATE) | ||||
|              accelPointer(pDev, &mask, ms); | ||||
| -
 | ||||
|          if ((flags & POINTER_NORAW) == 0 && raw) | ||||
|              set_raw_valuators(raw, &mask, raw->valuators.data); | ||||
|   | ||||
| -- 
 | ||||
| 2.0.0 | ||||
| 
 | ||||
| @ -1,107 +0,0 @@ | ||||
| Return-Path: <robdclark@gmail.com> | ||||
| X-Original-To: dennis@ausil.us | ||||
| Delivered-To: dennis@ausil.us | ||||
| Received: from localhost (unknown [127.0.0.1]) | ||||
| 	by mail.ausil.us (Postfix) with ESMTP id AE53C2E021E | ||||
| 	for <dennis@ausil.us>; Mon, 16 Jun 2014 18:14:13 +0000 (UTC) | ||||
| X-Virus-Scanned: amavisd-new at ausil.us | ||||
| Authentication-Results: mail02.ausil.us (amavisd-new); | ||||
| 	dkim=pass (2048-bit key) header.d=gmail.com | ||||
| Received: from mail.ausil.us ([127.0.0.1]) | ||||
| 	by localhost (mail02.ausil.us [127.0.0.1]) (amavisd-new, port 10024) | ||||
| 	with ESMTP id 2AoZpXtuwNq4 for <dennis@ausil.us>; | ||||
| 	Mon, 16 Jun 2014 18:13:56 +0000 (GMT) | ||||
| X-Greylist: whitelisted by SQLgrey-1.8.0 | ||||
| Received: from mail-qc0-f171.google.com (mail-qc0-f171.google.com [209.85.216.171]) | ||||
| 	(using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) | ||||
| 	(No client certificate requested) | ||||
| 	by mail.ausil.us (Postfix) with ESMTPS id 87F032E0261 | ||||
| 	for <dennis@ausil.us>; Mon, 16 Jun 2014 18:13:40 +0000 (GMT) | ||||
| Received: by mail-qc0-f171.google.com with SMTP id w7so8379019qcr.16 | ||||
|         for <dennis@ausil.us>; Mon, 16 Jun 2014 11:13:37 -0700 (PDT) | ||||
| DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; | ||||
|         d=gmail.com; s=20120113; | ||||
|         h=from:to:cc:subject:date:message-id:in-reply-to:references; | ||||
|         bh=jsWdJaCBC84y12XEEHC+1YnahY8ti8aoJY04XygDevU=; | ||||
|         b=OjrxhPzRTZhaFHrLBWNtwov2CyZrFrBXUAAao9IAvRq28P35R+fASLX17l/DUgxHHO | ||||
|          cXhMF6daP4HsYk2565CLVY1CGakRJwhSrYR5BogqOL84+M1M678i0tUbK0O79Ah2ETlx | ||||
|          KIT4ANg+EB1RWqkQMGbCPaMRGpyYSerYs3qn1qn0PFj0V8O1vni9hMfqrNVi8EMw0WEF | ||||
|          vEp2omX0DMjOq4qnqBRTcixcnQEpxU7oX/JxqlLdtqAzB6fCKwhQvREDrOFHJyfSUV8o | ||||
|          CeC1cM3IYiRbgvaUz2jFzCw/cDOl2Kk6I+VXAkiGRraH7QBPzJWUT7oEXjHgSvg/en+t | ||||
|          qH7Q== | ||||
| X-Received: by 10.140.107.52 with SMTP id g49mr7021793qgf.100.1402942416014; | ||||
|         Mon, 16 Jun 2014 11:13:36 -0700 (PDT) | ||||
| Received: from localhost (pool-108-20-245-130.bstnma.east.verizon.net. [108.20.245.130]) | ||||
|         by mx.google.com with ESMTPSA id e8sm22833340qaa.12.2014.06.16.11.13.34 | ||||
|         for <multiple recipients> | ||||
|         (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); | ||||
|         Mon, 16 Jun 2014 11:13:35 -0700 (PDT) | ||||
| From: Rob Clark <robdclark@gmail.com> | ||||
| To: xorg-devel@lists.x.org | ||||
| Cc: Dennis Gilmore <dennis@ausil.us>, | ||||
| 	Dave Airlie <airlied@gmail.com>, | ||||
| 	Thierry Reding <thierry.reding@gmail.com>, | ||||
| 	Rob Clark <robdclark@gmail.com> | ||||
| Subject: [PATCH 2/2] add SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS | ||||
| Date: Mon, 16 Jun 2014 14:13:17 -0400 | ||||
| Message-Id: <1402942397-16427-3-git-send-email-robdclark@gmail.com> | ||||
| X-Mailer: git-send-email 1.9.3 | ||||
| In-Reply-To: <1402942397-16427-1-git-send-email-robdclark@gmail.com> | ||||
| References: <1402942397-16427-1-git-send-email-robdclark@gmail.com> | ||||
| 
 | ||||
| Give the DDX a way to know whether non-pci platform devices are | ||||
| completely broken or not.  For xserver prior to the fix, the | ||||
| DDX should not claim a platform device in platformProbe(), as | ||||
| the server will fallback to old ->Probe(), which will fail if | ||||
| the device is already claimed.  Meaning that a user could not | ||||
| make things work even with a .conf file to explicitly specify | ||||
| the driver to use. | ||||
| 
 | ||||
| Idea suggested by Hans de Goede. | ||||
| 
 | ||||
| Signed-off-by: Rob Clark <robdclark@gmail.com> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  hw/xfree86/common/xf86Init.c | 10 +++++++++- | ||||
|  hw/xfree86/common/xf86str.h  |  1 + | ||||
|  2 files changed, 10 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
 | ||||
| index 5a45004..9b6a8b5 100644
 | ||||
| --- a/hw/xfree86/common/xf86Init.c
 | ||||
| +++ b/hw/xfree86/common/xf86Init.c
 | ||||
| @@ -546,10 +546,18 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
 | ||||
|              if (xf86DriverList[i]->Identify != NULL) | ||||
|                  xf86DriverList[i]->Identify(0); | ||||
|   | ||||
| -            if (xf86DriverList[i]->driverFunc)
 | ||||
| +            if (xf86DriverList[i]->driverFunc) {
 | ||||
|                  xf86DriverList[i]->driverFunc(NULL, | ||||
|                                                GET_REQUIRED_HW_INTERFACES, | ||||
|                                                &flags); | ||||
| +                /* also let the driver know that it is safe to
 | ||||
| +                 * allow platformProbe() to claim the device
 | ||||
| +                 * if it is a non-pci platform device:
 | ||||
| +                 */
 | ||||
| +                xf86DriverList[i]->driverFunc(NULL,
 | ||||
| +                                              SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS,
 | ||||
| +                                              NULL);
 | ||||
| +            }
 | ||||
|   | ||||
|              if (NEED_IO_ENABLED(flags)) | ||||
|                  want_hw_access = TRUE; | ||||
| diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
 | ||||
| index a81e886..6f27f18 100644
 | ||||
| --- a/hw/xfree86/common/xf86str.h
 | ||||
| +++ b/hw/xfree86/common/xf86str.h
 | ||||
| @@ -258,6 +258,7 @@ typedef enum {
 | ||||
|      RR_GET_MODE_MM, | ||||
|      GET_REQUIRED_HW_INTERFACES = 10, | ||||
|      SUPPORTS_SERVER_FDS = 11, | ||||
| +    SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS = 12,
 | ||||
|  } xorgDriverFuncOp; | ||||
|   | ||||
|  typedef Bool xorgDriverFuncProc(ScrnInfoPtr, xorgDriverFuncOp, void *); | ||||
| -- 
 | ||||
| 1.9.3 | ||||
| 
 | ||||
| @ -1,170 +0,0 @@ | ||||
| Return-Path: <robdclark@gmail.com> | ||||
| X-Original-To: dennis@ausil.us | ||||
| Delivered-To: dennis@ausil.us | ||||
| Received: from localhost (unknown [127.0.0.1]) | ||||
| 	by mail.ausil.us (Postfix) with ESMTP id 6B14F2E021E | ||||
| 	for <dennis@ausil.us>; Mon, 16 Jun 2014 18:13:57 +0000 (UTC) | ||||
| X-Virus-Scanned: amavisd-new at ausil.us | ||||
| Authentication-Results: mail02.ausil.us (amavisd-new); | ||||
| 	dkim=pass (2048-bit key) header.d=gmail.com | ||||
| Received: from mail.ausil.us ([127.0.0.1]) | ||||
| 	by localhost (mail02.ausil.us [127.0.0.1]) (amavisd-new, port 10024) | ||||
| 	with ESMTP id Z0kSi2KBV9uu for <dennis@ausil.us>; | ||||
| 	Mon, 16 Jun 2014 18:13:40 +0000 (GMT) | ||||
| X-Greylist: whitelisted by SQLgrey-1.8.0 | ||||
| Received: from mail-qc0-x22e.google.com (mail-qc0-x22e.google.com [IPv6:2607:f8b0:400d:c01::22e]) | ||||
| 	(using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) | ||||
| 	(No client certificate requested) | ||||
| 	by mail.ausil.us (Postfix) with ESMTPS id 8DA682E024F | ||||
| 	for <dennis@ausil.us>; Mon, 16 Jun 2014 18:13:38 +0000 (GMT) | ||||
| Received: by mail-qc0-f174.google.com with SMTP id x13so8164787qcv.5 | ||||
|         for <dennis@ausil.us>; Mon, 16 Jun 2014 11:13:36 -0700 (PDT) | ||||
| DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; | ||||
|         d=gmail.com; s=20120113; | ||||
|         h=from:to:cc:subject:date:message-id:in-reply-to:references; | ||||
|         bh=6VVOWdKY9pK2dBxdOSDqYcBMYVy4/+VDTxfgBepvrAI=; | ||||
|         b=MAKBIQ9TJrWGjVzYWsHECticUkQa0+TS5frl+oQnrCPULnqXN+rYmsx5HvCzVexJtm | ||||
|          fChdHXt/IxeAUjBH56HD3X9mkf6Pn+U2TkjUOmMJBm2q2tYgE2fYHCTDnsDYk3oMRlVP | ||||
|          abSXoAiURG2fODA3sPTQaAnn2Ojfvk6jzTQnN7X327u+0rA/aVjNC4u3IIcd5Cj7lo2I | ||||
|          dVnzPqxdKQoSDFAfpr2mC8pKoQzSabQw3TdCMrryGjN9enNnS+V5+5Sv6MIbrGotW/k5 | ||||
|          2O2GkTR08WpNO/Ae1NJQYRW3QfL1UGZE/GCsDW8KYS8C91mWwXcsN+QHnx92hA9K2YVU | ||||
|          eerg== | ||||
| X-Received: by 10.140.81.16 with SMTP id e16mr6124036qgd.110.1402942414050; | ||||
|         Mon, 16 Jun 2014 11:13:34 -0700 (PDT) | ||||
| Received: from localhost (pool-108-20-245-130.bstnma.east.verizon.net. [108.20.245.130]) | ||||
|         by mx.google.com with ESMTPSA id d2sm1375720qge.24.2014.06.16.11.13.32 | ||||
|         for <multiple recipients> | ||||
|         (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); | ||||
|         Mon, 16 Jun 2014 11:13:33 -0700 (PDT) | ||||
| From: Rob Clark <robdclark@gmail.com> | ||||
| To: xorg-devel@lists.x.org | ||||
| Cc: Dennis Gilmore <dennis@ausil.us>, | ||||
| 	Dave Airlie <airlied@gmail.com>, | ||||
| 	Thierry Reding <thierry.reding@gmail.com>, | ||||
| 	Rob Clark <robdclark@gmail.com> | ||||
| Subject: [PATCH 1/2] platform: support non-pci platform devices | ||||
| Date: Mon, 16 Jun 2014 14:13:16 -0400 | ||||
| Message-Id: <1402942397-16427-2-git-send-email-robdclark@gmail.com> | ||||
| X-Mailer: git-send-email 1.9.3 | ||||
| In-Reply-To: <1402942397-16427-1-git-send-email-robdclark@gmail.com> | ||||
| References: <1402942397-16427-1-git-send-email-robdclark@gmail.com> | ||||
| 
 | ||||
| This makes things not completely fail if DDX implements platformProbe() | ||||
| but the device is not actually a PCI device.  Also, the platform device | ||||
| name does not always match the DDX name, so deal with that.  I'm sure | ||||
| there are more cases that find_non_pci_driver() needs to handle for | ||||
| that, but this is a start. | ||||
| 
 | ||||
| Signed-off-by: Rob Clark <robdclark@gmail.com> | ||||
| Reviewed-by: Hans de Goede <hdegoede@redhat.com> | ||||
| ---
 | ||||
|  hw/xfree86/common/xf86platformBus.c | 65 ++++++++++++++++++++++++++++++++++--- | ||||
|  1 file changed, 61 insertions(+), 4 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
 | ||||
| index dd118a2..eca0f8c 100644
 | ||||
| --- a/hw/xfree86/common/xf86platformBus.c
 | ||||
| +++ b/hw/xfree86/common/xf86platformBus.c
 | ||||
| @@ -199,6 +199,41 @@ xf86_check_platform_slot(const struct xf86_platform_device *pd)
 | ||||
|      return TRUE; | ||||
|  } | ||||
|   | ||||
| +static int
 | ||||
| +find_non_pci_driver(const char *busid, char *returnList[], int returnListMax)
 | ||||
| +{
 | ||||
| +    /* Add more entries here if we ever return more than 4 drivers for
 | ||||
| +       any device */
 | ||||
| +    const char *driverList[5] = { NULL, NULL, NULL, NULL, NULL };
 | ||||
| +    int i = 0;
 | ||||
| +    char *p, *s;
 | ||||
| +
 | ||||
| +    s = xstrdup(busid);
 | ||||
| +    p = strtok(s, ":");
 | ||||
| +
 | ||||
| +    if (strcmp(p, "platform"))
 | ||||
| +        goto out;
 | ||||
| +
 | ||||
| +    /* extract device name: */
 | ||||
| +    p = strtok(NULL, ":");
 | ||||
| +
 | ||||
| +    /* check for special cases where DDX driver name does not match busid: */
 | ||||
| +    if (!strcmp(p, "mdp")) {
 | ||||
| +        driverList[i++] = "freedreno";
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    /* add name derived from busid last: */
 | ||||
| +    driverList[i++] = p;
 | ||||
| +
 | ||||
| +    for (i = 0; (i < returnListMax) && (driverList[i] != NULL); i++) {
 | ||||
| +        returnList[i] = xnfstrdup(driverList[i]);
 | ||||
| +    }
 | ||||
| +
 | ||||
| +out:
 | ||||
| +    free(s);
 | ||||
| +    return i;                   /* Number of entries added */
 | ||||
| +}
 | ||||
| +
 | ||||
|  /** | ||||
|   *  @return The numbers of found devices that match with the current system | ||||
|   *  drivers. | ||||
| @@ -230,6 +265,9 @@ xf86PlatformMatchDriver(char *matches[], int nmatches)
 | ||||
|   | ||||
|              if ((info != NULL) && (j < nmatches)) { | ||||
|                  j += xf86VideoPtrToDriverList(info, &(matches[j]), nmatches - j); | ||||
| +            } else if (j < nmatches) {
 | ||||
| +                char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID);
 | ||||
| +                j += find_non_pci_driver(busid, &(matches[j]), nmatches - j);
 | ||||
|              } | ||||
|          } | ||||
|      } | ||||
| @@ -248,6 +286,9 @@ xf86platformProbe(void)
 | ||||
|          pci = FALSE; | ||||
|      } | ||||
|   | ||||
| +    /* First pass, look for PCI devices.  If we find a suitable
 | ||||
| +     * PCI device that takes priority.
 | ||||
| +     */
 | ||||
|      for (i = 0; i < xf86_num_platform_devices; i++) { | ||||
|          char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID); | ||||
|   | ||||
| @@ -255,6 +296,24 @@ xf86platformProbe(void)
 | ||||
|              platform_find_pci_info(&xf86_platform_devices[i], busid); | ||||
|          } | ||||
|      } | ||||
| +
 | ||||
| +    /* if we found something, we are done: */
 | ||||
| +    if (primaryBus.type != BUS_NONE)
 | ||||
| +        return 0;
 | ||||
| +
 | ||||
| +    /* Second pass, look for real platform devices (ie. in the linux-
 | ||||
| +     * kernel sense of platform device.. something that is not pci)
 | ||||
| +     */
 | ||||
| +    for (i = 0; i < xf86_num_platform_devices; i++) {
 | ||||
| +        char *busid = xf86_get_platform_attrib(i, ODEV_ATTRIB_BUSID);
 | ||||
| +
 | ||||
| +        if (strncmp(busid, "platform:", 9) == 0) {
 | ||||
| +            primaryBus.type = BUS_PLATFORM;
 | ||||
| +            primaryBus.id.plat = &xf86_platform_devices[i];
 | ||||
| +            break;
 | ||||
| +        }
 | ||||
| +    }
 | ||||
| +
 | ||||
|      return 0; | ||||
|  } | ||||
|   | ||||
| @@ -401,10 +460,8 @@ xf86platformProbeDev(DriverPtr drvp)
 | ||||
|                  /* for non-seat0 servers assume first device is the master */ | ||||
|                  if (ServerIsNotSeat0()) | ||||
|                      break; | ||||
| -                if (xf86_platform_devices[j].pdev) {
 | ||||
| -                    if (xf86IsPrimaryPlatform(&xf86_platform_devices[j]))
 | ||||
| -                        break;
 | ||||
| -                }
 | ||||
| +                if (xf86IsPrimaryPlatform(&xf86_platform_devices[j]))
 | ||||
| +                    break;
 | ||||
|              } | ||||
|          } | ||||
|   | ||||
| -- 
 | ||||
| 1.9.3 | ||||
| 
 | ||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | ||||
| f2b746094e708c41bc28cf545624d16b  xorg-server-1.15.99.903.tar.bz2 | ||||
| 6840767d8306921b687d05437a952753  xorg-server-1.15.99.904.tar.bz2 | ||||
|  | ||||
| @ -41,8 +41,8 @@ | ||||
| 
 | ||||
| Summary:   X.Org X11 X server | ||||
| Name:      xorg-x11-server | ||||
| Version:   1.15.99.903 | ||||
| Release:   5%{?gitdate:.%{gitdate}}%{dist} | ||||
| Version:   1.15.99.904 | ||||
| Release:   1%{?gitdate:.%{gitdate}}%{dist} | ||||
| URL:       http://www.x.org | ||||
| License:   MIT | ||||
| Group:     User Interface/X | ||||
| @ -75,8 +75,10 @@ Source31: xserver-sdk-abi-requires.git | ||||
| Source40: driver-abi-rebuild.sh | ||||
| 
 | ||||
| # Submitted upstream | ||||
| Patch0001: 0001-fb-Fix-xvfb-crash-in-fbCloseScreen-on-client-disconn.patch | ||||
| Patch0002: 0001-headers-Fix-build-errors-with-latest-glibc.patch | ||||
| Patch0001: 0001-headers-Fix-build-errors-with-latest-glibc.patch | ||||
| 
 | ||||
| # Revert of a touchpad motion scaling fix with known issues (rhbz#1104789) | ||||
| Patch0002: 0002-Revert-dix-fix-up-coordinate-scaling-when-external-m.patch | ||||
| 
 | ||||
| # Trivial things to never merge upstream ever: | ||||
| # This really could be done prettier. | ||||
| @ -100,11 +102,6 @@ Patch9100: exa-only-draw-valid-trapezoids.patch | ||||
| # because the display-managers are not ready yet, do not upstream | ||||
| Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch | ||||
| 
 | ||||
| # submitted http://lists.x.org/archives/xorg-devel/2014-June/042826.html | ||||
| # needed to allow X to start on arm and other devices without video on pci buses | ||||
| Patch10100: platform-support-non-pci-platform-devices.patch | ||||
| Patch10101: add-SERVER_SUPPORTS_NON_PCI_PLATFORM_DEVS.patch | ||||
| 
 | ||||
| # submitted http://lists.x.org/archives/xorg-devel/2014-July/042936.html | ||||
| Patch10200: 0001-xwayland-Snap-damage-reports-to-the-bounding-box.patch | ||||
| 
 | ||||
| @ -622,6 +619,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete | ||||
| 
 | ||||
| 
 | ||||
| %changelog | ||||
| * Tue Jul  8 2014 Hans de Goede <hdegoede@redhat.com> - 1.15.99.904-1 | ||||
| - Update to 1.15.99.904 | ||||
| 
 | ||||
| * Wed Jul  2 2014 Hans de Goede <hdegoede@redhat.com> - 1.15.99.903-5 | ||||
| - Fix code including glamor.h not compiling due to strndup re-definition | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user