aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2014-08-14 18:21:57 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-03 05:05:09 -0400
commit67adc6442a4ba9cbe412c4fc698a7e14333027e5 (patch)
tree1bc946dad58d3532821fb78664408eea5a9f4cfe /drivers/gpu/drm
parent575f7ab754c49466090ed3fafa91c8efb3a5afb6 (diff)
drm/i915: Disable double wide even when leaving the pipe on
Disable double wide even if the pipe quirk compels us to leave the pipe running. Double wide has certain implications for the plane assignments so best keep it off. Also helps resuming from S3 on the Fujitsu-Siemens Lifebook S6010 when double wide was enabled prior to suspend. We do leave the pixel clock ticking at the original rate which would require double wide to be enabled. But since the planes are all disabled I'm hoping that the overly fast clock won't cause any problems. Seems to be fine so far. v2: Disable double wide also when turning the pipe off v3: Reorder wrt. force pipe B quirk Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Tested-by: Thomas Richter <richter@rus.uni-stuttgart.de> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c7e05ed36e1d..d1d698c99f54 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2066,17 +2066,25 @@ static void intel_disable_pipe(struct intel_crtc *crtc)
2066 assert_cursor_disabled(dev_priv, pipe); 2066 assert_cursor_disabled(dev_priv, pipe);
2067 assert_sprites_disabled(dev_priv, pipe); 2067 assert_sprites_disabled(dev_priv, pipe);
2068 2068
2069 /* Don't disable pipe A or pipe A PLLs if needed */
2070 if (pipe == PIPE_A && (dev_priv->quirks & QUIRK_PIPEA_FORCE))
2071 return;
2072
2073 reg = PIPECONF(cpu_transcoder); 2069 reg = PIPECONF(cpu_transcoder);
2074 val = I915_READ(reg); 2070 val = I915_READ(reg);
2075 if ((val & PIPECONF_ENABLE) == 0) 2071 if ((val & PIPECONF_ENABLE) == 0)
2076 return; 2072 return;
2077 2073
2078 I915_WRITE(reg, val & ~PIPECONF_ENABLE); 2074 /*
2079 intel_wait_for_pipe_off(crtc); 2075 * Double wide has implications for planes
2076 * so best keep it disabled when not needed.
2077 */
2078 if (crtc->config.double_wide)
2079 val &= ~PIPECONF_DOUBLE_WIDE;
2080
2081 /* Don't disable pipe or pipe PLLs if needed */
2082 if (!(pipe == PIPE_A && dev_priv->quirks & QUIRK_PIPEA_FORCE))
2083 val &= ~PIPECONF_ENABLE;
2084
2085 I915_WRITE(reg, val);
2086 if ((val & PIPECONF_ENABLE) == 0)
2087 intel_wait_for_pipe_off(crtc);
2080} 2088}
2081 2089
2082/* 2090/*