[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260203185626.55428-19-tomasz.pakula.oficjalny@gmail.com>
Date: Tue, 3 Feb 2026 19:56:25 +0100
From: Tomasz Pakuła <tomasz.pakula.oficjalny@...il.com>
To: alexander.deucher@....com,
harry.wentland@....com,
sunpeng.li@....com
Cc: maarten.lankhorst@...ux.intel.com,
mripard@...nel.org,
tzimmermann@...e.de,
airlied@...il.com,
simona@...ll.ch,
siqueira@...lia.com,
dri-devel@...ts.freedesktop.org,
amd-gfx@...ts.freedesktop.org,
linux-kernel@...r.kernel.org,
tomasz.pakula.oficjalny@...il.com,
bernhard.berger@...il.com,
michel.daenzer@...lbox.org,
daniel@...ishbar.org,
admin@...1337.dev
Subject: [PATCH v3 18/19] drm/amd/display: Enable HDMI VRR
[Why]
We'd like to expose VRR functionality to end user if HDMI sink is
advertising it's support.
[How]
VTEM info frame is used to signal HDMI sink that VRR is active.
Use VTEM info packet as vrr_infopacket
Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@...il.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 ++++++++++++---
.../drm/amd/display/modules/freesync/freesync.c | 4 ++++
.../drm/amd/display/modules/inc/mod_info_packet.h | 1 +
.../amd/display/modules/info_packet/info_packet.c | 1 +
4 files changed, 18 insertions(+), 3 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 ab01a45aef1c..6f841c84d114 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -9620,7 +9620,10 @@ static void update_freesync_state_on_stream(
aconn = (struct amdgpu_dm_connector *)new_stream->dm_stream_context;
- if (aconn && (aconn->as_type == ADAPTIVE_SYNC_TYPE_PCON_ALLOWED ||
+ if (aconn && aconn->as_type == ADAPTIVE_SYNC_TYPE_HDMI)
+ packet_type = PACKET_TYPE_VTEM;
+
+ else if (aconn && (aconn->as_type == ADAPTIVE_SYNC_TYPE_PCON_ALLOWED ||
aconn->vsdb_info.replay_mode)) {
pack_sdp_v1_3 = aconn->pack_sdp_v1_3;
@@ -13380,8 +13383,14 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
}
/* HDMI */
- } else if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A && vsdb_info.freesync_supported) {
- monitor_range_from_vsdb(&connector->display_info, &vsdb_info);
+ } else if (sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A) {
+ /* Prefer HDMI VRR */
+ if (hdmi_vrr.supported) {
+ amdgpu_dm_connector->as_type = ADAPTIVE_SYNC_TYPE_HDMI;
+ monitor_range_from_hdmi(&connector->display_info, &vsdb_info);
+ } else if (vsdb_info.freesync_supported)
+ monitor_range_from_vsdb(&connector->display_info, &vsdb_info);
+
freesync_capable = copy_range_to_amdgpu_connector(connector);
/* DP -> HDMI PCON */
diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
index 1aae46d703ba..db197cf048e1 100644
--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
@@ -27,6 +27,7 @@
#include "dc.h"
#include "mod_freesync.h"
#include "core_types.h"
+#include "mod_info_packet.h"
#define MOD_FREESYNC_MAX_CONCURRENT_STREAMS 32
@@ -955,6 +956,9 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync,
return;
switch (packet_type) {
+ case PACKET_TYPE_VTEM:
+ mod_build_vtem_infopacket(stream, vrr, infopacket);
+ break;
case PACKET_TYPE_FS_V3:
build_vrr_infopacket_v3(stream->signal, vrr, app_tf, infopacket, stream->freesync_on_desktop);
break;
diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h
index 07e86b16ef77..ca7c5542620d 100644
--- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h
+++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h
@@ -60,6 +60,7 @@ enum adaptive_sync_type {
ADAPTIVE_SYNC_TYPE_PCON_ALLOWED = 2,
ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED = 3,
ADAPTIVE_SYNC_TYPE_EDP = 4,
+ ADAPTIVE_SYNC_TYPE_HDMI = 5,
};
enum adaptive_sync_sdp_version {
diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
index b08b52bba574..5fd9e8aadc98 100644
--- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
+++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c
@@ -722,6 +722,7 @@ void mod_build_adaptive_sync_infopacket(const struct dc_stream_state *stream,
break;
case ADAPTIVE_SYNC_TYPE_NONE:
case ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED:
+ case ADAPTIVE_SYNC_TYPE_HDMI:
default:
break;
}
--
2.52.0
Powered by blists - more mailing lists