diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-11-28 05:05:39 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-12-01 03:20:47 -0500 |
commit | 6b6985169017e554d80a8c2befdadbd81d13c2a2 (patch) | |
tree | 5d017d91188c1887afef996c138bfd6d2f848090 /drivers/gpu/drm/i915/intel_display.c | |
parent | a65347ba6a4e07d276377a62b9b76ee64a277197 (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.c | 12 |
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. */ |