aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2018-10-03 10:49:51 -0400
committerRodrigo Vivi <rodrigo.vivi@intel.com>2018-10-17 21:23:36 -0400
commit7cada4d0b7a0fb813dbc9777fec092e9ed0546e9 (patch)
treed48bcfc8e248e552436a753a7aded97e557f0d7d
parent3f6d5ba173da9a41c799146a3ad999da2158716a (diff)
drm/i915: Restore vblank interrupts earlier
Plane sanitation needs vblank interrupts (on account of CxSR disable). So let's restore vblank interrupts earlier. v2: Make it actually build v3: Add comment to explain why we need this (Daniel) Cc: stable@vger.kernel.org Cc: Dennis <dennis.nezic@utoronto.ca> Tested-by: Dennis <dennis.nezic@utoronto.ca> Tested-by: Peter Nowee <peter.nowee@gmail.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105637 Fixes: b1e01595a66d ("drm/i915: Redo plane sanitation during readout") Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20181003144951.4397-1-ville.syrjala@linux.intel.com (cherry picked from commit 68bc30deac625b8be8d3950b30dc93d09a3645f5) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
-rw-r--r--drivers/gpu/drm/i915/intel_display.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index aa6e79dfd571..ce23b0546407 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -15526,13 +15526,9 @@ static void intel_sanitize_crtc(struct intel_crtc *crtc,
15526 I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK); 15526 I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK);
15527 } 15527 }
15528 15528
15529 /* restore vblank interrupts to correct state */
15530 drm_crtc_vblank_reset(&crtc->base);
15531 if (crtc->active) { 15529 if (crtc->active) {
15532 struct intel_plane *plane; 15530 struct intel_plane *plane;
15533 15531
15534 drm_crtc_vblank_on(&crtc->base);
15535
15536 /* Disable everything but the primary plane */ 15532 /* Disable everything but the primary plane */
15537 for_each_intel_plane_on_crtc(dev, crtc, plane) { 15533 for_each_intel_plane_on_crtc(dev, crtc, plane) {
15538 const struct intel_plane_state *plane_state = 15534 const struct intel_plane_state *plane_state =
@@ -15874,7 +15870,6 @@ intel_modeset_setup_hw_state(struct drm_device *dev,
15874 struct drm_modeset_acquire_ctx *ctx) 15870 struct drm_modeset_acquire_ctx *ctx)
15875{ 15871{
15876 struct drm_i915_private *dev_priv = to_i915(dev); 15872 struct drm_i915_private *dev_priv = to_i915(dev);
15877 enum pipe pipe;
15878 struct intel_crtc *crtc; 15873 struct intel_crtc *crtc;
15879 struct intel_encoder *encoder; 15874 struct intel_encoder *encoder;
15880 int i; 15875 int i;
@@ -15887,15 +15882,23 @@ intel_modeset_setup_hw_state(struct drm_device *dev,
15887 /* HW state is read out, now we need to sanitize this mess. */ 15882 /* HW state is read out, now we need to sanitize this mess. */
15888 get_encoder_power_domains(dev_priv); 15883 get_encoder_power_domains(dev_priv);
15889 15884
15890 intel_sanitize_plane_mapping(dev_priv); 15885 /*
15886 * intel_sanitize_plane_mapping() may need to do vblank
15887 * waits, so we need vblank interrupts restored beforehand.
15888 */
15889 for_each_intel_crtc(&dev_priv->drm, crtc) {
15890 drm_crtc_vblank_reset(&crtc->base);
15891 15891
15892 for_each_intel_encoder(dev, encoder) { 15892 if (crtc->active)
15893 intel_sanitize_encoder(encoder); 15893 drm_crtc_vblank_on(&crtc->base);
15894 } 15894 }
15895 15895
15896 for_each_pipe(dev_priv, pipe) { 15896 intel_sanitize_plane_mapping(dev_priv);
15897 crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
15898 15897
15898 for_each_intel_encoder(dev, encoder)
15899 intel_sanitize_encoder(encoder);
15900
15901 for_each_intel_crtc(&dev_priv->drm, crtc) {
15899 intel_sanitize_crtc(crtc, ctx); 15902 intel_sanitize_crtc(crtc, ctx);
15900 intel_dump_pipe_config(crtc, crtc->config, 15903 intel_dump_pipe_config(crtc, crtc->config,
15901 "[setup_hw_state]"); 15904 "[setup_hw_state]");