]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/i915/psr: Read Intel DPCD workaround register
authorJouni Högander <jouni.hogander@intel.com>
Fri, 15 May 2026 09:57:54 +0000 (12:57 +0300)
committerTvrtko Ursulin <tursulin@ursulin.net>
Tue, 19 May 2026 07:03:10 +0000 (08:03 +0100)
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 <jouni.hogander@intel.com>
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patch.msgid.link/20260515095756.2799483-3-jouni.hogander@intel.com
(cherry picked from commit c48ff24d0f4ab7ad696b2d35ad64ce7e049c668c)
Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_psr.c

index f6cd0a0620908fddb02241d198023470b59e2b6d..9c7c357afb09e119f15b57819b5d87079e47bf70 100644 (file)
@@ -584,6 +584,7 @@ struct intel_connector {
 
                struct {
                        u8 dpcd[EDP_PSR_RECEIVER_CAP_SIZE];
+                       u8 intel_wa_dpcd;
 
                        bool support;
                        bool su_support;
index 53c10ae76ab52a390b2da372456b78aa4ef7e966..82eac4048382f6b83b8eb4198cac6c934e9ee0de 100644 (file)
@@ -43,6 +43,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_dsb.h"
 #include "intel_frontbuffer.h"
@@ -716,8 +717,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)