From nobody Mon Feb 9 21:37:08 2026 Received: from mail-ed1-f65.google.com (mail-ed1-f65.google.com [209.85.208.65]) (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 C0904368290 for ; Tue, 3 Feb 2026 18:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145007; cv=none; b=WwktzNVNbPZtFQMN7p2fCs9v+ld8gacKquKcyvYSFQlzponAhRP8E/S6JYanHLOlrOICvouN34ZbUt7fqEDjJqr/mKdPYkp+JbSChev2pn1aJSxJA3c3FlSiq2v1ay/2eJZKe/9CbBfyEXGz4woWg5P/RW41tbKMO3q7qutIZdg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145007; c=relaxed/simple; bh=aRFhbOlpFjd29eP0zQQbAFtZuc7uuXZaJBlYh2CY5pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WBNzzuDL1BrzOPo5DWLVRs+/lXUAr1pdyj8ww+h9nBGIeZf525YVaRugy3AEcrN3FgyB0CaWwQ7XPK6ghpiLxrQb7DImui2XpexvMG3U97j0mFcsjfs06HT0rSW2ZqW7k1gK1Lr8WlRfiSNH1d/u6GcrJDsVkJlukq6PQTVs4Ho= 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=PY42Njyv; arc=none smtp.client-ip=209.85.208.65 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="PY42Njyv" Received: by mail-ed1-f65.google.com with SMTP id 4fb4d7f45d1cf-64b6f22bc77so935949a12.1 for ; Tue, 03 Feb 2026 10:56:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145004; x=1770749804; 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=ZMyppU45ocduU72R81pb5sGVjFLNkBj7pAzByccoIn4=; b=PY42NjyvZffzhIF2feNqlN1kystAlkHJJhW8N8nTAdk1IiT8WLJpdbi87XyzucF3Ox N5h4LAk1VPl00PA3EhKe6bNTUBnuhm8kNQw/PZeo1yf2p8RRVaHqUQA7di2KQ9j/Jwyq niZmBV2ZN/IR6VHZFrgz4gSC6m3kltt6aPDVc+VoIZWJwAAB2HJociiRqHvf7hfzIA56 X7xRh2SlL6SSzV+98IsXRRVjvNDR1wO8qK2PXC370dZqwmqX0I5llB5DYvLfD/FO5o6Z YpA9F85NTmKVWQbL6YhK9E1vcJSNKaFUhRUvuzMUIe5XUq0Fdk5kGJj8ll6WaqOd3xKi Ghyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145004; x=1770749804; 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=ZMyppU45ocduU72R81pb5sGVjFLNkBj7pAzByccoIn4=; b=SdWgtlHYFgJA89hQVTFIt55QMrGu0CxyRB/vYhy+7ZIcH2CNLcOQLWvHdX9dNTA1Zh cklNJZel5Z3ceuFKQpklttpzpQ0LCfeiRSgSbW9vuunSd90diAPdT4I0flpDlSmHpzNs F86Fv2TRm12yP2VJ+qzu9XSay7aYIna0h37xnKFYP5+I/RXh+lCU14zQ4pVX5gSI7CdQ 2nTGdtv6VqVu0zgUxcyKEPGNM2AxzoG3ulxldGzJMqH1gjuqwGm9uLf38MspaCXKU2os jkfyZBwUHP1R82Wj7M7vDTV+JEvtW7jK2eAvA+qiLdjrH7tz4ArdWUfibvkG4esjxX7o p2Sg== X-Forwarded-Encrypted: i=1; AJvYcCX/OXq9kZenKRQBn/dm5d0nWxnjo6X8MyYvIELsrPo8tO8ep6lJ58xEtG0q9WC6dY7MgBCKCdEUsjbrWAA=@vger.kernel.org X-Gm-Message-State: AOJu0YzqbCJXqXITUuLS3RSf+HA0SrtvoCtgL5iPTQcviunR8zD3+c6Y tqMTmhNNRNmrBla/rvfUTTIem/5FkYshKIFt+LObWEpI4V18a4PoDt+/ X-Gm-Gg: AZuq6aIlP/z9sL8OzLHWpPE8pqkhgR9JarEmZdXR2tcm7qBwsDalnhX325Kv7GuMIwr adiDkl+rTyRJH6ueCI9xhzgJksb9NpRs4KtThs+bPnBY1hyrGBKam1uRRHaYkHHFVqYfgJ34M8x E7guQCb+yeM1n162H04M2qH3XghkOnKkanwZg/QO5TZoATegWHokvYe5XLArMSD3wIVjpTRup9p D/ltFXPR69KbhLChHZ4Rz3oCAnUwUW4cwTWiupJzgwsIfm87ghi3Qhn7g149qB1/gXgtTCyk3ZZ YNRjLEUSGPEkCUJo6MI0z1F/1TCOhPDIvLPwHQj2wCB4u62fsuiCSuwrttnGV/VOrqOyG8uWCeB 2ncMA1XMyh91MRX2VLWL5ITHsRW/8LcEkaoHVKsvA0Nt2e8xPWcMIGEmQk1jv83DcQf0KRsXjKs 13tDHTTOLManFcTfA7Uh3yVlOyEHNm9e4FVp6kW2/y1Sz5xKgkXlTxid3e3j4CvxOv X-Received: by 2002:a17:907:d78b:b0:b8d:e858:dee5 with SMTP id a640c23a62f3a-b8e9f2b2cfbmr22346466b.5.1770145003959; Tue, 03 Feb 2026 10:56:43 -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.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:43 -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 10/19] drm/amd/display: Enable HDMI VRR over PCON Date: Tue, 3 Feb 2026 19:56:17 +0100 Message-ID: <20260203185626.55428-11-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] Not all TVs support FreeSync and many TVs suffer from VRR flickering while Freesync is activated. [How] This works the same as FreeSync over PCON just without sending FreeSync info packets (we're sending standard DisplayPort info packets) + reading the VRR range from the HDMI Forum vendor specific data block. PCONs take over HDMI VRR triggering. Prefer HDMI VRR over FreeSync to reduce VRR flickering on many TVs. FreeSync over HDMI seems to be a fallback solution and not a first-class citizen. This especially helps VMM7100. Tested with VMM7100 and CH7218 based adapters on multiple HDMI 2.1 and HDMI 2.0 devices. (Samsung S95B, LG C4, Sony Bravia 8, Dell AW3423DWF) Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4805 Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 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 92e571e687e9..6fb23d59fcc9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13231,6 +13231,17 @@ static void monitor_range_from_vsdb(struct drm_dis= play_info *display, display->monitor_range.max_vfreq =3D vsdb->max_refresh_rate_hz; } =20 +/** + * Get VRR range from HDMI VRR info in EDID. + * + * @conn: drm_connector with HDMI VRR info + */ +static void monitor_range_from_hdmi(struct drm_display_info *display) +{ + display->monitor_range.min_vfreq =3D display->hdmi.vrr_cap.vrr_min; + display->monitor_range.max_vfreq =3D display->hdmi.vrr_cap.vrr_max; +} + /* * Returns true if connector is capable of freesync * Optionally, can fetch the range from AMD vsdb @@ -13279,6 +13290,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct amdgpu_device *adev =3D drm_to_adev(connector->dev); struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; struct amdgpu_hdmi_vsdb_info vsdb_did =3D {0}; + struct drm_hdmi_vrr_cap hdmi_vrr =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; bool freesync_capable =3D false; @@ -13314,6 +13326,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* Gather all data */ edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + hdmi_vrr =3D connector->display_info.hdmi.vrr_cap; =20 if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; @@ -13359,12 +13372,17 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 /* DP -> HDMI PCON */ - } else if (pcon_allowed && vsdb_info.freesync_supported) { - amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; - amdgpu_dm_connector->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->vsdb_info =3D vsdb_info; + } else if (pcon_allowed) { + /* Prefer HDMI VRR */ + if (hdmi_vrr.supported && hdmi_vrr.vrr_max > 0) + monitor_range_from_hdmi(&connector->display_info); + else if (vsdb_info.freesync_supported) { + amdgpu_dm_connector->vsdb_info =3D vsdb_info; + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + } =20 - monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 --=20 2.52.0