Read Intel DPCD workaround register and store it into
intel_connector->dp.psr_caps. psr_caps was chosen as currently it contains
only PSR workaround for PSR2 SDP on prior scanline implementation.

Signed-off-by: Jouni Högander <[email protected]>
Reviewed-by: Suraj Kandpal <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_display_types.h | 1 +
 drivers/gpu/drm/i915/display/intel_psr.c           | 9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 26e59110e743..5ca66f745e5b 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -584,6 +584,7 @@ struct intel_connector {
 
                struct {
                        u8 dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
+                       u8 intel_wa_dpcd;
 
                        bool support;
                        bool su_support;
diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
b/drivers/gpu/drm/i915/display/intel_psr.c
index 9958230a3dd9..749057e96647 100644
--- a/drivers/gpu/drm/i915/display/intel_psr.c
+++ b/drivers/gpu/drm/i915/display/intel_psr.c
@@ -44,6 +44,7 @@
 #include "intel_display_wa.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_dpcd.h"
 #include "intel_dp_aux.h"
 #include "intel_dp_tunnel.h"
 #include "intel_dsb.h"
@@ -720,8 +721,14 @@ static void _psr_init_dpcd(struct intel_dp *intel_dp, 
struct intel_connector *co
                            connector->dp.psr_caps.su_support ? "" : "not ");
        }
 
-       if (connector->dp.psr_caps.su_support)
+       if (connector->dp.psr_caps.su_support) {
+               ret = drm_dp_dpcd_read_byte(&intel_dp->aux,
+                                           INTEL_DPCD_INTEL_WA_REGISTER_CAPS,
+                                           
&connector->dp.psr_caps.intel_wa_dpcd);
+               if (ret < 0)
+                       return;
                _psr_compute_su_granularity(intel_dp, connector);
+       }
 }
 
 void intel_psr_init_dpcd(struct intel_dp *intel_dp, struct intel_connector 
*connector)
-- 
2.43.0

Reply via email to