aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-09-10 04:39:55 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-09-10 05:15:47 -0400
commitf37fcc2a263b3a6d9fb9730e0d828a3f9d15a8b0 (patch)
tree189345dabf9b53726ae8cfa3766bea40d5236135 /drivers/gpu/drm/i915/intel_display.c
parent46ba614c0045b0b5354397010578e8b56d621251 (diff)
drm/i915: Call intel_update_watermarks() in specific place during modeset
Make the call to intel_update_watermarks() just once or twice during modeset. Ideally it should happen independently when each plane gets enabled/disabled, but for now it seems better to keep it in central place. We can improve things when we get all the planes sorted out in a better way. When enabling set up the watermarks just before the pipe is enabled. And when disabling we need to wait until we've marked the crtc as inactive, as otherwise intel_crtc_active() would still think the pipe is enabled and the computed watermarks would reflect that. v2: Pimp up the commit message a bit Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b7d212ccbbf3..1f207e46dbe4 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -3262,8 +3262,6 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
3262 intel_set_cpu_fifo_underrun_reporting(dev, pipe, true); 3262 intel_set_cpu_fifo_underrun_reporting(dev, pipe, true);
3263 intel_set_pch_fifo_underrun_reporting(dev, pipe, true); 3263 intel_set_pch_fifo_underrun_reporting(dev, pipe, true);
3264 3264
3265 intel_update_watermarks(crtc);
3266
3267 for_each_encoder_on_crtc(dev, crtc, encoder) 3265 for_each_encoder_on_crtc(dev, crtc, encoder)
3268 if (encoder->pre_enable) 3266 if (encoder->pre_enable)
3269 encoder->pre_enable(encoder); 3267 encoder->pre_enable(encoder);
@@ -3286,6 +3284,7 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
3286 */ 3284 */
3287 intel_crtc_load_lut(crtc); 3285 intel_crtc_load_lut(crtc);
3288 3286
3287 intel_update_watermarks(crtc);
3289 intel_enable_pipe(dev_priv, pipe, 3288 intel_enable_pipe(dev_priv, pipe,
3290 intel_crtc->config.has_pch_encoder, false); 3289 intel_crtc->config.has_pch_encoder, false);
3291 intel_enable_plane(dev_priv, plane, pipe); 3290 intel_enable_plane(dev_priv, plane, pipe);
@@ -3372,8 +3371,6 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
3372 if (intel_crtc->config.has_pch_encoder) 3371 if (intel_crtc->config.has_pch_encoder)
3373 intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true); 3372 intel_set_pch_fifo_underrun_reporting(dev, TRANSCODER_A, true);
3374 3373
3375 intel_update_watermarks(crtc);
3376
3377 if (intel_crtc->config.has_pch_encoder) 3374 if (intel_crtc->config.has_pch_encoder)
3378 dev_priv->display.fdi_link_train(crtc); 3375 dev_priv->display.fdi_link_train(crtc);
3379 3376
@@ -3394,6 +3391,7 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
3394 intel_ddi_set_pipe_settings(crtc); 3391 intel_ddi_set_pipe_settings(crtc);
3395 intel_ddi_enable_transcoder_func(crtc); 3392 intel_ddi_enable_transcoder_func(crtc);
3396 3393
3394 intel_update_watermarks(crtc);
3397 intel_enable_pipe(dev_priv, pipe, 3395 intel_enable_pipe(dev_priv, pipe,
3398 intel_crtc->config.has_pch_encoder, false); 3396 intel_crtc->config.has_pch_encoder, false);
3399 intel_enable_plane(dev_priv, plane, pipe); 3397 intel_enable_plane(dev_priv, plane, pipe);
@@ -3665,7 +3663,6 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
3665 return; 3663 return;
3666 3664
3667 intel_crtc->active = true; 3665 intel_crtc->active = true;
3668 intel_update_watermarks(crtc);
3669 3666
3670 for_each_encoder_on_crtc(dev, crtc, encoder) 3667 for_each_encoder_on_crtc(dev, crtc, encoder)
3671 if (encoder->pre_pll_enable) 3668 if (encoder->pre_pll_enable)
@@ -3684,6 +3681,7 @@ static void valleyview_crtc_enable(struct drm_crtc *crtc)
3684 3681
3685 intel_crtc_load_lut(crtc); 3682 intel_crtc_load_lut(crtc);
3686 3683
3684 intel_update_watermarks(crtc);
3687 intel_enable_pipe(dev_priv, pipe, false, is_dsi); 3685 intel_enable_pipe(dev_priv, pipe, false, is_dsi);
3688 intel_enable_plane(dev_priv, plane, pipe); 3686 intel_enable_plane(dev_priv, plane, pipe);
3689 intel_enable_planes(crtc); 3687 intel_enable_planes(crtc);
@@ -3710,7 +3708,6 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
3710 return; 3708 return;
3711 3709
3712 intel_crtc->active = true; 3710 intel_crtc->active = true;
3713 intel_update_watermarks(crtc);
3714 3711
3715 for_each_encoder_on_crtc(dev, crtc, encoder) 3712 for_each_encoder_on_crtc(dev, crtc, encoder)
3716 if (encoder->pre_enable) 3713 if (encoder->pre_enable)
@@ -3722,6 +3719,7 @@ static void i9xx_crtc_enable(struct drm_crtc *crtc)
3722 3719
3723 intel_crtc_load_lut(crtc); 3720 intel_crtc_load_lut(crtc);
3724 3721
3722 intel_update_watermarks(crtc);
3725 intel_enable_pipe(dev_priv, pipe, false, false); 3723 intel_enable_pipe(dev_priv, pipe, false, false);
3726 intel_enable_plane(dev_priv, plane, pipe); 3724 intel_enable_plane(dev_priv, plane, pipe);
3727 intel_enable_planes(crtc); 3725 intel_enable_planes(crtc);
@@ -3793,8 +3791,9 @@ static void i9xx_crtc_disable(struct drm_crtc *crtc)
3793 i9xx_disable_pll(dev_priv, pipe); 3791 i9xx_disable_pll(dev_priv, pipe);
3794 3792
3795 intel_crtc->active = false; 3793 intel_crtc->active = false;
3796 intel_update_fbc(dev);
3797 intel_update_watermarks(crtc); 3794 intel_update_watermarks(crtc);
3795
3796 intel_update_fbc(dev);
3798} 3797}
3799 3798
3800static void i9xx_crtc_off(struct drm_crtc *crtc) 3799static void i9xx_crtc_off(struct drm_crtc *crtc)
@@ -4955,8 +4954,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc,
4955 4954
4956 ret = intel_pipe_set_base(crtc, x, y, fb); 4955 ret = intel_pipe_set_base(crtc, x, y, fb);
4957 4956
4958 intel_update_watermarks(crtc);
4959
4960 return ret; 4957 return ret;
4961} 4958}
4962 4959
@@ -5843,8 +5840,6 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
5843 5840
5844 ret = intel_pipe_set_base(crtc, x, y, fb); 5841 ret = intel_pipe_set_base(crtc, x, y, fb);
5845 5842
5846 intel_update_watermarks(crtc);
5847
5848 return ret; 5843 return ret;
5849} 5844}
5850 5845
@@ -6299,8 +6294,6 @@ static int haswell_crtc_mode_set(struct drm_crtc *crtc,
6299 6294
6300 ret = intel_pipe_set_base(crtc, x, y, fb); 6295 ret = intel_pipe_set_base(crtc, x, y, fb);
6301 6296
6302 intel_update_watermarks(crtc);
6303
6304 return ret; 6297 return ret;
6305} 6298}
6306 6299