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
