From nobody Tue Feb 10 05:26:54 2026 Received: from mail-ed1-f66.google.com (mail-ed1-f66.google.com [209.85.208.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42D5C36AB66 for ; Tue, 3 Feb 2026 18:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145018; cv=none; b=egvEGsww+HRxXBYl9zxUUWCBKne6pivECF08x0BYYe1A03YkimYh7Z/EUpJP1DSUq+xTeDZ+aBNRrw1CFulTELFiA5d+1+vyf6ezBOczy4w7eYKXkVrqV0fRHtJ2A6OQMq+WQrJCc7ee3yjgMmRn8uymuHgXgHVAcGicB7lgAXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145018; c=relaxed/simple; bh=26itJPeUEceni+F1hxmSLk3jD7qbmkjQbgg3NTtoxrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=I8zWaOSPUe7OYG+KUebbZnXDj0mstovYCzOs9SJnMyHtdh/qvpL6g+wUr07mXrqSZ1hw/MkSqz1VOQm7ubBDSIk3Ge/8uLT9rmthuJwqEeY6jdHmwQlnk3csnMI/vKP7LBudzloap98XNqBWsAJFXTAeKqKr1AUM6IIjTfpwbY4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dCpEUi1T; arc=none smtp.client-ip=209.85.208.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dCpEUi1T" Received: by mail-ed1-f66.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso482782a12.2 for ; Tue, 03 Feb 2026 10:56:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145016; x=1770749816; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dcsHykae6qG2zsboDKqK9u6avGg/+VQbgr8PaYkpraM=; b=dCpEUi1Tzw9QG89aZ540AXY9N+Eh1F+QrY3OVfD529GZerldLXO/dkPnfn8C0uWYhY xr30Zfes6gNrO6NWS+vrRfqUIZmT0YZnJFqpkoOCcGizUMrVFKPqijo6wXNjG+BZGJmL zX7USLm+L8EZRRcA2I5/HqDDIaYXMr3P/gFhNWBOcN2XnA51RHwriuUJv778vYKO1lW3 mqGJpdCh+s2YQXsD0EXbnLXUe0y+Pc5wl9rFd0esrihsjMBEk7w9YUJnUHjVIrPygbmB v4PnGX1lp7Wgo405YHZZ0TrZ1Rptm9cC3RDg/S1YG1eq2XdlRRkfxcbGEdZ5EXql/s6i fQ+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145016; x=1770749816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dcsHykae6qG2zsboDKqK9u6avGg/+VQbgr8PaYkpraM=; b=ZRy0J2raVCRflic7tg7clWzqx/LAnPQzi0IUN8giXiWnTq5S+OSUyYXXC93azioqdu f4rAfxHM/boqL62y/JkVtz2A4Pn5f15ujtk1+ahPgZ761BrT9/9S1fkFa1f2ANqkEsWt I8/O7i1L6y9PVx9VyUg5Cvd90Y+JPVNTtPkVPwrbqeaA2+HEysPhUx2cBjbrsAujlblC GxXZHQF+DMZkTP6majlz7XmnjwiO6WfvflC2DcHnGdwEHWFLbELANlibh4I10r4LlW+V i+QJnFl8TpEAMtr3nWmtY9eDTJdZ8uk8yTm2qTac12w5JZ3H0ynPbT/OTMYgYdfZ5Yhq t12g== X-Forwarded-Encrypted: i=1; AJvYcCVFn3ByHs9XtvapWToY49qxV+Lk4Q3PfJQsEDw+tPePTG6niSX7qxi9BAwTFNv68Ch8WCFglDve/KvL6UU=@vger.kernel.org X-Gm-Message-State: AOJu0YwWYeV7qO7ItXpRedD40kO1Xwa76raoVHeMABExAZCPHbTHpywR Tk1KuvgD1vXJYdCbOPk4W4F/q6VvyE8CrL24c/Fi6eB0Btb2eMDw4DQN X-Gm-Gg: AZuq6aJuujqtwr6YrZQU8Ehgu87m+j+Yj2tA2L89XmQJZjJzFqz0LQfx/6FMmyAH1hu BY8CCsJh+gLgbPsyF3URt9QPePu0/Hwr1HrCsA4Ml0LGnzRX2zSQ2mJcE+PtlIte8bfvCIUr8TE 561ykazOigPrrVk3MdIw8T86L+w2haAJ+iVms+tXrNRgIqSMeRl4nxXwJneHXrCy3Cv5Gb2Pj5G dtmzt0ICrzp0ztKxNe0iua8Ktu9Up961OvEBCVlpZxwpVoA8ybv59aj84FLMrtSjJRQOzWTITmz x8gQM2UpEYFp6IYP3cACUk0vZbPfTJNZOwCk1dvcLzuX4G3SDkRSqGRNYURqcC8a+gjK3mhjInd 9brRGHQ6L0ZfM7YnWl1IJevCe1azXOdPJpOcxwz2lVdyxDsZPlYov8Q8yAkjX61iR2ypxaV+XLA WzuxQJCquxRYQlH1JYco4kWE2tZR6mxiEqps/6NyOAt8qgRehiLHVLuhSYmk7A/iIP X-Received: by 2002:a05:6402:2790:b0:655:b07e:95c8 with SMTP id 4fb4d7f45d1cf-6594a1ed7b5mr222788a12.8.1770145015634; Tue, 03 Feb 2026 10:56:55 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:55 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org, admin@ptr1337.dev Subject: [PATCH v3 18/19] drm/amd/display: Enable HDMI VRR Date: Tue, 3 Feb 2026 19:56:25 +0100 Message-ID: <20260203185626.55428-19-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [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=C5=82a --- 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/gp= u/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( =20 aconn =3D (struct amdgpu_dm_connector *)new_stream->dm_stream_context; =20 - if (aconn && (aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED || + if (aconn && aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_HDMI) + packet_type =3D PACKET_TYPE_VTEM; + + else if (aconn && (aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED = || aconn->vsdb_info.replay_mode)) { pack_sdp_v1_3 =3D aconn->pack_sdp_v1_3; =20 @@ -13380,8 +13383,14 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, } =20 /* HDMI */ - } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_info.= freesync_supported) { - monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { + /* Prefer HDMI VRR */ + if (hdmi_vrr.supported) { + amdgpu_dm_connector->as_type =3D 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 =3D copy_range_to_amdgpu_connector(connector); =20 /* DP -> HDMI PCON */ diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/driv= ers/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" =20 #define MOD_FREESYNC_MAX_CONCURRENT_STREAMS 32 =20 @@ -955,6 +956,9 @@ void mod_freesync_build_vrr_infopacket(struct mod_frees= ync *mod_freesync, return; =20 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/dr= ivers/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 =3D 2, ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED =3D 3, ADAPTIVE_SYNC_TYPE_EDP =3D 4, + ADAPTIVE_SYNC_TYPE_HDMI =3D 5, }; =20 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; } --=20 2.52.0