xorg-x11-drv-intel: Update to 2.21.0.

This is a major update to the latest stable version.
Requires xorg-x11-server-devel >= 1.13.2 to be sure to compile for the new version of the x-server.
This commit is contained in:
Stefan Schantl 2013-02-05 20:35:32 +01:00
parent a64cbd4f50
commit 825f07179b
9 changed files with 12 additions and 336 deletions

View File

@ -1,12 +0,0 @@
Index: xf86-video-intel-2.11.0/src/drmmode_display.c
===================================================================
--- xf86-video-intel-2.11.0/src/drmmode_display.c
+++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-04-29 00:18:34.000000000 +0200
@@ -103,6 +103,7 @@
"asus-laptop",
"eeepc",
"thinkpad_screen",
+ "mbp_backlight",
"acpi_video1",
"acpi_video0",
"fujitsu-laptop",

View File

@ -1,37 +0,0 @@
diff -up xf86-video-intel-20100319/src/drmmode_display.c.jx xf86-video-intel-20100319/src/drmmode_display.c
--- xf86-video-intel-20100319/src/drmmode_display.c.jx 2010-03-22 13:24:13.483183499 -0400
+++ xf86-video-intel-20100319/src/drmmode_display.c 2010-03-22 13:25:59.810184060 -0400
@@ -1452,7 +1452,7 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn,
intel_screen_private *intel = intel_get_screen_private(scrn);
struct drm_i915_getparam gp;
drmmode_ptr drmmode;
- unsigned int i;
+ unsigned int i, lvds = -1;
int has_flipping = 0;
drmmode = xnfalloc(sizeof *drmmode);
@@ -1473,9 +1473,22 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn,
drmmode->mode_res->max_height);
for (i = 0; i < drmmode->mode_res->count_crtcs; i++)
drmmode_crtc_init(scrn, drmmode, i);
+
+ /* do LVDS first */
+ for (i = 0; i < drmmode->mode_res->count_connectors; i++) {
+ drmModeConnectorPtr koutput =
+ drmModeGetConnector(drmmode->fd,
+ drmmode->mode_res->connectors[i]);
+ if (koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) {
+ drmmode_output_init(scrn, drmmode, i);
+ lvds = i;
+ }
+ drmModeFreeConnector(koutput);
+ }
for (i = 0; i < drmmode->mode_res->count_connectors; i++)
- drmmode_output_init(scrn, drmmode, i);
+ if (i != lvds)
+ drmmode_output_init(scrn, drmmode, i);
xf86InitialConfiguration(scrn, TRUE);

View File

@ -1,33 +0,0 @@
diff -up xf86-video-intel-2.11.0/src/drmmode_display.c.no-flip xf86-video-intel-2.11.0/src/drmmode_display.c
--- xf86-video-intel-2.11.0/src/drmmode_display.c.no-flip 2010-05-03 15:30:19.000000000 -0400
+++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-05-03 15:30:59.000000000 -0400
@@ -1504,10 +1504,15 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn,
gp.value = &has_flipping;
(void)drmCommandWriteRead(intel->drmSubFD, DRM_I915_GETPARAM, &gp,
sizeof(gp));
+
+ xf86DrvMsg(scrn->scrnIndex, X_INFO,
+ "Pageflipping %s in kernel, %s disabled in X\n",
+ has_flipping ? "enabled" : "disabled",
+ has_flipping ? "but" : "and");
if (has_flipping) {
xf86DrvMsg(scrn->scrnIndex, X_INFO,
- "Kernel page flipping support detected, enabling\n");
- intel->use_pageflipping = TRUE;
+ "Don't panic: https://bugzilla.redhat.com/588421\n");
+ intel->use_pageflipping = FALSE;
drmmode->flip_count = 0;
drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION;
drmmode->event_context.vblank_handler = drmmode_vblank_handler;
diff -up xf86-video-intel-2.11.0/src/i830_dri.c.no-flip xf86-video-intel-2.11.0/src/i830_dri.c
--- xf86-video-intel-2.11.0/src/i830_dri.c.no-flip 2010-03-29 14:23:02.000000000 -0400
+++ xf86-video-intel-2.11.0/src/i830_dri.c 2010-05-03 15:30:19.000000000 -0400
@@ -1013,7 +1013,7 @@ Bool I830DRI2ScreenInit(ScreenPtr screen
info.CopyRegion = I830DRI2CopyRegion;
#if DRI2INFOREC_VERSION >= 4
- if (intel->use_pageflipping) {
+ if (intel->use_pageflipping || 1) {
info.version = 4;
info.ScheduleSwap = I830DRI2ScheduleSwap;
info.GetMSC = I830DRI2GetMSC;

View File

@ -1,16 +0,0 @@
diff -up xf86-video-intel-2.11.0/src/drmmode_display.c.jx xf86-video-intel-2.11.0/src/drmmode_display.c
--- xf86-video-intel-2.11.0/src/drmmode_display.c.jx 2010-04-16 10:28:08.000000000 -0400
+++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-04-26 15:28:58.000000000 -0400
@@ -689,6 +689,12 @@ drmmode_output_mode_valid(xf86OutputPtr
else
return MODE_OK;
}
+
+ /* I don't actually believe any VGA is this good */
+ if (koutput->connector_type == DRM_MODE_CONNECTOR_VGA)
+ if (pModes->Clock > 250000)
+ return MODE_CLOCK_HIGH;
+
return MODE_OK;
}

View File

@ -1,40 +0,0 @@
From feff2ec80eeeba5074d19efcddf4867adf639b4f Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Mon, 5 Jul 2010 09:07:08 +1000
Subject: [PATCH] uxa: don't compare planemask with FB_ALLONES.
planemask is an unsigned long initialised to ~0, on 64-bit this is not equal
to an (unsigned int)-1.
Use the macro provided to do this.
Signed-off-by: Dave Airlie <airlied@redhat.com>
---
uxa/uxa-accel.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c
index ded66a1..633b433 100644
--- a/uxa/uxa-accel.c
+++ b/uxa/uxa-accel.c
@@ -81,7 +81,7 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n,
if (!dst_pixmap)
goto fallback;
- if (pGC->alu != GXcopy || pGC->planemask != FB_ALLONES)
+ if (pGC->alu != GXcopy || !UXA_PM_IS_SOLID(pDrawable, pGC->planemask))
goto solid;
format = PictureMatchFormat(screen,
@@ -1048,7 +1048,7 @@ uxa_fill_region_solid(DrawablePtr pDrawable,
extents = REGION_EXTENTS(screen, pRegion);
/* Using GEM, the relocation costs outweigh the advantages of the blitter */
- if (nbox == 1 || (alu != GXcopy && alu != GXclear) || planemask != FB_ALLONES) {
+ if (nbox == 1 || (alu != GXcopy && alu != GXclear) || !UXA_PM_IS_SOLID(&pixmap->drawable, planemask)) {
try_solid:
if (uxa_screen->info->check_solid &&
!uxa_screen->info->check_solid(&pixmap->drawable, alu, planemask))
--
1.7.1

View File

@ -1,23 +0,0 @@
diff -up xf86-video-intel-20090908/src/drmmode_display.c.jx xf86-video-intel-20090908/src/drmmode_display.c
--- xf86-video-intel-20090908/src/drmmode_display.c.jx 2009-09-08 14:30:55.000000000 -0400
+++ xf86-video-intel-20090908/src/drmmode_display.c 2009-09-08 14:31:09.000000000 -0400
@@ -1195,8 +1195,19 @@ drmmode_output_get_property(xf86OutputPt
return TRUE;
}
+#ifdef RANDR_GET_CRTC_INTERFACE
+static xf86CrtcPtr
+drmmode_get_crtc(xf86OutputPtr output)
+{
+ return output->crtc;
+}
+#endif
+
static const xf86OutputFuncsRec drmmode_output_funcs = {
.create_resources = drmmode_output_create_resources,
+#ifdef RANDR_GET_CRTC_INTERFACE
+ .get_crtc = drmmode_get_crtc,
+#endif
#ifdef RANDR_12_INTERFACE
.set_property = drmmode_output_set_property,
.get_property = drmmode_output_get_property,

View File

@ -1,23 +0,0 @@
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index d50e640..d6c7cd3 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -412,6 +412,18 @@ drmmode_output_detect(xf86OutputPtr output)
drmmode_output->mode_output =
drmModeGetConnector(drmmode->fd, drmmode_output->output_id);
+ switch (drmmode_output->mode_output->connector_type) {
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ /* FIXME: KMS svideo detection is flaky an causes X to
+ * come up in 1024x768 when it tries to pick a clone
+ * mode that fits both the panel and the tv out. Once
+ * KMS learns how to detect svideo better we can
+ * remove this. */
+ return DRM_MODE_UNKNOWNCONNECTION;
+ default:
+ break;
+ }
+
switch (drmmode_output->mode_output->connection) {
case DRM_MODE_CONNECTED:
status = XF86OutputStatusConnected;

View File

@ -1,146 +0,0 @@
diff -up xf86-video-intel-2.12.0/src/i830_driver.c.uevent xf86-video-intel-2.12.0/src/i830_driver.c
--- xf86-video-intel-2.12.0/src/i830_driver.c.uevent 2010-06-24 16:29:49.000000000 -0400
+++ xf86-video-intel-2.12.0/src/i830_driver.c 2010-06-25 11:40:01.335975581 -0400
@@ -81,6 +81,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "i915_drm.h"
#include <xf86drmMode.h>
+#include "libudev.h"
+
#define BIT(x) (1 << (x))
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define NB_OF(x) (sizeof (x) / sizeof (*x))
@@ -996,6 +998,80 @@ int i830_crtc_to_pipe(xf86CrtcPtr crtc)
return drmmode_get_pipe_from_crtc_id(intel->bufmgr, crtc);
}
+static void
+I830HandleUEvents(int fd, void *closure)
+{
+ ScrnInfoPtr scrn = closure;
+ intel_screen_private *intel = intel_get_screen_private(scrn);
+ struct udev_device *dev;
+
+ dev = udev_monitor_receive_device(intel->uevent_monitor);
+ if (!dev)
+ return;
+
+ /*
+ * technically we should inspect the event to see that it's a hotplug.
+ * but we know it's a hotplug, we don't get events for anything else.
+ * XXX but we should definitely trim by drm node
+ */
+
+ RRGetInfo(screenInfo.screens[scrn->scrnIndex], TRUE);
+
+ udev_device_unref(dev);
+}
+
+static void
+I830UeventInit(ScrnInfoPtr scrn)
+{
+ intel_screen_private *intel = intel_get_screen_private(scrn);
+ struct udev *u;
+ struct udev_monitor *mon;
+
+ u = udev_new();
+ if (!u)
+ return;
+
+ mon = udev_monitor_new_from_netlink(u, "udev");
+
+ if (!mon) {
+ udev_unref(u);
+ return;
+ }
+
+ if (udev_monitor_filter_add_match_subsystem_devtype(mon,
+ "drm",
+ "drm_minor") < 0 ||
+ udev_monitor_enable_receiving(mon) < 0)
+ {
+ udev_monitor_unref(mon);
+ udev_unref(u);
+ return;
+ }
+
+ intel->uevent_handler =
+ xf86AddGeneralHandler(udev_monitor_get_fd(mon),
+ I830HandleUEvents,
+ scrn);
+
+ intel->uevent_monitor = mon;
+}
+
+static void
+I830UeventFini(ScrnInfoPtr scrn)
+{
+ intel_screen_private *intel = intel_get_screen_private(scrn);
+
+ if (intel->uevent_handler)
+ {
+ struct udev *u = udev_monitor_get_udev(intel->uevent_monitor);
+
+ xf86RemoveGeneralHandler(intel->uevent_handler);
+
+ udev_monitor_unref(intel->uevent_monitor);
+ udev_unref(u);
+ }
+}
+
static Bool
I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
{
@@ -1233,6 +1309,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr
intel->suspended = FALSE;
+ I830UeventInit(scrn);
+
return uxa_resources_init(screen);
}
@@ -1306,7 +1384,8 @@ static Bool I830CloseScreen(int scrnInde
{
ScrnInfoPtr scrn = xf86Screens[scrnIndex];
intel_screen_private *intel = intel_get_screen_private(scrn);
-
+
+ I830UeventFini(scrn);
if (scrn->vtSema == TRUE) {
I830LeaveVT(scrnIndex, 0);
}
diff -up xf86-video-intel-2.12.0/src/i830.h.uevent xf86-video-intel-2.12.0/src/i830.h
--- xf86-video-intel-2.12.0/src/i830.h.uevent 2010-06-24 16:29:49.000000000 -0400
+++ xf86-video-intel-2.12.0/src/i830.h 2010-06-25 11:39:15.665029821 -0400
@@ -47,6 +47,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
#ifndef _I830_H_
#define _I830_H_
+#include "libudev.h"
+
#include "xf86_OSproc.h"
#include "compiler.h"
#include "xf86PciInfo.h"
@@ -432,6 +434,9 @@ typedef struct intel_screen_private {
*/
Bool fallback_debug;
unsigned debug_flush;
+
+ struct udev_monitor *uevent_monitor;
+ InputHandlerProc uevent_handler;
} intel_screen_private;
enum {
diff -up xf86-video-intel-2.12.0/src/Makefile.am.uevent xf86-video-intel-2.12.0/src/Makefile.am
--- xf86-video-intel-2.12.0/src/Makefile.am.uevent 2010-06-24 16:29:37.000000000 -0400
+++ xf86-video-intel-2.12.0/src/Makefile.am 2010-06-25 11:39:15.665029821 -0400
@@ -32,7 +32,7 @@ AM_CFLAGS = @CWARNFLAGS@ @XORG_CFLAGS@ @
intel_drv_la_LTLIBRARIES = intel_drv.la
intel_drv_la_LDFLAGS = -module -avoid-version
intel_drv_ladir = @moduledir@/drivers
-intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la
+intel_drv_la_LIBADD = -ludev -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la
intel_drv_la_LIBADD += @PCIACCESS_LIBS@
INTEL_DRI_SRCS = \

View File

@ -4,7 +4,7 @@
###############################################################################
name = xorg-x11-drv-intel
version = 2.12.0
version = 2.21.0
release = 1
maintainer = Stefan Schantl <stefan.schantl@ipfire.org>
@ -17,8 +17,12 @@ description
X.Org X11 intel video driver.
end
# Specify the X Server version to build for.
x11_server_ver = 1.13.2
thisapp = xf86-video-intel-%{version}
source_dl = http://ftp.x.org/pub/individual/driver/
sources = xf86-video-intel-%{version}.tar.bz2
build
requires
@ -30,16 +34,14 @@ build
libXvMC-devel
libxcb-devel
libtool
mesa-devel
mesa-devel >= 9.0.2
pkg-config
xcb-util-devel
xorg-x11-proto-devel
xorg-x11-server-devel
xorg-x11-server-devel >= %{x11_server_ver}
xorg-x11-util-macros
end
DIR_APP = %{DIR_SRC}/xf86-video-intel-%{version}
CFLAGS += -Wl,-z,lazy
configure_options += \
@ -62,6 +64,10 @@ end
packages
package %{name}
requires
dri-drivers >= 9.0.2
xorg-x11-server >= %{x11_server_ver}
end
end
package %{name}-debuginfo