#include "dc.h"
 #include "dm_helpers.h"
 #include "amdgpu_dm.h"
+#include "modules/power/power_helpers.h"
 
 #ifdef CONFIG_DRM_AMD_DC_DCN
 static bool link_supports_psrsu(struct dc_link *link)
        if (dc->ctx->dce_version < DCN_VERSION_3_1)
                return false;
 
+       if (!is_psr_su_specific_panel(link))
+               return false;
+
        if (!link->dpcd_caps.alpm_caps.bits.AUX_WAKE_ALPM_CAP ||
            !link->dpcd_caps.psr_info.psr_dpcd_caps.bits.Y_COORDINATE_REQUIRED)
                return false;
                link->psr_settings.psr_feature_enabled = true;
        }
 
-       DRM_INFO("PSR support:%d\n", link->psr_settings.psr_feature_enabled);
+       DRM_INFO("PSR support %d, DC PSR ver %d, sink PSR ver %d\n",
+               link->psr_settings.psr_feature_enabled,
+               link->psr_settings.psr_version,
+               link->dpcd_caps.psr_info.psr_version);
 
 }
 
 
        return result;
 }
 
+/*
+ * is_psr_su_specific_panel() - check if sink is AMD vendor-specific PSR-SU
+ * supported eDP device.
+ *
+ * @link: dc link pointer
+ *
+ * Return: true if AMDGPU vendor specific PSR-SU eDP panel
+ */
+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;
+               /*
+                * 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) {
+                       /*
+                        * 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.
+                        */
+                       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;
+               }
+       }
+
+       return false;
+}