drm/i915: Disable PSR2 while getting pipe CRC
authorJosé Roberto de Souza <jose.souza@intel.com>
Fri, 8 Mar 2019 00:00:47 +0000 (16:00 -0800)
committerJosé Roberto de Souza <jose.souza@intel.com>
Fri, 8 Mar 2019 18:31:45 +0000 (10:31 -0800)
When PSR2 is active aka after the number of frames programmed in
PSR2_CTL 'Frames Before SU Entry' hardware stops to generate CRC
interrupts causing IGT tests to fail due timeout.

This same behavior don't happen with PSR1, as soon as pipe CRC is
enabled it blocks PSR1 activation so CRC calculation continues to
happens normaly.

This patch also set mode_changed as true when PSR is available to
force atomic check functions to compute new PSR state, otherwise PSR2
would not be disabled.

v4: Only setting mode_changed if has_psr is set(Dhinakaran)

v3: Reusing intel_crtc_crc_prepare() and crc_enabled, only setting
mode_changed if it can do PSR.

v2: Changed commit description to describe that PSR2 inhibit CRC
calculations.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190308000050.6226-6-jose.souza@intel.com
drivers/gpu/drm/i915/intel_pipe_crc.c
drivers/gpu/drm/i915/intel_psr.c

index d9ecab8c5c63fe91eb292ec3232e6ec9fd833d42..64a98712d61fae6aeafb2ffa2fb92a31af336924 100644 (file)
@@ -306,6 +306,7 @@ retry:
                goto put_state;
        }
 
+       pipe_config->base.mode_changed = pipe_config->has_psr;
        pipe_config->crc_enabled = enable;
 
        if (IS_HASWELL(dev_priv) && crtc->pipe == PIPE_A) {
index 2d9f64c362e2b580c91d465cbe3a620d5cc7d9b6..25a0a77268a9e90fac17028143b7a45562edb573 100644 (file)
@@ -572,6 +572,11 @@ static bool intel_psr2_config_valid(struct intel_dp *intel_dp,
                return false;
        }
 
+       if (crtc_state->crc_enabled) {
+               DRM_DEBUG_KMS("PSR2 not enabled because it would inhibit pipe CRC calculation\n");
+               return false;
+       }
+
        return true;
 }