From nobody Tue Feb 10 11:23:40 2026 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 B8EB234E777 for ; Tue, 13 Jan 2026 21:41:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; cv=none; b=QsetLuPxRAUdoxBhqNddkhOhW9HHi47mhM9LS5R6qlbCkrIFDRip1i3dn1xQqzejGRTqcmyKcmzsjwhtSFFSLLVfGRjdG7JQ41Mjd1Y1HqW7uioVo4qnMBa2Csdzx+8ZZjq2DB/w84qV9YnJhi5hNFUGMLPYQwS1ErKTlsnFDo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; c=relaxed/simple; bh=Y+LJMaVDOEtnT2cg2K8RPgvuJ9HSWA0+kFg0LncYrPo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YD0IcdU4PmvNrD9eAESwx592enHHcLqXs0pY7ShUG46qDr1f1C24BP9NRsiTF9+m0RMCSjLK3d6HS5bwEP3K2GD+F6OB2rd/qKgya4NbuJXGNWAMs6BExIZRupENfRws5r8Con47PJ06OtD8dgdMUKin2e1SiZLPTk/aQTz4vHI= 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=etbpaMjH; arc=none smtp.client-ip=209.85.208.51 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="etbpaMjH" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-64b6f22bc77so1467944a12.1 for ; Tue, 13 Jan 2026 13:41:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768340470; x=1768945270; 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=N4LHM++IvHyHjeqEMT100Kj5QFDlUAnoHSe0AnsGOac=; b=etbpaMjHlgacX8up9+NIguviLhw4D2KoKKddflYhaEeSDGovj+LdQyisnRH85R3972 pShm1jlC4qV4qngqFlvKS+mDQnfG2VovcLU5a69ZxjUPN08EYgm0cdFKSO3SevTg34So UB2QMi3b+BQGYjYvTHxTA8bnUFDIdulJaMYepVnmDB/npHCnXevONal/U+6AhBh/DLik 8mnfQo63pf4LJ0RtfbYigqZqx/GJMJRdNBdGTaWaOiSovY3/nIo9NvvRUO2X3PGj4sj6 XEyQtmJ3RolG0io7tvQpQr9li2YfE2bFm5gxFWsm7QTkdowlFkp9kHvsiLkqnRCJEfj/ DDrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768340470; x=1768945270; 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=N4LHM++IvHyHjeqEMT100Kj5QFDlUAnoHSe0AnsGOac=; b=XVq1zpGhWrHs4vNTYvBtY9i+vLtsD7ebwEbtZNatupBXfBQtFSKyljFoepIvUpUYvm lm/XRzPr7bS0V4QD4tl4hg1OMEIlDMhebjDN1D2Q8tU9i/mkampET5N2ITHI4TcjsFyS H5K6PKxhsnK8hxKfnPaDZlk9BLsGLdpd/fuC33IYX3qTRtQPNm8Gsxr+bmQNfWZ+IzZ7 vyeR/xepxu3NoQVZj7aEBcxUz5panUvuYxA3vIP4Lsz2ABy/LHSvHCOqcUxdrJsGWGsS SXvdjVeDlylqmmCuIX/yHX7AR65Dvl5PfiLwgiTrolzEjpvrxPlwBbeNGx/mHCeRCZa8 99oQ== X-Forwarded-Encrypted: i=1; AJvYcCVFgq2eHOHf4IAid4TJW1nqjQJoJWG1jdTIGntP4WoRoh5oV5ID1v7b2OxZkPuYUf+G1mr/wK6SOMVyHTo=@vger.kernel.org X-Gm-Message-State: AOJu0Yymtm0oqrxzXxPe8Nr3BGi74iDqG9Kfd+9lArw7+ke8NJUd1/qy nOJuMn1upRpplXiX+1d+KLvo4mwo2t7wscGwbg6Wuo5HOFCIF9QHJtRY X-Gm-Gg: AY/fxX7BEK0eOGvXfEGetWQvpJBnFyn1YWrQQ6XTFojXUm4ztz68Zzv9uMFh2HCAUBk tAm2IosqBP6Xei6OBIFjvAgg3N6yf9vwNcsthgjsfwTL57/85MB3V6Hte8yn38ZTNwnAiXo+TOU 8Vcq3lUBS9LW6oTGCRdkgzpJ27bayXNoj5RsZDIprRczCA9acVuZ25P/uhTwPte5/mkDpoYm9jE lwb8doHjczOWLwh5tbGwEE15IjTpnwJYeUk0U2B0hJ9PG9+8WKa/nnV8p4uJLHIGmEc7SQVPEKT AfphlRQqnMph5KqUv0HU9m7PUZ32DfUD8NQntgo1HxCDX5PgU+x8B1sGNtBrtvNZcwsLIRRTin0 NBjeAaHtdMeCdNISYJtF8uwZPXnDFzFTTf7MR121fziO8mMqDj1jAm3NLmeyC4pVn/TCXwE0Z4q 8vhpVFiawBYBQBv1n3/yh8I/41uUyHgZUPaFBRHGOX48yZG9l8LGNrVyhz6rLIImVR X-Received: by 2002:a05:6402:2816:b0:645:7d1b:e151 with SMTP id 4fb4d7f45d1cf-653ec1086d0mr204062a12.1.1768340470025; Tue, 13 Jan 2026 13:41:10 -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 4fb4d7f45d1cf-6507bf6d5e0sm20858052a12.31.2026.01.13.13.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 13:41:09 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, harry.wentland@amd.com, sunpeng.li@amd.com, siqueira@igalia.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/3] drm/amd/display: enable HDMI VRR over PCON Date: Tue, 13 Jan 2026 22:41:04 +0100 Message-ID: <20260113214104.146856-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> References: <20260113214104.146856-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 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. In case of VRRmin =3D=3D 0, the selected video mode is the upper boundary. 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) Fixes: 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 | 23 ++++++++++++++++--- 1 file changed, 20 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 1318d88687ae..53f3c88c7cdc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -12932,6 +12932,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct dc_sink *sink; struct amdgpu_device *adev =3D drm_to_adev(connector->dev); struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; + struct drm_hdmi_vrr_cap *hdmi_vrr; const struct edid *edid; bool freesync_capable =3D false; enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; @@ -13004,21 +13005,37 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 if (as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST) { + hdmi_vrr =3D &connector->display_info.hdmi.vrr_cap; i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0 && vsdb_info.freesync_supported && vsdb_info.amd_vsdb_versi= on > 0) { =20 + /* Prefer HDMI VRR over FreeSync */ + if (hdmi_vrr->supported) { + /* VRRmax =3D=3D 0 is a valid value. Selected mode is the upper boundar= y. */ + u16 vrr_max =3D hdmi_vrr->vrr_max ? hdmi_vrr->vrr_max : 10000; + + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D as_type; + + amdgpu_dm_connector->min_vfreq =3D hdmi_vrr->vrr_min; + amdgpu_dm_connector->max_vfreq =3D vrr_max; + + connector->display_info.monitor_range.min_vfreq =3D hdmi_vrr->vrr_min; + connector->display_info.monitor_range.max_vfreq =3D vrr_max; + + } else if (i >=3D 0 && vsdb_info.freesync_supported && vsdb_info.amd_vsd= b_version > 0) { amdgpu_dm_connector->pack_sdp_v1_3 =3D true; amdgpu_dm_connector->as_type =3D as_type; amdgpu_dm_connector->vsdb_info =3D vsdb_info; =20 amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; =20 connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refre= sh_rate_hz; connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refre= sh_rate_hz; } + + if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) + freesync_capable =3D true; } =20 update: --=20 2.52.0