Adds override as part of dc debug mask. Allows faster testing and
reporting of VRR-compatible DP->HDMI adapters.

changes in v2:
- Fix missing newline in drm_info()

Signed-off-by: Tomasz Pakuła <[email protected]>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c    |  3 +++
 .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c    | 16 ++++++++++++----
 drivers/gpu/drm/amd/display/dc/dc.h              |  1 +
 drivers/gpu/drm/amd/include/amd_shared.h         |  6 ++++++
 4 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 7fe40bbba265..65df54e4ef05 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -2069,6 +2069,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
        if (amdgpu_dc_debug_mask & DC_SKIP_DETECTION_LT)
                adev->dm.dc->debug.skip_detection_link_training = true;
 
+       if (amdgpu_dc_debug_mask & DC_OVERRIDE_PCON_VRR_WHITELIST)
+               adev->dm.dc->debug.override_pcon_vrr_whitelist = true;
+
        adev->dm.dc->debug.visual_confirm = amdgpu_dc_visual_confirm;
 
        /* TODO: Remove after DP2 receiver gets proper support of Cable ID 
feature */
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
index d0f770dd0a95..0fe881d4157e 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
@@ -1387,13 +1387,21 @@ enum adaptive_sync_type 
dm_get_adaptive_sync_support_type(struct dc_link *link)
 {
        struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
        enum adaptive_sync_type as_type = ADAPTIVE_SYNC_TYPE_NONE;
+       struct amdgpu_dm_connector *aconnector = link->priv;
+       struct drm_device *dev = aconnector->base.dev;
 
        switch (dpcd_caps->dongle_type) {
        case DISPLAY_DONGLE_DP_HDMI_CONVERTER:
-               if 
(dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_SDP_SUPPORT 
== true &&
-                       dpcd_caps->allow_invalid_MSA_timing_param == true &&
-                       dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id))
-                       as_type = FREESYNC_TYPE_PCON_IN_WHITELIST;
+               if 
(!dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_SDP_SUPPORT)
+                       break;
+               if (!dpcd_caps->allow_invalid_MSA_timing_param)
+                       break;
+               if (link->dc->debug.override_pcon_vrr_whitelist)
+                       drm_info(dev, "Overriding VRR PCON whitelist check for 
ID: 0x%06x\n",
+                                dpcd_caps->branch_dev_id);
+               else if 
(!dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id))
+                       break;
+               as_type = FREESYNC_TYPE_PCON_IN_WHITELIST;
                break;
        default:
                break;
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index 98f0b6b3c213..513d3305bb41 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1014,6 +1014,7 @@ struct dc_debug_options {
        bool scl_reset_length10;
        bool hdmi20_disable;
        bool skip_detection_link_training;
+       bool override_pcon_vrr_whitelist;
        uint32_t edid_read_retry_times;
        unsigned int force_odm_combine; //bit vector based on otg inst
        unsigned int seamless_boot_odm_combine;
diff --git a/drivers/gpu/drm/amd/include/amd_shared.h 
b/drivers/gpu/drm/amd/include/amd_shared.h
index 75efda2969cf..fd08f4f1fccf 100644
--- a/drivers/gpu/drm/amd/include/amd_shared.h
+++ b/drivers/gpu/drm/amd/include/amd_shared.h
@@ -410,6 +410,12 @@ enum DC_DEBUG_MASK {
         * @DC_SKIP_DETECTION_LT: (0x200000) If set, skip detection link 
training
         */
        DC_SKIP_DETECTION_LT = 0x200000,
+
+       /**
+        * @DC_OVERRIDE_PCON_VRR_WHITELIST: (0x400000) If set, always return 
true if checking for
+        * PCON VRR compatibility and print it's ID in kernel log.
+        */
+       DC_OVERRIDE_PCON_VRR_WHITELIST = 0x400000,
 };
 
 enum amd_dpm_forced_level;
-- 
2.52.0

Reply via email to