From nobody Mon Feb 9 19:04:37 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.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 185CB1F91E3 for ; Mon, 19 Jan 2026 01:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785146; cv=none; b=gO9XHAFuquVE6QKIeEte+OAtmZ22bYEs1ATrk4ECb2U1wvuqvpzBK3WyZCVwbAfvdfMYdvOyyg0oQLxRgrFbDeLaP1/FQgY0I7QGcXd53MufFwhhSHA/mxiM0jaIl6oEgN5kYWnHOcN5/7nZ8O2jzBxoxpOMf4r43yNo3A5aO44= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785146; c=relaxed/simple; bh=3rhi2p+ZdGq6QGCG4l8RLjwdh1gCm7C9puNo1SxBS9I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tORWCnZTCiObW+iSlW+36k38dpSkknR154Idox6V/U20awKom5llczzI47/HTSnf3hwQRxePgVX1z5EGPN8TufrDDHW5/uTz2svmffvuiXPL4qzJHR7nb3ltLmz8RR9T/cG0AJKoFpLS0IWTjovG025BRqF0RPFO0jwFVsTxUVc= 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=cZ8JIT+F; arc=none smtp.client-ip=209.85.218.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="cZ8JIT+F" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b86ff9ff9feso39039666b.1 for ; Sun, 18 Jan 2026 17:12:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785124; x=1769389924; 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=r18vhTswb3nOt1VBJpOlruOgjP/ijyrBC8r/JG8t7Ms=; b=cZ8JIT+FZe+zL/EgzOvtfl41iOaUfOx/lIL2ioGl20ZVdSz/tRdM4ziKDBUhwQObOh Fn4pYKNT7K74qE6c70L2JEgxF3jsGCmQ2sZwr3OE4PMAPsKcGa+jZPdb7dW5PfgQuk/7 6PimZCSXiTtVcXTIpsp3vjP0PA6X8SEPCsfLqfUR8VtY80ciZEvyBtN9zQFFd8h4li4I P3H02jDVopxnLIdOkMJKOA+hVVIRUEL9XMmVC2B+EZvcqXPRATc7YMC5Qav13VHc/VQT YuuD6DJ1Y8wm5f0I4wGfAy8szm3sXhRz+tI5wj/r4Ivq9OUlV5wpjF7D1a45c2PLSsEq YFhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785124; x=1769389924; 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=r18vhTswb3nOt1VBJpOlruOgjP/ijyrBC8r/JG8t7Ms=; b=bZyEFONzIEmfa8oxKPGDXxa66vgJblQ0cAJN4lcJGLcTqpQBUneuYaBhWeljPz1xj6 Jy+csBGTGefSvbYNzrknp7ZhLXTPcJlccExuZb0BR/nfDirkkWcAseGS6uHnz8gnc3iT ba2ek04g9ndVTSEvIvd7et1IKrXo/4kH9C4a37K83JwkZjXlHzQMgD3fM2vXssTntPA7 JhaVrf2i2MORc8r/A1DSmzqus3JeFHp36ztGZj040X3lmtK6mKiQtujOxuzki+UjAlvJ Berpy/BQDIZfgeSmWEe6FrCvXIxDp0QPBemddura/hT9KbqwD49xzubJJzVgaFpyJUAy 8W3g== X-Forwarded-Encrypted: i=1; AJvYcCUSdX8/I/1/Ll1pMyPPytI5eN5cz5yDKTbNuqYky5wg9WrsDn5uOb2nHHqJw+BQ+WWwlugpVdesehER+Qo=@vger.kernel.org X-Gm-Message-State: AOJu0YzaJR4NEiha+wmzoAhpexD9v801doM+Nz64imGjYSocADG6QwLB 0sD9uzWpsuR3OWrazVLElJX/s6fRuDkwRapUMIT1AbjbUNVoQ/ps7y0A X-Gm-Gg: AY/fxX5YUiu4EnC9pYdLhGaUb1r+gW3agz+YABVAXtmA34ouTGxG6Ar1EQNOuwU9K5w /18s9bogYAIpsfX1S1LPeMcc0eufOC+18vZxNQNBBlwW1HXHzazZCHmb+YkJ/tcThInj/+lNN2W JD3/LjuqxO9p2WKNW/y3+CLIgci002TPwlA56RcuovHlLbgzFlBABn+fvVoRDuqOgouteU+GxDL 4s4VIgC12PFR2kv7rTbURjvP4lsPXadE69PlKQWdaeXJjZK8to3iBRLV9FbaRw/b6XFQ8gwWmHV SFwsRy6DrT9S1CQkOaTtzfC4ri7FHcf174XnHjQnTpVEkxlQJYe7qvmEwLT4jTNLWWkfk5Q8XUo 2BvRQgzYiI7XdPuIQG3RhUrcqtkT+J80xENW9DMti2V2i5M1b7l6JDihJxgP0ie309jckZTJcsm xgP36Sg9Ae1iCZFnwoNFu2Dp7as9j2scbMhKL76oDR+h4U6jBJ6YhZWOQUjeAabfBY X-Received: by 2002:a05:6402:348d:b0:64c:9e19:982d with SMTP id 4fb4d7f45d1cf-654523cc85bmr4269711a12.1.1768785124078; Sun, 18 Jan 2026 17:12:04 -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-654535c4912sm8989806a12.30.2026.01.18.17.12.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:03 -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 Subject: [PATCH 10/17] drm/amd/display: Enable HDMI VRR over PCON Date: Mon, 19 Jan 2026 02:11:39 +0100 Message-ID: <20260119011146.62302-11-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-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 | 31 ++++++++++++++++--- 1 file changed, 26 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 b7deff137df4..772deaa136d7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13193,6 +13193,20 @@ static void monitor_range_from_vsdb(struct drm_con= nector *conn, 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_connector *conn) +{ + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + struct drm_hdmi_vrr_cap *caps =3D &conn->display_info.hdmi.vrr_cap; + + range->min_vfreq =3D caps->vrr_min; + range->max_vfreq =3D caps->vrr_max; +} + /** * Returns true if connector is capable of freesync * Optionally, can fetch the range from AMD vsdb @@ -13242,6 +13256,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; struct amdgpu_hdmi_vsdb_info vsdb_did =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; + struct drm_hdmi_vrr_cap *hdmi_vrr; const struct edid *edid; bool freesync_capable =3D false; bool valid_vsdb_cea =3D false; @@ -13279,6 +13294,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() valid_vsdb_cea =3D parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_in= fo) >=3D 0; vsdb_freesync =3D valid_vsdb_cea && vsdb_info.freesync_supported; + 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; @@ -13324,12 +13340,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_freesync) { - 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); + else if (vsdb_freesync) { + amdgpu_dm_connector->vsdb_info =3D vsdb_info; + monitor_range_from_vsdb(connector, &vsdb_info); + } =20 - monitor_range_from_vsdb(connector, &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