From: Ilya Bakoulin <[email protected]>

[Why/How]
- Add debug key to avoid enabling RR by default.
- Skip SCDC access if sink or SCDC cap not present

Reviewed-by: Relja (Reggie) Vojvodic <[email protected]>
Reviewed-by: Chris Park <[email protected]>
Signed-off-by: Ilya Bakoulin <[email protected]>
Signed-off-by: Roman Li <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dc.h                      | 1 +
 drivers/gpu/drm/amd/display/dc/link/link_detection.c     | 4 +++-
 drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c | 9 ++++++++-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index bed0daeb0c6f..d2256c454424 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1293,6 +1293,7 @@ struct dc_debug_options {
        union fw_assisted_mclk_switch_version fams_version;
        union dmub_fams2_global_feature_config fams2_config;
        bool fams2_imm_restore_drr;
+       bool skip_hdmi_rr_enable;
        unsigned int force_cositing;
        unsigned int disable_spl;
        unsigned int force_easf;
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c 
b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index 12fd4fd24a90..b4546f93af0c 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -1391,8 +1391,10 @@ static bool detect_link_and_local_sink(struct dc_link 
*link,
                        read_idcc_data(link->ddc, HDMI_IDCC_SCOPE_RW_CA,
                                link->hdmi_cable_id.raw, 0, 4);
                }
-               if (sink->edid_caps.rr_capable)
+
+               if (sink->edid_caps.rr_capable && 
!dc->debug.skip_hdmi_rr_enable)
                        hdmi_frl_write_read_request_enable(link->ddc);
+
                /* When FreeSync is toggled through OSD,
                 * we see same EDID no matter what. Check MCCS caps
                 * to see if we should update FreeSync caps now.
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
index d87f6f377d06..3fbfc6e2594b 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
@@ -580,6 +580,9 @@ void write_scdc_data(struct ddc_service *ddc_service,
        uint8_t write_buffer[2] = {0};
        /*Lower than 340 Scramble bit from SCDC caps*/
 
+       if (!ddc_service->link->local_sink)
+               return;
+
        if (ddc_service->link->local_sink &&
                
(ddc_service->link->local_sink->edid_caps.panel_patch.skip_scdc_overwrite ||
                !ddc_service->link->local_sink->edid_caps.scdc_present))
@@ -617,8 +620,12 @@ void read_scdc_data(struct ddc_service *ddc_service)
        uint8_t offset = HDMI_SCDC_TMDS_CONFIG;
        uint8_t tmds_config = 0;
 
+       if (!ddc_service->link->local_sink)
+               return;
+
        if (ddc_service->link->local_sink &&
-               
ddc_service->link->local_sink->edid_caps.panel_patch.skip_scdc_overwrite)
+                       
(ddc_service->link->local_sink->edid_caps.panel_patch.skip_scdc_overwrite ||
+                       !ddc_service->link->local_sink->edid_caps.scdc_present))
                return;
 
        link_query_ddc_data(ddc_service, slave_address, &offset,
-- 
2.34.1

Reply via email to