[kernel] r17017 - in dists/squeeze/linux-2.6/debian: . patches/bugfix/x86 patches/series
Ben Hutchings
benh at alioth.debian.org
Mon Mar 7 01:26:52 UTC 2011
Author: benh
Date: Mon Mar 7 01:26:50 2011
New Revision: 17017
Log:
drm/i915: Add pipe A force quirk for some laptops (Closes: #608148)
Added:
dists/squeeze/linux-2.6/debian/patches/bugfix/x86/drm-i915-add-pipe-A-force-quirks-to-i915-driver.patch
Modified:
dists/squeeze/linux-2.6/debian/changelog
dists/squeeze/linux-2.6/debian/patches/series/31
Modified: dists/squeeze/linux-2.6/debian/changelog
==============================================================================
--- dists/squeeze/linux-2.6/debian/changelog Mon Mar 7 01:25:12 2011 (r17016)
+++ dists/squeeze/linux-2.6/debian/changelog Mon Mar 7 01:26:50 2011 (r17017)
@@ -45,6 +45,7 @@
* [x86] Enable VT6656, loading firmware from a separate file (requires
firmware-linux-nonfree 0.28+squeeze1) (Closes: #568454)
* usbfs: Show correct speed for SuperSpeed USB devices (Closes: #613531)
+ * drm/i915: Add pipe A force quirk for some laptops (Closes: #608148)
[ dann frazier ]
* xfs: Fix information leak using stale NFS handle (CVE-2010-2943)
Added: dists/squeeze/linux-2.6/debian/patches/bugfix/x86/drm-i915-add-pipe-A-force-quirks-to-i915-driver.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/squeeze/linux-2.6/debian/patches/bugfix/x86/drm-i915-add-pipe-A-force-quirks-to-i915-driver.patch Mon Mar 7 01:26:50 2011 (r17017)
@@ -0,0 +1,147 @@
+From: Jesse Barnes <jbarnes at virtuousgeek.org>
+Date: Mon, 19 Jul 2010 13:53:12 -0700
+Subject: [PATCH] drm/i915: add pipe A force quirks to i915 driver
+
+commit b690e96cf9e6a6cde6f0393de47bdd6317ddb5de upstream.
+
+Ported over from the old UMS list. Unfortunately they're still
+necessary especially on older laptop platforms.
+
+Fixes https://bugs.freedesktop.org/show_bug.cgi?id=22126.
+
+Tested-by: Xavier <shiningxc at gmail.com>
+Tested-by: Diego Escalante Urrelo <diegoe at gnome.org>
+Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
+Signed-off-by: Eric Anholt <eric at anholt.net>
+[bwh: Adjust context for 2.6.33]
+---
+ drivers/gpu/drm/i915/i915_drv.h | 4 ++
+ drivers/gpu/drm/i915/intel_display.c | 69 +++++++++++++++++++++++++++++++++-
+ 2 files changed, 72 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index ecc4fbe..5852429 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -193,6 +193,8 @@ struct intel_device_info {
+ u8 cursor_needs_physical : 1;
+ };
+
++#define QUIRK_PIPEA_FORCE (1<<0)
++
+ typedef struct drm_i915_private {
+ struct drm_device *dev;
+
+@@ -306,6 +308,8 @@ typedef struct drm_i915_private {
+ /* Display functions */
+ struct drm_i915_display_funcs display;
+
++ unsigned long quirks;
++
+ /* Register state */
+ bool modeset_on_lid;
+ u8 saveLBB;
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 4899596..6a94a8e 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -2031,6 +2031,11 @@ static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode)
+ intel_wait_for_vblank(dev);
+ }
+
++ /* Don't disable pipe A or pipe A PLLs if needed */
++ if (pipeconf_reg == PIPEACONF &&
++ (dev_priv->quirks & QUIRK_PIPEA_FORCE))
++ goto skip_pipe_off;
++
+ /* Next, disable display pipes */
+ temp = I915_READ(pipeconf_reg);
+ if ((temp & PIPEACONF_ENABLE) != 0) {
+@@ -2046,7 +2051,7 @@ static void i9xx_crtc_dpms(struct drm_crtc *crtc, int mode)
+ I915_WRITE(dpll_reg, temp & ~DPLL_VCO_ENABLE);
+ I915_READ(dpll_reg);
+ }
+-
++ skip_pipe_off:
+ /* Wait for the clocks to turn off. */
+ udelay(150);
+ break;
+@@ -4840,6 +4845,66 @@ static void intel_init_display(struct drm_device *dev)
+ }
+ }
+
++/*
++ * Some BIOSes insist on assuming the GPU's pipe A is enabled at suspend,
++ * resume, or other times. This quirk makes sure that's the case for
++ * affected systems.
++ */
++static void quirk_pipea_force (struct drm_device *dev)
++{
++ struct drm_i915_private *dev_priv = dev->dev_private;
++
++ dev_priv->quirks |= QUIRK_PIPEA_FORCE;
++ DRM_DEBUG_DRIVER("applying pipe a force quirk\n");
++}
++
++struct intel_quirk {
++ int device;
++ int subsystem_vendor;
++ int subsystem_device;
++ void (*hook)(struct drm_device *dev);
++};
++
++struct intel_quirk intel_quirks[] = {
++ /* HP Compaq 2730p needs pipe A force quirk (LP: #291555) */
++ { 0x2a42, 0x103c, 0x30eb, quirk_pipea_force },
++ /* HP Mini needs pipe A force quirk (LP: #322104) */
++ { 0x27ae,0x103c, 0x361a, quirk_pipea_force },
++
++ /* Thinkpad R31 needs pipe A force quirk */
++ { 0x3577, 0x1014, 0x0505, quirk_pipea_force },
++ /* Toshiba Protege R-205, S-209 needs pipe A force quirk */
++ { 0x2592, 0x1179, 0x0001, quirk_pipea_force },
++
++ /* ThinkPad X30 needs pipe A force quirk (LP: #304614) */
++ { 0x3577, 0x1014, 0x0513, quirk_pipea_force },
++ /* ThinkPad X40 needs pipe A force quirk */
++
++ /* ThinkPad T60 needs pipe A force quirk (bug #16494) */
++ { 0x2782, 0x17aa, 0x201a, quirk_pipea_force },
++
++ /* 855 & before need to leave pipe A & dpll A up */
++ { 0x3582, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
++ { 0x2562, PCI_ANY_ID, PCI_ANY_ID, quirk_pipea_force },
++};
++
++static void intel_init_quirks(struct drm_device *dev)
++{
++ struct pci_dev *d = dev->pdev;
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
++ struct intel_quirk *q = &intel_quirks[i];
++
++ if (d->device == q->device &&
++ (d->subsystem_vendor == q->subsystem_vendor ||
++ q->subsystem_vendor == PCI_ANY_ID) &&
++ (d->subsystem_device == q->subsystem_device ||
++ q->subsystem_device == PCI_ANY_ID))
++ q->hook(dev);
++ }
++}
++
+ void intel_modeset_init(struct drm_device *dev)
+ {
+ struct drm_i915_private *dev_priv = dev->dev_private;
+@@ -4853,6 +4918,8 @@ void intel_modeset_init(struct drm_device *dev)
+
+ dev->mode_config.funcs = (void *)&intel_mode_funcs;
+
++ intel_init_quirks(dev);
++
+ intel_init_display(dev);
+
+ if (IS_I965G(dev)) {
+--
+1.7.4.1
+
Modified: dists/squeeze/linux-2.6/debian/patches/series/31
==============================================================================
--- dists/squeeze/linux-2.6/debian/patches/series/31 Mon Mar 7 01:25:12 2011 (r17016)
+++ dists/squeeze/linux-2.6/debian/patches/series/31 Mon Mar 7 01:26:50 2011 (r17017)
@@ -56,3 +56,4 @@
+ bugfix/all/ipv6-Silence-privacy-extensions-initialization.patch
+ features/all/vt6656-Use-request_firmware-to-load-firmware.patch
+ bugfix/all/usb_superspeed_devices_spd.patch
++ bugfix/x86/drm-i915-add-pipe-A-force-quirks-to-i915-driver.patch
More information about the Kernel-svn-changes
mailing list