eDP specification states that sink can have its PSR capability
changed, I have never found any panel doing that but lets add that
for completeness.
For now it is not reading back the PSR capabilities and if possible
re-enabling PSR, this will be added if a panel is found using this
feature.

Cc: Gwan-gyeong Mun <gwan-gyeong....@intel.com>
Signed-off-by: José Roberto de Souza <jose.so...@intel.com>
---
 drivers/gpu/drm/i915/display/intel_psr.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
b/drivers/gpu/drm/i915/display/intel_psr.c
index c703a10d2fd7..cdd9c270b42c 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -1437,6 +1437,26 @@ static void psr_alpm_check(struct intel_dp *intel_dp)
        }
 }
 
+static void psr_capability_changed_check(struct intel_dp *intel_dp)
+{
+       struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
+       struct i915_psr *psr = &dev_priv->psr;
+       u8 val;
+       int r;
+
+       r = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_ESI, &val);
+       if (r != 1) {
+               DRM_ERROR("Error reading DP_PSR_ESI\n");
+               return;
+       }
+
+       if (val & DP_PSR_CAPS_CHANGE) {
+               intel_psr_disable_locked(intel_dp);
+               psr->sink_not_reliable = true;
+               DRM_DEBUG_KMS("Sink PSR capability changed, disabling PSR\n");
+       }
+}
+
 void intel_psr_short_pulse(struct intel_dp *intel_dp)
 {
        struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
@@ -1480,6 +1500,7 @@ void intel_psr_short_pulse(struct intel_dp *intel_dp)
        drm_dp_dpcd_writeb(&intel_dp->aux, DP_PSR_ERROR_STATUS, error_status);
 
        psr_alpm_check(intel_dp);
+       psr_capability_changed_check(intel_dp);
 
 exit:
        mutex_unlock(&psr->lock);
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to