drm/amd/display: Disable PSR-SU on some OLED panel
authorTom Chung <chiahsuan.chung@amd.com>
Fri, 10 Jan 2025 08:09:45 +0000 (16:09 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 13 Feb 2025 02:02:59 +0000 (21:02 -0500)
[Why]
PSR-SU may cause some glitching randomly on some OLED panel.

[How]
Disable the PSR-SU for certain PSR-SU OLED panel.

Reviewed-by: Sun peng Li <sunpeng.li@amd.com>
Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c

index 45858bf1523d8f6e8922aa087d98e310e02cd129..104f0386826647e8d71bb1d49f5a32da4d25ef58 100644 (file)
 #include "amdgpu_dm.h"
 #include "modules/power/power_helpers.h"
 
+static bool is_specific_oled_panel(struct dc_link *link)
+{
+       if (!link->dpcd_sink_ext_caps.bits.oled)
+               return false;
+
+       /* Disable PSR-SU for some OLED panels to avoid glitches */
+       if (link->dpcd_caps.sink_dev_id == 0xBA4159) {
+               uint8_t sink_dev_id_str1[] = {'4', '0', 'C', 'U', '1'};
+
+               if (!memcmp(link->dpcd_caps.sink_dev_id_str, sink_dev_id_str1,
+                   sizeof(sink_dev_id_str1)))
+                       return true;
+       }
+
+       return false;
+}
+
 static bool link_supports_psrsu(struct dc_link *link)
 {
        struct dc *dc = link->ctx->dc;
@@ -40,6 +57,9 @@ static bool link_supports_psrsu(struct dc_link *link)
        if (dc->ctx->dce_version < DCN_VERSION_3_1)
                return false;
 
+       if (is_specific_oled_panel(link))
+               return false;
+
        if (!is_psr_su_specific_panel(link))
                return false;