[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