aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-11-28 05:05:39 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-12-01 03:20:47 -0500
commit6b6985169017e554d80a8c2befdadbd81d13c2a2 (patch)
tree5d017d91188c1887afef996c138bfd6d2f848090 /drivers/gpu/drm/i915/intel_display.c
parenta65347ba6a4e07d276377a62b9b76ee64a277197 (diff)
drm/i915: fix fdi related fifo underruns on hsw
Similar to commit 37ca8d4ccd9860df0747aa2ea281a3c9c4bf8826 Author: Ville Syrjälä <ville.syrjala@linux.intel.com> Date: Fri Oct 30 19:20:27 2015 +0200 drm/i915: Enable PCH FIFO underruns later on ILK/SNB/IVB we can only enable fifo underrun reporting when using the fdi/lpt after everything is set up and after a bit of waiting. The waiting is required, enabling it right after enabling encoders will first trigger an underrun on the pch and then, 1 frame later, an underrun on the cpu. Two vblank waits after encoder enabling seems enough to curb it. And similar to Author: Ville Syrjälä <ville.syrjala@linux.intel.com> Date: Fri Nov 20 22:09:18 2015 +0200 drm/i915: Suppress spurious CPU FIFO underruns on ILK-IVB we also need to make sure cpu fifo underrun reporting is disabled when enabling the fdi rx/tx and pch transcoder&port. But somehow this is only needed when enabling, not also when disabling. Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1448705139-12534-1-git-send-email-daniel.vetter@ffwll.ch Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91578 Tested-by: Mika Kahola <mika.kahola@intel.com> Reviewed-by: Mika Kahola <mika.kahola@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.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b95c325f9a89..b3323262d9cd 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4978,7 +4978,11 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
4978 4978
4979 intel_crtc->active = true; 4979 intel_crtc->active = true;
4980 4980
4981 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true); 4981 if (intel_crtc->config->has_pch_encoder)
4982 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
4983 else
4984 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
4985
4982 for_each_encoder_on_crtc(dev, crtc, encoder) { 4986 for_each_encoder_on_crtc(dev, crtc, encoder) {
4983 if (encoder->pre_enable) 4987 if (encoder->pre_enable)
4984 encoder->pre_enable(encoder); 4988 encoder->pre_enable(encoder);
@@ -5022,9 +5026,13 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
5022 intel_opregion_notify_encoder(encoder, true); 5026 intel_opregion_notify_encoder(encoder, true);
5023 } 5027 }
5024 5028
5025 if (intel_crtc->config->has_pch_encoder) 5029 if (intel_crtc->config->has_pch_encoder) {
5030 intel_wait_for_vblank(dev, pipe);
5031 intel_wait_for_vblank(dev, pipe);
5032 intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
5026 intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A, 5033 intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
5027 true); 5034 true);
5035 }
5028 5036
5029 /* If we change the relative order between pipe/planes enabling, we need 5037 /* If we change the relative order between pipe/planes enabling, we need
5030 * to change the workaround. */ 5038 * to change the workaround. */