forked from Minki/linux
drm/i915: Re-enable PCH FIO underrun reporting after pipe has been disabled
Some hardware (IVB/HSW and CPT/PPT) have a shared error interrupt for all the relevant underrun bits, so in order to keep the error interrupt enabled, we need to have underrun reporting enabled on all PCH transocders. Currently we leave the underrun reporting disabled when the pipe is off, which means we won't get any underrun interrupts when only a subset of the pipes are active. Fix the problem by re-enabling the underrun reporting after the pipe has been disabled. And to avoid the spurious underruns during pipe enable, disable the underrun reporting before embarking on the pipe enable sequence. So this way we have the error reporting disabled while running through the modeset sequence. v2: Re-enable PCH FIFO underrun reporting unconditionally on pre-HSW Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> (v1) Link: http://patchwork.freedesktop.org/patch/msgid/1446225691-10928-1-git-send-email-ville.syrjala@linux.intel.com
This commit is contained in:
parent
d2d65408cc
commit
81b088ca87
@ -4822,6 +4822,9 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
|
||||
if (WARN_ON(intel_crtc->active))
|
||||
return;
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, false);
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_prepare_shared_dpll(intel_crtc);
|
||||
|
||||
@ -4904,6 +4907,10 @@ static void haswell_crtc_enable(struct drm_crtc *crtc)
|
||||
if (WARN_ON(intel_crtc->active))
|
||||
return;
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
false);
|
||||
|
||||
if (intel_crtc_to_shared_dpll(intel_crtc))
|
||||
intel_enable_shared_dpll(intel_crtc);
|
||||
|
||||
@ -5051,6 +5058,8 @@ static void ironlake_crtc_disable(struct drm_crtc *crtc)
|
||||
|
||||
ironlake_fdi_pll_disable(intel_crtc);
|
||||
}
|
||||
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
|
||||
}
|
||||
|
||||
static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||
@ -5098,6 +5107,10 @@ static void haswell_crtc_disable(struct drm_crtc *crtc)
|
||||
for_each_encoder_on_crtc(dev, crtc, encoder)
|
||||
if (encoder->post_disable)
|
||||
encoder->post_disable(encoder);
|
||||
|
||||
if (intel_crtc->config->has_pch_encoder)
|
||||
intel_set_pch_fifo_underrun_reporting(dev_priv, TRANSCODER_A,
|
||||
true);
|
||||
}
|
||||
|
||||
static void i9xx_pfit_enable(struct intel_crtc *crtc)
|
||||
|
Loading…
Reference in New Issue
Block a user