drm/amd/display: Disable PSRSU when DSC enabled on the specific sink
authorRobin Chen <po-tchen@amd.com>
Mon, 20 Jun 2022 16:18:55 +0000 (00:18 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 12 Jul 2022 20:50:29 +0000 (16:50 -0400)
[Why]
Some specific sink is not able to support PSRSU when DSC is turned on.
For this case, fall-back to use PSR1.

Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Solomon Chiu <solomon.chiu@amd.com>
Signed-off-by: Robin Chen <po-tchen@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/power/power_helpers.c

index bc239d38c3c7e565e9ae9086ced7aa9e87042535..235259d6c5a16e511b87ea96da999b6b9abf9ff2 100644 (file)
@@ -794,33 +794,34 @@ bool dmcu_load_iram(struct dmcu *dmcu,
  */
 bool is_psr_su_specific_panel(struct dc_link *link)
 {
-       if (link->dpcd_caps.edp_rev >= DP_EDP_14) {
-               if (link->dpcd_caps.psr_info.psr_version >= DP_PSR2_WITH_Y_COORD_ET_SUPPORTED)
-                       return true;
+       bool isPSRSUSupported = false;
+       struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
+
+       if (dpcd_caps->edp_rev >= DP_EDP_14) {
+               if (dpcd_caps->psr_info.psr_version >= DP_PSR2_WITH_Y_COORD_ET_SUPPORTED)
+                       isPSRSUSupported = true;
                /*
                 * Some panels will report PSR capabilities over additional DPCD bits.
                 * Such panels are approved despite reporting only PSR v3, as long as
                 * the additional bits are reported.
                 */
-               if (link->dpcd_caps.psr_info.psr_version < DP_PSR2_WITH_Y_COORD_IS_SUPPORTED)
-                       return false;
-
-               if (link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_001CF8) {
+               if (dpcd_caps->sink_dev_id == DP_BRANCH_DEVICE_ID_001CF8) {
                        /*
-                        * FIXME:
                         * This is the temporary workaround to disable PSRSU when system turned on
-                        * DSC function on the sepcific sink. Once the PSRSU + DSC is fixed, this
-                        * condition should be removed.
+                        * DSC function on the sepcific sink.
                         */
-                       if (link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT)
-                               return false;
-
-                       if (link->dpcd_caps.psr_info.force_psrsu_cap == 0x1)
-                               return true;
+                       if (dpcd_caps->psr_info.psr_version < DP_PSR2_WITH_Y_COORD_IS_SUPPORTED)
+                               isPSRSUSupported = false;
+                       else if (dpcd_caps->dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT &&
+                               ((dpcd_caps->sink_dev_id_str[1] == 0x08 && dpcd_caps->sink_dev_id_str[0] == 0x08) ||
+                               (dpcd_caps->sink_dev_id_str[1] == 0x08 && dpcd_caps->sink_dev_id_str[0] == 0x07)))
+                               isPSRSUSupported = false;
+                       else if (dpcd_caps->psr_info.force_psrsu_cap == 0x1)
+                               isPSRSUSupported = true;
                }
        }
 
-       return false;
+       return isPSRSUSupported;
 }
 
 /**