aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-03-22 11:00:50 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-13 11:14:06 -0400
commit628280f36e4fdbde6c2efac3f3c574d5a41dee88 (patch)
tree8e93dda44d371a347a4eec47aa3073a15e322a6b /drivers/gpu
parentb51aa5a05a594d19b900b23e54b401f453be2f90 (diff)
drm/i915: Sanitize BIOS debugging bits from PIPECONF
commit f47166d2b0001fcb752b40c5a2d4db986dfbea68 upstream. Quoting the BSpec from time immemorial: PIPEACONF, bits 28:27: Frame Start Delay (Debug) Used to delay the frame start signal that is sent to the display planes. Care must be taken to insure that there are enough lines during VBLANK to support this setting. An instance of the BIOS leaving these bits set was found in the wild, where it caused our modesetting to go all squiffy and skewiff. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47271 Reported-and-tested-by: Eva Wang <evawang@linpus.com> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=43012 Reported-and-tested-by: Carl Richell <carl@system76.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h1
-rw-r--r--drivers/gpu/drm/i915/intel_display.c6
2 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 56315cbef1e..b05c256d496 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2274,6 +2274,7 @@
2274#define PIPECONF_DISABLE 0 2274#define PIPECONF_DISABLE 0
2275#define PIPECONF_DOUBLE_WIDE (1<<30) 2275#define PIPECONF_DOUBLE_WIDE (1<<30)
2276#define I965_PIPECONF_ACTIVE (1<<30) 2276#define I965_PIPECONF_ACTIVE (1<<30)
2277#define PIPECONF_FRAME_START_DELAY_MASK (3<<27)
2277#define PIPECONF_SINGLE_WIDE 0 2278#define PIPECONF_SINGLE_WIDE 0
2278#define PIPECONF_PIPE_UNLOCKED 0 2279#define PIPECONF_PIPE_UNLOCKED 0
2279#define PIPECONF_PIPE_LOCKED (1<<25) 2280#define PIPECONF_PIPE_LOCKED (1<<25)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 57f90437d08..f150a15279e 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6580,6 +6580,12 @@ static void intel_sanitize_modesetting(struct drm_device *dev,
6580 struct drm_i915_private *dev_priv = dev->dev_private; 6580 struct drm_i915_private *dev_priv = dev->dev_private;
6581 u32 reg, val; 6581 u32 reg, val;
6582 6582
6583 /* Clear any frame start delays used for debugging left by the BIOS */
6584 for_each_pipe(pipe) {
6585 reg = PIPECONF(pipe);
6586 I915_WRITE(reg, I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
6587 }
6588
6583 if (HAS_PCH_SPLIT(dev)) 6589 if (HAS_PCH_SPLIT(dev))
6584 return; 6590 return;
6585 6591