[Why]
Some monitors only expose GTF ranges (or others, without Range Limits
Only flag). This breaks VRR even though they have explicit FreeSync
support.

Currently, if monitor ranges were missing, amdgpu only searched for AMD
vsdb in DisplayID but many monitors have it in CEA, just like HDMI.

[How]
For DP and eDP connections, check for VRR ranges provided in AMD vendor-
specific data block if VRR range wasn't detected.

Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3894
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4457
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4747
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4856
Signed-off-by: Tomasz Pakuła <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++++++
 1 file changed, 6 insertions(+)

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 d83c65dc93d7..69f3dbfe4ca3 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -13270,6 +13270,12 @@ void amdgpu_dm_update_freesync_caps(struct 
drm_connector *connector,
 
        if (sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT ||
            sink->sink_signal == SIGNAL_TYPE_EDP) {
+               /*
+                * Many monitors expose AMD vsdb in CAE even for DP and their
+                * monitor ranges do not contain Range Limits Only flag
+                */
+               if (valid_vsdb_cea && is_monitor_range_invalid(connector))
+                       monitor_range_from_vsdb(connector, &vsdb_info);
 
                if (dpcd_caps.allow_invalid_MSA_timing_param)
                        freesync_capable = 
copy_range_to_amdgpu_connector(connector);
-- 
2.52.0

Reply via email to