[PATCH v3] Do not allow psr to be enabled for pipe crc calculation.
Stanislav Lisovskiy
stanislav.lisovskiy at intel.com
Wed Dec 19 11:16:53 UTC 2018
Otherwise crc might read as 0xffffffff, which results
in "suspicoous crc" warnings in IGT.
v2: Also, whenever enabling pipe_crc calculation, turn off psr
if it is enabled.
v3: Fix some check_patch warnings and commit description.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108336
Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
---
drivers/gpu/drm/i915/intel_pipe_crc.c | 13 +++++++++++++
drivers/gpu/drm/i915/intel_psr.c | 3 +++
2 files changed, 16 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
index f3c9010e332a..0cbffd069412 100644
--- a/drivers/gpu/drm/i915/intel_pipe_crc.c
+++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
@@ -635,6 +635,9 @@ void intel_crtc_enable_pipe_crc(struct intel_crtc *intel_crtc)
struct drm_i915_private *dev_priv = to_i915(crtc->dev);
struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[crtc->index];
u32 val = 0;
+ struct intel_encoder *encoder;
+ struct intel_dp *intel_dp;
+ struct intel_crtc_state *crtc_state = to_intel_crtc_state(intel_crtc->base.state);
if (!crtc->crc.opened)
return;
@@ -642,6 +645,16 @@ void intel_crtc_enable_pipe_crc(struct intel_crtc *intel_crtc)
if (get_new_crc_ctl_reg(dev_priv, crtc->index, &pipe_crc->source, &val, false) < 0)
return;
+ if (intel_crtc_has_dp_encoder(crtc_state)) {
+ for_each_encoder_on_crtc(&dev_priv->drm, &intel_crtc->base, encoder) {
+ for_each_intel_dp(&dev_priv->drm, encoder) {
+ intel_dp = enc_to_intel_dp(&encoder->base);
+ if (intel_psr_enabled(intel_dp))
+ intel_psr_disable(intel_dp, crtc_state);
+ }
+ }
+ }
+
/* Don't need pipe_crc->lock here, IRQs are not generated. */
pipe_crc->skipped = 0;
diff --git a/drivers/gpu/drm/i915/intel_psr.c b/drivers/gpu/drm/i915/intel_psr.c
index 572e626eadff..db04b9371250 100644
--- a/drivers/gpu/drm/i915/intel_psr.c
+++ b/drivers/gpu/drm/i915/intel_psr.c
@@ -694,6 +694,9 @@ void intel_psr_enable(struct intel_dp *intel_dp,
if (WARN_ON(!CAN_PSR(dev_priv)))
return;
+ if (crtc_state->base.crtc->crc.entries)
+ return;
+
WARN_ON(dev_priv->drrs.dp);
mutex_lock(&dev_priv->psr.lock);
--
2.17.1
More information about the Intel-gfx-trybot
mailing list