diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 20 |
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 | /* |