From: Fangzhi Zuo <[email protected]>

HDMI-Forum VRR metadata is carried in the Video Timing Extended Metadata
Packet (VTEM). amdgpu_dm_update_freesync_state_on_stream() only built the
VTEM for SIGNAL_TYPE_HDMI_FRL, so on a TMDS link a sink that advertises
HDMI-Forum VRR via the HF-VSDB (but not AMD FreeSync via the AMD-VSDB)
never received a VTEM and VRR could not engage.

Per HDMI 2.1 a VTEM is a video-blanking data-island packet valid in both
TMDS and FRL modes; only the compressed-video CVTEM is tied to FRL. Build
the VTEM on a TMDS link as well when the sink reports HF-VSDB VRR. Sinks
without HF-VSDB VRR keep the existing AMD FreeSync SPD infopacket path, so
AMD FreeSync behavior is unchanged.

Signed-off-by: Fangzhi Zuo <[email protected]>
Tested-by: Pei-Hsin Yang <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_freesync.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_freesync.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_freesync.c
index 63d10cb7f5ed..281c6cec9f4b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_freesync.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_freesync.c
@@ -238,7 +238,10 @@ void amdgpu_dm_update_freesync_state_on_stream(
                &vrr_infopacket,
                pack_sdp_v1_3);
 
-       if (new_stream->sink->sink_signal == SIGNAL_TYPE_HDMI_FRL)
+       /* Per HDMI 2.1, VTEM is valid on TMDS as well as FRL */
+       if (new_stream->sink->sink_signal == SIGNAL_TYPE_HDMI_FRL ||
+           (new_stream->sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A &&
+            aconn && aconn->base.display_info.hdmi.vrr_cap.supported))
                mod_build_infopacket_vtem(new_stream, &vrr_params, 0, 
&vrr_infopacket);
 
        new_crtc_state->freesync_vrr_info_changed |=

base-commit: eb3ff61912825e72633f70b6f7197973be83c8db
-- 
2.53.0

Reply via email to