From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (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 6ED3223B612 for ; Sun, 25 Jan 2026 18:39:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366361; cv=none; b=nsQmYtK3mYroA4l9lsyLpCb3ZU3+XuzU48i+JQSwdVBJAc9lemEum9dn9dmWwh+peR+BCHuMH36cPc4U7jRv9QaJae/m1X5/M/YTCPaBZXaKq1xU3mU4t8pJqQcYWqDaPdrpR4xjPOrSuMuh7Lyhi02AIPfNqsw/TZSzoIjf/OA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366361; c=relaxed/simple; bh=39RxfnABgd9N0J1WyncqJTP+SzqoqsIE/zERLxDsE3g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cAPzqecXAbQRtYFnU5ZybIUmrtNtd5ekvedSKm+C4OgR36Ybk2IIp/j18yYRQ4WuoAOGKCy7tUCJU/1MWx1wmjvmwnnoZM8WI7VMBuc0Qizhq+1Rt/DPjamu9oCacMcjreGPRc3ojwG7hjTsJSDHP0xJcjTplYkm15kkQSawec0= 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=KwaoWuj1; arc=none smtp.client-ip=209.85.208.52 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="KwaoWuj1" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-64b7a91f9daso544556a12.2 for ; Sun, 25 Jan 2026 10:39:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366359; x=1769971159; 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=ixilW5V8SChUNZnxz9Z374ZlFvo9s1J4AZCTC1xKE1c=; b=KwaoWuj1CKpM+Ff6XFtlFPEVHFq+mjE0sWtuvd6zBOx7i/5IiEBXbeVkQEi4OPUeA5 HvZaVy6tdGLXc9U3jKh8DAMKY14vAh7g3O3DM8RRMLlalyC8hF8qtfybvjWwrxFZQjag cBsyQhLFTn612UAKsEq4h6S474lfMZ0H5zqcpypWmmCKiPpQCG53n2aO6xoPMn2ak687 RUYWxHEx7CkFWpEraQIv+jGiLdttB70UhWEBlme/S33yAS/Biu701by9iRplTcSg3PWf XeZuD4wdB8LjEv4TRpFU0wRCS5w/AbngeFAwnvtLQJYKaE/CYYwbMHsBOaBM4Jfr2HPP TjFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366359; x=1769971159; 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=ixilW5V8SChUNZnxz9Z374ZlFvo9s1J4AZCTC1xKE1c=; b=H2KPj7rUMqHDQBdHON2hX0e7lDP2Qnj9CnYPxksbznNkCHOdsFK/IiDFu/vheS+KXw ahylbM4hoZWekgZdwynSn4d+G6howg4RYK2+ty0oYtOlWlcmqdkyX6Mk6VrllkvYQt1B JOuCV5gREb0/liEDmZSnOjIpdObVRTIu45wdfAne6WCAgAc70hwvehgZ1U2gHDM9Op8G v32aLWXhZvS2SpDp2bmJimyeNiVfVJw6ZETrmuaVU6eOhgP9SWIckRzEpyAIzbSbb4Fo sNUEsBXWsfrkz3Aj+saEaegJXA8WzetQVJCjQpDxdCSgR4IAoxRuPNp+i1VBh4SitL+z 8mPQ== X-Forwarded-Encrypted: i=1; AJvYcCVwOHDP1meChMYwx0qTEjDVmqIvwTtTUg+G1hngTP2a9/y+iENa4CTmpnGeqx4TpXLh9K5gL1uz4+Zt9/w=@vger.kernel.org X-Gm-Message-State: AOJu0YyHqWy3f1vzs7qXDDlJMeLXTbdsxOuQeyOk8TDfXxsu2d/FDgCU m8RHx7QDZxS9Nw261HB4CruxXC29ytGNc3IZTBxyZaqI3tTIDH40Kh5o X-Gm-Gg: AZuq6aJqcta0QC0uhDKPZquucesBIpZXnU4OLaGfyl8WaBKGS+YQsbVmTGutmv+Hv+0 mrOrlnN3k3tPyXPnxDoy8ukwqdrSJspMdD3y7wHZNfljMVsorszs6cLS/E9VDiHk8YfYORIPdDc vpv6Wu36OD2DWGdJJ5tussBEFnkwHsCu89Jtk1WgusZMTJ1WWEO7Km0+y31J6J41CBHxW2i9XeN L6KI/hwKI3xC4782FCn4dQG/dBTqyKLPqdpYFgRHfr7uTEAKk+v3xHx8knQYBg7Gn9aKsqUnyI4 wQi54UngSKFV9MS37/JSu8T/Yuygr9LBIJCpBZBHGrm/pjvz8FRGElpta+snrf9JPtH18lAuNm9 dIW73xFehiqyGu0UFaTNu//V3ovDaXS0qGpemGWJCTcBubyP9m6D7/edYZU2tHdFkDKvBYY5JOM mlwYAAeGlynePHPQT+SLUYlK2geZvXSXXAckneEiSpbAI46ozpQo5Umi712Pa2H/3p X-Received: by 2002:a17:907:2d8f:b0:b83:95ca:22e1 with SMTP id a640c23a62f3a-b8d2e89ad06mr95678466b.1.1769366358426; Sun, 25 Jan 2026 10:39:18 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:18 -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 Subject: [PATCH v2 01/19] drm/amd/display: Return if DisplayID not found in parse_amd_vsdb() Date: Sun, 25 Jan 2026 19:38:56 +0100 Message-ID: <20260125183914.459228-2-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] The function would continue to try to parse EDID even if DisplayID extension block wasn't found. Sometimes it got lucky and found AMD vsdb in CEA extension block which made debugging harder. [How] Add a return if DisplayID extension block wasn't found Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 +++ 1 file changed, 3 insertions(+) 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 8b4c45ac3c05..f01ddde1a50c 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13115,6 +13115,9 @@ static int parse_amd_vsdb(struct amdgpu_dm_connecto= r *aconnector, break; } =20 + if (i =3D=3D edid->extensions) + return false; + while (j < EDID_LENGTH - sizeof(struct amd_vsdb_block)) { struct amd_vsdb_block *amd_vsdb =3D (struct amd_vsdb_block *)&edid_ext[j= ]; unsigned int ieeeId =3D (amd_vsdb->ieee_id[2] << 16) | (amd_vsdb->ieee_i= d[1] << 8) | (amd_vsdb->ieee_id[0]); --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 910A12BE65F for ; Sun, 25 Jan 2026 18:39:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366363; cv=none; b=cA5U7usSIVKfaPvihPoJFbbCl9b22mi/2NheUo3BVleJ7I1XnW5/OI9i19E0ecQpLhLl3V4+9SDdz10BKBS9Di6rGbcml3SJOMpwN305FO6vfUstIEf7ItuR/ldn9e1QGoz5rgf8+V+r3wVZnikHk8TD/5KQ31fZQoLbTihN13E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366363; c=relaxed/simple; bh=ZsBYkW2XbpdEoUhWlflWi9cf1JYXjUydFd3kwCqnkqc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qBaJ6BOWaFmkqgUYFqVtHOHGlBW6fKtrt5iBup9J+az36jarAe6PvYc4azIF5rvQzPmYNC0vResTUlj56zQQu5zkL/BqLZZXmQlGV/s68dGg5zHbnxZDENFCj2pvfcDtqsME9PR+hDfZX3pnQ68oidULr053hPgp9Prdgdycq6g= 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=CrWUjGcw; arc=none smtp.client-ip=209.85.218.53 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="CrWUjGcw" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b88610494b8so33574366b.1 for ; Sun, 25 Jan 2026 10:39:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366360; x=1769971160; 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=PBLEx0I4dFJbqms9FUHoyNpeQ/njWHpc2q7k6geZkNY=; b=CrWUjGcwxJ1p2fnQoeizfPyQ/thEA3I+qHs1b1WNrIqUnAQ5dNOOoICX+cyrnWqrjQ T3A7dfdEDtwKa1LAH1XWWqzGFNdgD80Uh+Szrz5moG3lPfOIAZqRA9N1fkVyNRaEefdY FjMTlBy0fUEe8fUGFyFjU+JIA+1cUFhHwhOi0skbnt9d3HQqBDx+dZntnxlldP8KOyQN JEPedmVe5DX/VTTc4SFpMxfXd6CK7ACo3g6G17UEv3z27Yhk2Ydii2lHMN4WYL3EBfaV UbIVQgJHXqhW/uo0f+pxtlrHTIGFkhonXV6x1gxfHNu8/1rkLGWerM3mdqnpycofZtTn ZGyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366360; x=1769971160; 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=PBLEx0I4dFJbqms9FUHoyNpeQ/njWHpc2q7k6geZkNY=; b=bcbkoWGvcVuUZwO7TZO6lLv/u2t+uBSMsHWKGVsq9SyIHNss+psW9ZIILYl7SLZyv6 0cpGYQ1643YznUlvTMEEbx296LC+wHm5S7SdiaI6t+yMo/Pqw5mxQuwD7+NbbTWC/Tzn mwlTAVFQXxpT4reVDJ4av4B9smfknUK7ov7IcX9Y/Y2C+8v62WEJRm+WwumnnzHPvy5A 2Uc9aLB38PPSqTHJOPATcKH2CGaFtRbPGmdT+Ew1J5BmnO5C7vO8f3m4dLFZt7+8rn9b eFEbOhjU4sH3idms8v/sJqm+z9i4GS3TEUiM2F7l3693G4knamUX44b4Vl/NKnvOPZR+ fLWA== X-Forwarded-Encrypted: i=1; AJvYcCWi54KjwOpHvUHm9AUeSVMBr0qI1qB7F9TRC9YOgeMXwrTUbh15Dfj/6kcKtLwK2lLbGYIbNFkSBGSMaGE=@vger.kernel.org X-Gm-Message-State: AOJu0YwkZnDOF0YVKW0njgHJXN1ylvDPniDlNxU0qXqd6Oi9hXcsByIk c9+N/pa00RoKQa2ucfhH2Zj0A9vMA/UD3/KAk9DyRrMq8gjSYnZ7qR7X X-Gm-Gg: AZuq6aJKEnLOBI3+fobNVSsdoXlxDxUZ2uKglD/J/E6cl2PhD01+IKlMkvcTCB3YJNL I4uAsLf6YgrAL+4UJ12e6jd8QDdF1m4vb/HORLkeGwhwDX6WgYAf/Qkk9hUvuQSq7D/otXVXvb1 ifsuLHj2QYGS3RePjdSkWr0k36lqpEHunC9kIVM4//A5pyqAZUlbV1FqU1dn0oLdSexMLxsLur4 dJiHs8Ghfu3lZFOYq6NUbfRifpMFX+JinB/VaB9PDyWJuKz0vsxykxZOU/mMKj4OeW1LqL7bNLM cZinR9G4XKTnpv7nirTLEJWriz1mybbjchrCFZpIddMUbCljGGpNd+3jkNGQU/ogzaDhdkeUGPh +etr9Xdkg/jQ6xk2bSbQu+llcoUaVO8Fxp1+jL9P4zwcQ0KObPqVq/ctHo8FjPSKbdVMCvdEOpD cmhGKZ8GvJalELAUEk4fSEMilJqDTUVyrn7nhe38/grgRXUoASBM29OCQfG4st/Irs X-Received: by 2002:a17:907:3f0f:b0:b87:1e1:e562 with SMTP id a640c23a62f3a-b8d4f7f155fmr84091466b.8.1769366359659; Sun, 25 Jan 2026 10:39:19 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:19 -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 Subject: [PATCH v2 02/19] drm/amd/display: Refactor amdgpu_dm_update_freesync_caps() Date: Sun, 25 Jan 2026 19:38:57 +0100 Message-ID: <20260125183914.459228-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] This function started to get very messy and hard to follow. [How] Eject some functionality to separate functions and simplify greatly. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 119 +++++++++++------- 1 file changed, 72 insertions(+), 47 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 f01ddde1a50c..77a903880543 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13098,8 +13098,8 @@ static void parse_edid_displayid_vrr(struct drm_con= nector *connector, } } =20 -static int parse_amd_vsdb(struct amdgpu_dm_connector *aconnector, - const struct edid *edid, struct amdgpu_hdmi_vsdb_info *vsdb_info) +static int parse_amd_vsdb_did(struct amdgpu_dm_connector *aconnector, + const struct edid *edid, struct amdgpu_hdmi_vsdb_info *vsdb_info) { u8 *edid_ext =3D NULL; int i; @@ -13151,9 +13151,9 @@ static int parse_amd_vsdb(struct amdgpu_dm_connecto= r *aconnector, return false; } =20 -static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, - const struct edid *edid, - struct amdgpu_hdmi_vsdb_info *vsdb_info) +static int parse_amd_vsdb_cea(struct amdgpu_dm_connector *aconnector, + const struct edid *edid, + struct amdgpu_hdmi_vsdb_info *vsdb_info) { u8 *edid_ext =3D NULL; int i; @@ -13183,6 +13183,44 @@ static int parse_hdmi_amd_vsdb(struct amdgpu_dm_co= nnector *aconnector, return valid_vsdb_found ? i : -ENODEV; } =20 +static bool is_monitor_range_invalid(struct drm_connector *conn) +{ + return conn->display_info.monitor_range.min_vfreq =3D=3D 0 || + conn->display_info.monitor_range.max_vfreq =3D=3D 0; +} + +/* + * Returns true if (max_vfreq - min_vfreq) > 10 + */ +static bool is_freesync_capable(struct drm_monitor_range_info *range) +{ + return (range->max_vfreq - range->min_vfreq) > 10; +} + +static void monitor_range_from_vsdb(struct drm_connector *conn, + struct amdgpu_hdmi_vsdb_info *vsdb) +{ + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + + range->min_vfreq =3D vsdb->min_refresh_rate_hz; + range->max_vfreq =3D vsdb->max_refresh_rate_hz; +} + +/* + * Returns true if connector is capable of freesync + * Optionally, can fetch the range from AMD vsdb + */ +static bool copy_range_to_amdgpu_connector(struct drm_connector *conn) +{ + struct amdgpu_dm_connector *aconn =3D to_amdgpu_dm_connector(conn); + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + + aconn->min_vfreq =3D range->min_vfreq; + aconn->max_vfreq =3D range->max_vfreq; + + return is_freesync_capable(range); +} + /** * amdgpu_dm_update_freesync_caps - Update Freesync capabilities * @@ -13197,15 +13235,18 @@ static int parse_hdmi_amd_vsdb(struct amdgpu_dm_c= onnector *aconnector, void amdgpu_dm_update_freesync_caps(struct drm_connector *connector, const struct drm_edid *drm_edid) { - int i =3D 0; struct amdgpu_dm_connector *amdgpu_dm_connector =3D to_amdgpu_dm_connector(connector); struct dm_connector_state *dm_con_state =3D NULL; struct dc_sink *sink; 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 dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; bool freesync_capable =3D false; + bool valid_vsdb_cea =3D false; + bool vsdb_freesync =3D false; enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; =20 if (!connector->state) { @@ -13235,62 +13276,46 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, goto update; =20 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; + if (amdgpu_dm_connector->dc_link) + dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ - if ((connector->display_info.monitor_range.min_vfreq =3D=3D 0 || - connector->display_info.monitor_range.max_vfreq =3D=3D 0)) + if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); =20 - if (edid && (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || - sink->sink_signal =3D=3D SIGNAL_TYPE_EDP)) { - if (amdgpu_dm_connector->dc_link && - amdgpu_dm_connector->dc_link->dpcd_caps.allow_invalid_MSA_timing_par= am) { - amdgpu_dm_connector->min_vfreq =3D connector->display_info.monitor_rang= e.min_vfreq; - amdgpu_dm_connector->max_vfreq =3D connector->display_info.monitor_rang= e.max_vfreq; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; - } + if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || + sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { =20 - parse_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); + if (dpcd_caps.allow_invalid_MSA_timing_param) + freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 - if (vsdb_info.replay_mode) { - amdgpu_dm_connector->vsdb_info.replay_mode =3D vsdb_info.replay_mode; - amdgpu_dm_connector->vsdb_info.amd_vsdb_version =3D vsdb_info.amd_vsdb_= version; + /* eDP */ + if (edid) + parse_amd_vsdb_did(amdgpu_dm_connector, edid, &vsdb_did); + + if (vsdb_did.replay_mode) { + amdgpu_dm_connector->vsdb_info.replay_mode =3D vsdb_did.replay_mode; + amdgpu_dm_connector->vsdb_info.amd_vsdb_version =3D vsdb_did.amd_vsdb_v= ersion; amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 - } else if (drm_edid && sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { - i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0 && vsdb_info.freesync_supported) { - 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; - - 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; - } + } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_frees= ync) { + monitor_range_from_vsdb(connector, &vsdb_info); + freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 if (amdgpu_dm_connector->dc_link) as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { - 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) { + if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_freesync) { + 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->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->as_type =3D as_type; - amdgpu_dm_connector->vsdb_info =3D vsdb_info; - - 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; - - 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; - } + monitor_range_from_vsdb(connector, &vsdb_info); + freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 update: --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.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 DEF1E2F0C46 for ; Sun, 25 Jan 2026 18:39:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366364; cv=none; b=jVmijBbJl9M+T3uEcS5r6uqnJ+hUCUCb0OvS6+UK0FALSFqPb3SZx7j9B1PS+6fIZ9EZSqQRZZaM12OeSmX6JYa3mkbZrUTMFcXPylaIZ8FwWhaagmGpsJMtyChdNo6UPa4hTx04bc+89IXy7a0/TDLMeeOHbxnFjZ4CX107nZ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366364; c=relaxed/simple; bh=jP0nDvpxLHgwKR31t7UiqmG2wemFIgxbmrE3Rg2uX3E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=V6SIFbvnnR/ARgoCFMRlyq5AinV/EiVq5zHYiHUAFTq+8OYTZyT5Es+gHg1CDhovgHaFccS6r2PEEP3dL+RF2qXXc21XfOUMBBYAYohTlfUi+ppWtSUEYZ/zeRXrIftZUAAMeb6t3S544+L3L6EmLCrbcy7Ny4Di05TyJyyCmiU= 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=fMLnFSuG; arc=none smtp.client-ip=209.85.218.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="fMLnFSuG" Received: by mail-ej1-f65.google.com with SMTP id a640c23a62f3a-b8859d3e1c3so43983466b.0 for ; Sun, 25 Jan 2026 10:39:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366361; x=1769971161; 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=okuaC9cSCyDBA7bzGCWZ+ETvX0Mn/dMS3C4bf64Lnn4=; b=fMLnFSuGs+7GtrRR/PtlapoFqe2L1sI0qrBCMnM3bZSl4hq+G99NyBXj7yFYTJfJFq YrOQJ+bQ7wYAa1yV4pf1fGxGwVNxegqEE4EgRwVGZfEvMsSWO6rpgPmFHbIojGgwJOLu a2+VRFRWM22n8xS8I/JhhZmNWzHNBuEcIXrUi2sr/o7k88Ba37tmOovuuJneRxzjvV78 3tZCJZAOrdDkZ/0nNGCuy1mvzcCpD4sqnQ63WlNJCSYrqZoaeIw1T4y1IZPVeY6kOIRv LB1om2ahHt/t4z2QdDXn20X1SLYjpGSaq7bpE+D7pQG9pik25gARqcgD/4YS4KE/L6Se tqeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366361; x=1769971161; 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=okuaC9cSCyDBA7bzGCWZ+ETvX0Mn/dMS3C4bf64Lnn4=; b=TSqet341goDtK3HFcGUwkQLRqXqupe+Vtb34EnHRB1IRHzKyJO2gO+9LeA51wm4Quk pGEAF3sK+Y5jSgkNFcRFot5yRwErmyDWc2z4pZ/DAlKjOGa4afB5IVC0LyiR/Lgrno0d Y5NvAG03s7zjpPJ7Wx9Ceh8IpVWoaeztMqllFtONkja79rJAOut2JrjZ7AcXwn8lB1E1 d46LcWuQj1q36iunZaj9wz9eJVIQaK7rvktJgXyPRcbD4pq1K9jiwB6AjdnwLWSbfb69 5yTAJFxc7Gx0WGcBz1gfUmZaxMseTvNgvh9s2H68AWKNoELA/xpVZHbCyyrxpSqDg4zC dIKg== X-Forwarded-Encrypted: i=1; AJvYcCVP/RpMfBM4eOMEg11LgIsXu8KwiP0zbXgi/lSyqn3T07AL9Izt1wbiGbw0U+7Srk5LjIUqx6FNAUV2+Zc=@vger.kernel.org X-Gm-Message-State: AOJu0YynJJvBUZEb4IJAywqD2TkxHuxClICGVwKGAM8zy4FM74xj2wxT 2gt514U82Gqwjxvd82OJtvWIGbx6T/lg+evCt1Xjp+MVIhk3EmBdkqcP X-Gm-Gg: AZuq6aJ4ZmKePkJ9QOoLgltBZKU8Xn4Q1yryOsCEgk032CMiS061avK2TlurwncxQ9b 3+jOiS1smbk+L0PwTnzfCpM9svZBvo7+v+bL05b8BGy3HRHTQOynb3jdTYdYonI4Wfub3SJ5kqz aOfLo4iorO2WyLy4YBam6r1M8G9bXp+ARLuzIL8rwlbeqkgqnWOF5LIKrIjFeF8fE0AXlmSLMIf HZMlDrJO138Hgo8Kmh43MBzviDpLOP89fG4bsCD6HOGqGM2LoqBjx8N/meorWsW7YcJIKtjAkzW TfFfztRS8EEW3hikBuZGF3m19KiHdTxvMfL7Klkz8XbaPuUrULD5yCJbhKYVqgi1kHu2i5FlyVU bkExaVFJ4ualoc+xRn65wHmxFqhQycpuBdMMU0uB9SMq0FwQq5FCNa8Gk6x5cjFhG12ZhdgYaJf WFB1BBOY8YKBeQ5nWixrWbcTEIRDa9vHf8KO0qAf34z/r/EnIn2T5NFdsPhv1x8yzaPylGbitMy aY= X-Received: by 2002:a17:907:96a5:b0:b86:feb2:543 with SMTP id a640c23a62f3a-b8d4f709bd2mr71640866b.8.1769366361087; Sun, 25 Jan 2026 10:39:21 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:20 -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 Subject: [PATCH v2 03/19] drm/amd/display: Check for VRR range in CEA AMD vsdb Date: Sun, 25 Jan 2026 19:38:58 +0100 Message-ID: <20260125183914.459228-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Some monitors only expose GTF ranges (or others, without Range Limits Only flag). This breaks VRR even though they have explicit FreeSync support. Currently, if monitor ranges were missing, amdgpu only searched for AMD vsdb in DisplayID but many monitors have it in CEA, just like HDMI. [How] For DP and eDP connections, check for VRR ranges provided in AMD vendor- specific data block if VRR range wasn't detected. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3894 Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4457 Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4747 Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4856 Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++++++ 1 file changed, 6 insertions(+) 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 77a903880543..e4f4d6ba09c3 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13287,6 +13287,12 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, =20 if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + /* + * Many monitors expose AMD vsdb in CAE even for DP and their + * monitor ranges do not contain Range Limits Only flag + */ + if (valid_vsdb_cea && is_monitor_range_invalid(connector)) + monitor_range_from_vsdb(connector, &vsdb_info); =20 if (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); --=20 2.52.0 From nobody Sun Feb 8 20:34:42 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 0968D2F12C5 for ; Sun, 25 Jan 2026 18:39:23 +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=1769366365; cv=none; b=myZp1DSmRW2f6kZgNd8zK+tYyINOozF4XuIUnrxZTENx3Y6FVvgbn5uEsap4PudlNhho3EhHcKXh48xHb+XnvEaYqB/6QmqLSizrpFfUin+MH66JRIkvuW8Rio01z1jYS3HnH0OkGFpWlGlw69O9BH02EYKfmDIPcJzvLPbx53o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366365; c=relaxed/simple; bh=rJImseyeDXT6sWNbmfl0HSxNkksdvfzn9HqIiodGlQs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SlEJi9o2x40bAX0fcvcrVt2ntdIWvEG1dfQbXghjesi7n+VqPV+7MyjW5msUaLgX2pO50hy3FmbSvTg1Z5jTy1Pxgm9IXVPm8VPNP2bkh1Kt56z0jS8sB9U7U8yMVvRHWnrfLyZbPxLccgoenAWq59aAuoLKd09mzJmKvXKGwUA= 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=Gu2Kvj74; 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="Gu2Kvj74" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso579649a12.2 for ; Sun, 25 Jan 2026 10:39:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366362; x=1769971162; 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=BYketr3ZUeHaXFKK2N5/f0hDOcHB6O4IFG/ShrYM/tw=; b=Gu2Kvj74CKLthis+Z6kVI6gDEXRxoniz7DAxXrBC8aZvcRv2z26WlJmwoa1SikXvNF ujXog/vq/Qlj9Uq6jztOuPzxxB2+em7ydFhMWSPy2AEDYz6vJu83aTlhJnp/CUVleEs2 ddIonOhzggvVEhX+p7d9pubdZqKmPG0os1o6fUAaP777mJJqbu6RN16ZgrVih2sezO+I 1hoitX2YG9VnRiCC2YgRS4ELPa0YVuGipjPlT9fgNUb5vc7VdY6d2JB2isaSzYg0EJ6U Wcvow43xzO0vZmMcotiOk4SRoD8IbKMohKEtRVFBTVOsxfUIrVaBPoDEE+hBgK+YER/B TDDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366362; x=1769971162; 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=BYketr3ZUeHaXFKK2N5/f0hDOcHB6O4IFG/ShrYM/tw=; b=sNyuo/KdJ7779YJtFLivV4SGhAmXHmoEXvVnNw3V9QZRYq4ud438D2Nx/+mtsHyogB H22Ur5SnHQ+xHrnqE1LnUJYMx2kyBeMhDS2twufTN5ZWBtDyugb1xIgxUc0Wf+ZeOvNY /GObfEOWTZPLCh082DEicrKg5AiRhCG9bV5AAcomS70iUfxIAv0Qlig9Y1nzhB3eoBfR gGaSfkEN6676fpn6+OIZe7f8zZAtxubvN6XgOC6wOQ9m3ShvGm+nk7NDvnNeukQCf0r/ lMcipynpu2qIjR4Tq+1TbW2DVWaYOxpM/Y6UQv+Gdvva0adEcQd4lVpdSDxgNFf0j911 jB/g== X-Forwarded-Encrypted: i=1; AJvYcCXNKLvpyQMOd3j16obqj/n/Tn4GGW00FiO+xM2y+GdAKpReiFH5lW+z4j4GchJO6oRLoZjqrroPc+kFdLg=@vger.kernel.org X-Gm-Message-State: AOJu0YxAq4lcjIaxnp8LeP8gJ5JGlxeabtcZtnZ+4a7h7n1bGqOz5kxc 5kQVRj/JsMomw4Sb2JbyfmXe0u8tL68H8PUQa4m2c8PKFZqI4kX5KyX4 X-Gm-Gg: AZuq6aLWWQA5hbnh2LtYb1LnzsqzpG89Vep78kFTFv/3QGeLk3+YdXW1zLZYTHKYJR/ B6YdSYmNXuMQKRhJMGt4EumiqCklQIMvxg2+v+ih/w6I55YYCfz4WIbw0G4H7kZdYttN6PdMlbs A4ONmJ8l76758V4g3BROEZfUhe9dWxF7bVF4c5cRVU5iIGIzwNjwqdQrlnK45j72visdAPog/Fy /wpk33gmSGKU6TYP/YWywC7/0qEpfrY4LsxFn2ees1rXGDbXqND3BO3pKQSETUAyBtB3cOlXDuX 99FhXm7buGYGab6j5D9wsLYDv0ziUbCQfeWAiKqw8atexsrjUwzJK5B1XhoW7hOCbHOnWRFNSc8 dQd9hVuLrVYoVsK2UKFXrbyhAAZK4EoICi+w7IadDzax+bbMDGz7ASDNEO++n/3FHVFudp7RMPh 1sLGoj1lt1v9qkfNWvaJPWwhiClgLkk3uSuZ3afERCO1eKoARvQKnWezxMhdN/GM/KhglcKs5EV 6Y= X-Received: by 2002:a05:6402:4408:b0:64d:4149:4923 with SMTP id 4fb4d7f45d1cf-658706b2726mr914635a12.1.1769366362315; Sun, 25 Jan 2026 10:39:22 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:22 -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 Subject: [PATCH v2 04/19] drm/amd/display: Use bigger VRR range if found in AMD vsdb Date: Sun, 25 Jan 2026 19:38:59 +0100 Message-ID: <20260125183914.459228-5-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Some monitors only expose their full VRR range in AMD vsdb for some reason. [How] Compare exposed ranges and use the bigger one. This check could be merged with the previous one but it's better to keep them separate to easily convey their meaning. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4177 Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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 e4f4d6ba09c3..68a59275dead 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13221,6 +13221,18 @@ static bool copy_range_to_amdgpu_connector(struct = drm_connector *conn) return is_freesync_capable(range); } =20 +/* + * Returns true if range from AMD vsdb is bigger + */ +static bool compare_ranges(struct drm_connector *conn, + struct amdgpu_hdmi_vsdb_info *vsdb) +{ + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + + return (vsdb->max_refresh_rate_hz - vsdb->min_refresh_rate_hz) > + (range->max_vfreq - range->min_vfreq); +} + /** * amdgpu_dm_update_freesync_caps - Update Freesync capabilities * @@ -13294,6 +13306,10 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, if (valid_vsdb_cea && is_monitor_range_invalid(connector)) monitor_range_from_vsdb(connector, &vsdb_info); =20 + /* Use bigger range if found in AMD vsdb */ + if (valid_vsdb_cea && compare_ranges(connector, &vsdb_info)) + monitor_range_from_vsdb(connector, &vsdb_info); + if (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f68.google.com (mail-ej1-f68.google.com [209.85.218.68]) (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 BD0372F25EB for ; Sun, 25 Jan 2026 18:39:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366367; cv=none; b=Ua04nVMYGCWvIj5xkntBTWkyQUE72dlupRTSLQrknEEeyNu67lAhWVzEdPUCCh2tD5FDGCFqvYBIrvJH3wsGWEItY2lAPyWWPa5FMdETnZSrAg8TmPZKJbf2P7N/AkEA+eZ9GsCR4LgHoNz7rFISiG+tZcHks8WncIPneas7cHQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366367; c=relaxed/simple; bh=4+3zOf3U25EsK64bzCIdecW6JQXCwDwBwOOlyGfWByM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QPosh4naNGHvbpgbpg8QTHib5NdSpfxnn7zurj9dZ7tkjHQdzPGVebrnK3BACSBRmPl4C4LKD+kr463NVbwnaJ6NFP6BSEk1zfiq6ecFvgQ4XTb6ok55M+5vFrZLI9ryeQwzpL/SbTT7QJD+4QNW/L5G4a6QWvz7gjFLhPfPfi4= 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=N0bd40Tc; arc=none smtp.client-ip=209.85.218.68 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="N0bd40Tc" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8862767cf2so34948766b.1 for ; Sun, 25 Jan 2026 10:39:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366364; x=1769971164; 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=7MhJNXHQ/ZzkYdK/mC1IYoZJ62H8eejAR4KssW2i5ac=; b=N0bd40TcTPdOyE9RAKWTgfxw+dGfhz/nuSHCQbNMKgqKQZt7KC9VpCO3CwcaSm+7hW c8XudfjM6JHYZhcAt5ujyVOAfhWOyLoxydNgjqfABL2alP3Bltaay46hUDeZdjWHdQnY 53bQAB6H+PsGJKFDeuYjIFlUPnUYbQp3yiugCnFmzmeJuyFGEojNXNHgYzX4eIbCFPJb am+CQ9QM5cSykzaPj5dYH8Yd8Mr1amM+lGX1MJaSEPT+6BNNtaKZ+Hy2y4JoCUqXiRQo yoO8aSgrmWG1N/Lj2zG1t3vYYqZ925iwOQIa0kpwTueDDEqF5l3/cWZ6Lw/7Wux7d8E6 XMJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366364; x=1769971164; 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=7MhJNXHQ/ZzkYdK/mC1IYoZJ62H8eejAR4KssW2i5ac=; b=OEI9e5QbHs7IGWu4tF4tbsa4fVPGc1T611sFBMS4xF5loRMqY8nbPRanxxLkoDSIBV EYVs+WYB9XEJv7NEyHs35hnEybJ3Dga+a0eyDtA0hGnTRbfyyn0D6MMxty/B+7FV4lOe RIPucHoNC/Sh4aej9Izx5XDCp26KfYKABWP0mqvXNiHxdL2yqTssrjDz7K1+HJ57wUGk JF4r7I78J4K53Rh/q2UJN80DiJKFJOFzMCUulLGLaUZjir2A5CudVb/UXU1yzB1ybjaC 0EIdurWPKkNpCE9whWsj4OSSdeNbAgEUFZHqJOfJS4+AHpGdcGIz8ohA/wTbtHQ5qc9m tEyA== X-Forwarded-Encrypted: i=1; AJvYcCWfEeBsT8vmO+KXxSQUCvwc+P0kjbtVJhyMk6FD/7RBoZDsCDdlaLMUKGQpHpcJEBeJXGI0I74supzPoyg=@vger.kernel.org X-Gm-Message-State: AOJu0YwAMch1U9rA87WgB2VXWXWKZBHO9sJC09azkQYXSmKrxx4dC/aJ w53xRYU4Ul2xNf7ksZLreqkE7EISoVBV8ZMbplGJn4xRN1qoorFrIkNh X-Gm-Gg: AZuq6aJd7jkBtH3C7YJLOcQWW1Y1ppZX7pcosxIMMsaecRakv+HLKWd/8X4/D/E0cFH LQNqCHfjiRQDactk/L8TXky/Ab9c3U5jy1uG3FBLCTneGGL44UwPflOAp0myAxXvqYWqPxgrB57 Q75M2YQxcUcjltV4LJ1iIKqzDrVBTVb6EyQjOxUF/A3eDLuxzjcETz60HW+bfj6ku1yFm/1rHye nRKh0AsE4SKVO3LcKJOvqOrGU9ri933ABOQH4ze/xBQ8UpvmfShaByGGWgVVLLhp7AwFvzcWHXA sd/AyKahphofl7UzdVpTlVY3ZNoOA+miadao7pXxVkr8+vnKM9YJAmuXaItUsAyupTg5QdDIYr5 msPgvKfQXseMlhdFkhskhF5RmH/QyRKWJ2Sph4oINtWl0DsNrM+HnStKx+wPbnX4yGDwHsokyeK hoN6vypmuGJJy8gI2EKjCaHHqmEr15hUHEhPJp1+U46Lod+iuiW/vmUsm1RmivTP51 X-Received: by 2002:a17:907:c28:b0:b87:106c:88eb with SMTP id a640c23a62f3a-b8d20d64cdcmr80420966b.0.1769366363818; Sun, 25 Jan 2026 10:39:23 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:23 -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 Subject: [PATCH v2 05/19] drm/amd/display: Refactor PCON VRR compatibility check Date: Sun, 25 Jan 2026 19:39:00 +0100 Message-ID: <20260125183914.459228-6-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] DP->HDMI PCONs prevously entered the DP path [How] Restructure amdgpu_dm_update_freesync_caps() and move dm_get_adaptive_sync_support_type() to dm_helpers_is_vrr_pcon_allowed() to better reflect what this function does. It never actually gave us any other info. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 25 +++++++----- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 39 ++++++------------- drivers/gpu/drm/amd/display/dc/dm_helpers.h | 2 +- 3 files changed, 28 insertions(+), 38 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 68a59275dead..33b76c1850b1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13259,7 +13259,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, bool freesync_capable =3D false; bool valid_vsdb_cea =3D false; bool vsdb_freesync =3D false; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; + bool pcon_allowed =3D false; + bool is_pcon =3D false; =20 if (!connector->state) { drm_err(adev_to_drm(adev), "%s - Connector has no state", __func__); @@ -13287,18 +13288,24 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, if (!adev->dm.freesync_module || !dc_supports_vrr(sink->ctx->dce_version)) goto update; =20 + /* Gather all data */ 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; - if (amdgpu_dm_connector->dc_link) + + if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; + is_pcon =3D dpcd_caps.dongle_type =3D=3D DISPLAY_DONGLE_DP_HDMI_CONVERTE= R; + pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed(amdgpu_dm_connector->dc_= link); + } =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); =20 - if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || - sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + /* DP & eDP excluding PCONs */ + if ((sink->sink_signal =3D=3D SIGNAL_TYPE_EDP || + sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT) && !is_pcon) { /* * Many monitors expose AMD vsdb in CAE even for DP and their * monitor ranges do not contain Range Limits Only flag @@ -13323,17 +13330,15 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 + /* HDMI */ } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_frees= ync) { monitor_range_from_vsdb(connector, &vsdb_info); freesync_capable =3D copy_range_to_amdgpu_connector(connector); - } =20 - if (amdgpu_dm_connector->dc_link) - as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); - - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_freesync) { + /* DP -> HDMI PCON */ + } else if (pcon_allowed && vsdb_freesync) { + amdgpu_dm_connector->as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; 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 monitor_range_from_vsdb(connector, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 1f41d6540b83..45a91df619d9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,40 +1381,25 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -static bool dm_is_freesync_pcon_whitelist(const uint32_t branch_dev_id) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) { - bool ret_val =3D false; + if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) + return false; =20 - switch (branch_dev_id) { + if (!link->dpcd_caps.allow_invalid_MSA_timing_param) + return false; + + if (!link->dpcd_caps.adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_S= YNC_SDP_SUPPORT) + return false; + + switch (link->dpcd_caps.branch_dev_id) { case DP_BRANCH_DEVICE_ID_0060AD: case DP_BRANCH_DEVICE_ID_00E04C: case DP_BRANCH_DEVICE_ID_90CC24: - ret_val =3D true; - break; - default: - break; + return true; } =20 - return ret_val; -} - -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link) -{ - struct dpcd_caps *dpcd_caps =3D &link->dpcd_caps; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; - - switch (dpcd_caps->dongle_type) { - case DISPLAY_DONGLE_DP_HDMI_CONVERTER: - if (dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_S= DP_SUPPORT =3D=3D true && - dpcd_caps->allow_invalid_MSA_timing_param =3D=3D true && - dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id)) - as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; - break; - default: - break; - } - - return as_type; + return false; } =20 bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream) diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index 7014b8c2c956..e51f1e489129 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -220,10 +220,10 @@ int dm_helpers_dmub_set_config_sync(struct dc_context= *ctx, const struct dc_link *link, struct set_config_cmd_payload *payload, enum set_config_status *operation_result); -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link); =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 --=20 2.52.0 From nobody Sun Feb 8 20:34:42 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 3379B2F3621 for ; Sun, 25 Jan 2026 18:39:26 +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=1769366368; cv=none; b=E1UDzU2kIQ5ZVqR38l8fCoch53lI7AHPZswVvjgsFGAdLbqme4yJtZBH2Il2gmYK3I+Ikqj1QEod/Z6D6waY077ecj7g8cuwctYBxxj18tgdsZtTZhfsECPqHlEkrmzTzICjReQ5j3EHA8CwoQTaijya9YUwx7SSH6kEfdbNmHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366368; c=relaxed/simple; bh=mADQCPW/HUTO+fnDyi7Loh1hY+4lOvUHG6Ob/q13tPE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TR7vMU6YVpgbExaUc3wuEdx6mN62slDRFYnrShAs7zlcOk7j5J56yVLZ+KpkyLCVwCb6JnQ6SNqf7xnfqt82i/+p8Q48ROPFPChf2qRFNq/yrIp++WrsBreylS2QNYo0s+wg8qzeMCUlNgmP7s6gCIUROc4AYvpUp/xcJwSv4Wo= 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=fUBml/PL; 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="fUBml/PL" Received: by mail-ed1-f66.google.com with SMTP id 4fb4d7f45d1cf-64b7a91f9daso544565a12.2 for ; Sun, 25 Jan 2026 10:39:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366365; x=1769971165; 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=hmgwWRrt6HOF0PbDVge366fL7Mh7GQU+20kTg/ePqis=; b=fUBml/PLlISN6lYHvBY028NcY9H6vu9PjClQtL1fu5MARno0Oas7NhjHgyFG91DIJ9 273P2m2sj23JMjHhmOGjBUfFFmpFs9GUTGhSMYr9txZpCBqTJXQnWxY6B0A8mrTKwPon yTWIIPjKyp+xN3c55ZVYKiHwU+5qLSrZjZptSJuUcPNzxlQlst0uQmdQ6CM21P5uVSiQ 2eWp/NKhFVGh0RgTgPGAEtwPn8y5xcCBtctSJmbu+NbGze9xSaYn3JHax2ipaVzzH6cG we3+BUTg2gEYSOYzra1aKukaUKo+98Q4pVG2SmLolst6bcREF4GCIWd3N8KL7MUCFhsx BgEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366365; x=1769971165; 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=hmgwWRrt6HOF0PbDVge366fL7Mh7GQU+20kTg/ePqis=; b=mj6Kb78/Vq082zbIkSGCTwW5IHyd8/uMTqlPGwpQeD7wD/7gf8/hXqaQoPx1ZUcFlm TT6t4tR01LDQ9yljJpl/aWcLyFPGepMsLS3+FBE6VmEPWkR44CT++muOKFY8j4lGQd8O xBoNK7hIWLWABLJxU88u2JQAyAprGVPAjdyo5dZnaWpkymkfzZV9REQFZODno6PFOQJo ircYh6Rj+kK0e8hy4ZF0NUCCBmR94TR+O0f6e2e2c0Hre4ItYruJb/e9hrI3qriQLt/K 4aPcASNWmgRgdwfyr1CIq0g1U3KGhPgWTiCalVZji/ob6VAMJ8gXezq6t8/OLzjsQioC uwKA== X-Forwarded-Encrypted: i=1; AJvYcCVlrn0dTobPmAf0Vk2Qil3Z2wF6A90S2g2TDYbg0IbK3voINA7qv4ejV9ToFxdHKBH2Jddy6VrpN17V930=@vger.kernel.org X-Gm-Message-State: AOJu0YyLxu26/8HCjGNZxHHO33RM9lDVjMdqp/ldtCwGsO+HoM+UgH7G I7W+pyiSO0x3TIusY1ORutxz4eDKta8id/C3ERvq6cDsB1HmgKMtogik X-Gm-Gg: AZuq6aIMvrfllTNlwPy8MLgPPFWlA54izeqXblLn5dEg82RCTZYCVhIp9FVro76sbuL iyJjF2K/kpWZn9pG54HiNpmNPcmUk9O2sy9dDdy5hr4f5ybXZHCdemergg2aC9JhbRHyFKG1ytg oR6Bqq7SgBcdDLwsg07O7bZPL9OIap9SB4FA6FsYqHGuLl0YdUgUSor2i9PqAO0LM4K79gRvWNH phxM0bLiLnZpprNrvCe+FcefOoHq98wit9FG1QfhDvPf6o61JKS6QMHCg1ynQyNVEQlR9ShK4dw A5tr39sMnutnBwV9ilvgKQkr9A/dOcUBN6N3EZIlj3eHm5YV5hN5Amsn3p1aUmIdOzmTtJInW7K MVLlOrI44N7l3Kv8J/mhEyc8PE4KWgchNddFZrCfyK/M9I0Oi6x5r1p3wyonc3JdEvETzbVjsZ6 k8ReYX2RzM9WT6a+eRltVJUEGpikX0A1y8Oc/3Cs3WfSRA9uDEyZX7n6IdrE+VOIc38ORyfnjQg hg= X-Received: by 2002:a17:907:d18:b0:b71:a627:3d9f with SMTP id a640c23a62f3a-b8d20b42346mr96019266b.0.1769366365198; Sun, 25 Jan 2026 10:39:25 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:24 -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 Subject: [PATCH v2 06/19] drm/amd/display: Add PCON VRR ID check override Date: Sun, 25 Jan 2026 19:39:01 +0100 Message-ID: <20260125183914.459228-7-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] It's currently very hard to test if a random PCON supports VRR and report it's ID. [How] Adds override as part of dc debug mask. Allows faster testing and reporting of VRR-compatible DP->HDMI adapters. Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 +++++- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 8 +++++++- drivers/gpu/drm/amd/display/dc/dc.h | 1 + drivers/gpu/drm/amd/display/dc/dm_helpers.h | 2 +- drivers/gpu/drm/amd/include/amd_shared.h | 6 ++++++ 5 files 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 33b76c1850b1..7673143ba651 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2062,6 +2062,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) if (amdgpu_dc_debug_mask & DC_SKIP_DETECTION_LT) adev->dm.dc->debug.skip_detection_link_training =3D true; =20 + if (amdgpu_dc_debug_mask & DC_OVERRIDE_PCON_VRR_ID_CHECK) + adev->dm.dc->debug.override_pcon_vrr_id_check =3D true; + adev->dm.dc->debug.visual_confirm =3D amdgpu_dc_visual_confirm; =20 /* TODO: Remove after DP2 receiver gets proper support of Cable ID featur= e */ @@ -13296,7 +13299,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; is_pcon =3D dpcd_caps.dongle_type =3D=3D DISPLAY_DONGLE_DP_HDMI_CONVERTE= R; - pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed(amdgpu_dm_connector->dc_= link); + pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed( + amdgpu_dm_connector->dc_link, connector->dev); } =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 45a91df619d9..cb8a2855ac10 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,7 +1381,7 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev) { if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) return false; @@ -1399,6 +1399,12 @@ bool dm_helpers_is_vrr_pcon_allowed(const struct dc_= link *link) return true; } =20 + if (link->dc->debug.override_pcon_vrr_id_check) { + drm_info(dev, "Overriding VRR PCON check for ID: 0x%06x\n", + link->dpcd_caps.branch_dev_id); + return true; + } + return false; } =20 diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/disp= lay/dc/dc.h index ff15e5990ec0..144b5357e6fb 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -1057,6 +1057,7 @@ struct dc_debug_options { bool scl_reset_length10; bool hdmi20_disable; bool skip_detection_link_training; + bool override_pcon_vrr_id_check; uint32_t edid_read_retry_times; unsigned int force_odm_combine; //bit vector based on otg inst unsigned int seamless_boot_odm_combine; diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index e51f1e489129..5e77deb09200 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -223,7 +223,7 @@ int dm_helpers_dmub_set_config_sync(struct dc_context *= ctx, =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd= /include/amd_shared.h index ac2d3701e2bd..894e1e738ce0 100644 --- a/drivers/gpu/drm/amd/include/amd_shared.h +++ b/drivers/gpu/drm/amd/include/amd_shared.h @@ -412,6 +412,12 @@ enum DC_DEBUG_MASK { * @DC_SKIP_DETECTION_LT: (0x200000) If set, skip detection link training */ DC_SKIP_DETECTION_LT =3D 0x200000, + + /** + * @DC_OVERRIDE_PCON_VRR_ID_CHECK: (0x400000) If set, always return true = if checking for + * PCON VRR compatibility and print it's ID in kernel log. + */ + DC_OVERRIDE_PCON_VRR_ID_CHECK =3D 0x400000, }; =20 enum amd_dpm_forced_level; --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67]) (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 35BA72F39A3 for ; Sun, 25 Jan 2026 18:39:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366369; cv=none; b=EGWRA7ldD3LNsdGr84ChvoYnTX3OmSO9K5I6E8oRybdtT4gxukYtWyyu8rOFKDYrvTgr0zA9XBk9eMmYrI0f87K/Dhbwz0YLmNWiFWcIp3wMuFr6TQTHi5f1gsZ0GFNUJpnOmlXhpqIWRua57xVkx7NLjARxCwQwBWh6S2hI4Fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366369; c=relaxed/simple; bh=3gLoNjBt78fz/0qHqYjcn5htLcSoVCIoZ1Gk8CC/AZU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pD+ewN0Fv7/xqQevRn8B35t7+qe2UTjQVAkOSUOCCJaFkHDtM+XJzkB/5BPZEOXFDp7MeK2pzWj3Vgr5iq87AtuLppiH4yMc54IeatlI3vZLRBhn7ctE0aN40qWts+lgbz38N0z6dhC/tOd+aq9tGhSxwmBW6vaZAaFqqINNTfc= 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=X8cGLquR; arc=none smtp.client-ip=209.85.218.67 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="X8cGLquR" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8845a47e39so63018766b.3 for ; Sun, 25 Jan 2026 10:39:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366366; x=1769971166; 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=WUEpNBWo+nSLTU4UotiQVijk+9VhpRak/nFSgqx/fMg=; b=X8cGLquRf3bdO7Bg71Jl8ki6Jjfvqefo1kHfRGBdMm+vrhpQxBDmwmr15lk5pjntM3 MrLxAJsWjanR51LA3Gc4FzpSL6H2ggCNCQykWKEObKRAFNBxihY2ePURdoyhFH7fDNFO bCCugAILKrNpklULdaGkqEdXggbS/7mgUzJz+TYXurjR0Y7dbwO048SYZyISHQ63pY1k dE/y2DQyeHv+62XIWzALnDEZ8xusvhI4zmBYeSY3AgUKxNX0QfWF5xeTSt6Sbba3+qaN lFXxXXUUVHY8rUz05Zo1FuiK+FZo5flHKwSHkqhqyG/fC5bzRTfjTGLYlq3aG+/VK/Vs gTng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366367; x=1769971167; 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=WUEpNBWo+nSLTU4UotiQVijk+9VhpRak/nFSgqx/fMg=; b=l5ajc10Wi0snqH0242T765+i/NasI+X08UwRrnGMzA2EDpbRuQhpFEcfA8FjpHb/Ty DjPyOAihNOTMzkEaAjEuaig2Httvj85S/LtDECA5agX0fgIL4ssbDcjAOnRvvzI6AD3t Pnqe1XLPdBv/6oUpNDV6JKKwJpLHC+/0yi2oV75hpg43n1+CDibgXNF+ae4rJ+B0Mt+f EiFMTxt2w3S2j2Iethb2066LzpwzJ0kalFZAXBKBHOXm4B9ohK3z3p6B+A1jPwtzbPpk Wr32MqlWu8LmLHv11eMPeWcVi3hz87z6W4y4DndJ/teinnmBqBvJ4a3W9c9iH5mjI2cx 5U8g== X-Forwarded-Encrypted: i=1; AJvYcCVOLViFHjycbsUqfqMuHji0Ap2g7xU+feycAsqAOQ7i8b04oePRLapjVuX+uGmsenN3JBgZDVxEFiKLUno=@vger.kernel.org X-Gm-Message-State: AOJu0YyLyZtCkUfv+UiiP8CBhTNIQWUCCO5wI6teNCrMWxKcamfJMUdy s2Lbriz828fcaVAS9LUoM8xbY44I/2knI85tzuUcyOG4zFPAGZAyMEZF X-Gm-Gg: AZuq6aKweZSZlaTAKuxCsZsJpGbStyLCejHcgxfb3BccEBSrUSTpyP4n295aKYYnxF5 B8SSj5SguiY9vgvsnDxJA6IA4z/IiF8w+MRsjyy2JskNKzZsIHk08mUD9zego4/BKEIPe4dXu0m +79KqxhDZbiXtErE3hHK64w7iJ2qQM5erULEW3bRLlG0HixQNjr9Ms4rZnSELYRSzvoLRxkNMP3 Oi6YDA95MA3MTZJUYiIVF7SUF1Dbtr/OC7PuVo1F1bZzLzQqgpecHPM0TeU/3WZ/2zomYVhQWHI eBAGojC43oeZvaEFaXCBaAqDXi1XgdfMgyl7R36GyfvoYlQ/Jj+P73MlpHDhLcRfhc646rrwS+R ko1G4YHirINZuRGdTlL8Seb+C3sXbzhi9P92xG47ljMEoJB/HjWs54SnyfeY8USlEUN8l1XwyVT fwlceNXBaNcjkjUf6uLB6YMNgFUlguL6ZNFVF4hClv4EuIy9493RLCWK7Uz1b2q2PZ X-Received: by 2002:a17:907:749:b0:b88:4ff8:12fb with SMTP id a640c23a62f3a-b8d20dbff7amr102048866b.0.1769366366462; Sun, 25 Jan 2026 10:39:26 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:26 -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 Subject: [PATCH v2 07/19] drm/amd/display: Add CH7218 PCON ID Date: Sun, 25 Jan 2026 19:39:02 +0100 Message-ID: <20260125183914.459228-8-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Chrontel CH7218 found in Ugreen DP -> HDMI 2.1 adapter (model 85564) works perfectly with VRR after testing. VRR and FreeSync compatibility is explicitly advertised as a feature so it's addition is a formality. Support FreeSync info packet passthrough and "generic" HDMI VRR. [How] Add CH7218's ID to dm_helpers_is_vrr_pcon_allowed() Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4773 Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 1 + drivers/gpu/drm/amd/display/include/ddc_service_types.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index cb8a2855ac10..690558584a0f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1396,6 +1396,7 @@ bool dm_helpers_is_vrr_pcon_allowed(const struct dc_l= ink *link, const struct drm case DP_BRANCH_DEVICE_ID_0060AD: case DP_BRANCH_DEVICE_ID_00E04C: case DP_BRANCH_DEVICE_ID_90CC24: + case DP_BRANCH_DEVICE_ID_2B02F0: return true; } =20 diff --git a/drivers/gpu/drm/amd/display/include/ddc_service_types.h b/driv= ers/gpu/drm/amd/display/include/ddc_service_types.h index 1c603b12957f..e838f7c1269c 100644 --- a/drivers/gpu/drm/amd/display/include/ddc_service_types.h +++ b/drivers/gpu/drm/amd/display/include/ddc_service_types.h @@ -36,6 +36,7 @@ #define DP_BRANCH_DEVICE_ID_006037 0x006037 #define DP_BRANCH_DEVICE_ID_001CF8 0x001CF8 #define DP_BRANCH_DEVICE_ID_0060AD 0x0060AD +#define DP_BRANCH_DEVICE_ID_2B02F0 0x2B02F0 /* Chrontel CH7218 */ #define DP_BRANCH_HW_REV_10 0x10 #define DP_BRANCH_HW_REV_20 0x20 =20 --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (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 C27772F069E for ; Sun, 25 Jan 2026 18:39:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366371; cv=none; b=TsWuQgm1YVAPtwitTAw5h1R8R824WfEkpUxk/QY9L5IvF1arMQLpTNKCvH/1KGB7TZ/+uMPAabwpJmFe/dNmPUAXBu2Js/N7kaYkro791ehamd+sBdTeq/XYIHOTptDc44bM0DiXaxqeghvkh78kOMK5QU2/0w95DcNorv6aP+o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366371; c=relaxed/simple; bh=DJmIqqhGLIvWWN/upUq+tddtg/wFJJBVANgro711hBU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nzYA57ycPXAzpAnQJlqS44AftwNNUmSQfSSypUcAUeWpu52xCxqnKQnnNnYgokg9yolLz4zPfPdqgHSJz5KfwwqiwN9+uh5ins/q4HB1XVCiAE2+ZhqXCrwMstyA6Il4BkRZqViy2OJxk16BIMuKirSFdfEoSy1AlhFBBQxvuXE= 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=OW1B9Bof; arc=none smtp.client-ip=209.85.208.50 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="OW1B9Bof" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-6505d1420daso572301a12.0 for ; Sun, 25 Jan 2026 10:39:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366368; x=1769971168; 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=0A5eHusdWY5bDg+aivWCgCoxrDZwEpdh2mh6IhrC0mc=; b=OW1B9BofHDHpyn4OmdAsIgn3lcFMbsVS1pAquPwGLx63decDtkNc14eTzIEMDwmuBI 1leH/q6Xyo1hYFIvd7/mUw4bti4utwey84lcomo1asDzd1Z5aLPs/tYit7IUsGTiGyvG Dn7aPLBBJ7LOQtbiMeallEOMZDrU6Er/EhTgeFpKyVzr5A5sV8cQjTU7feXJqeoyC8r/ 4N2PadnM0a0ZnUBDn2ud25BsqPSsDc6JqQgla4jQ0HHrQ0vNR1DVluSHreL2rL6C+/f+ /GvXTECWrlOGK9XaDVomEDp9qyjKDyAg9++Q6OOgEVfCOOcmGKieiOtRTajLyJnRYp0l N4VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366368; x=1769971168; 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=0A5eHusdWY5bDg+aivWCgCoxrDZwEpdh2mh6IhrC0mc=; b=ScuAqjDStprNHnUviJmhY4Cnn13sGSCTWqHfiGVBG+JMpWezOrhgvdHOx5rTeTmN3/ ezZgQxJhAue6pQHvOQZxEBMa0PpYRgy9vHvtm84dE0UKTOqML7Hsw/jgSjcoel+wKjPl 6gfaqVFRpGCXuH0KU57a/tg8fZQI/KPjpk+xFmQJR3nM3NjvQ1ExtMoxRam31UzMVgmr N3aJLA25sB7IeqFAOcp8vDq+lFYTQLiH5WsQX/wBaFbWXQ0m24JEJL3B2QtlOT9KKff/ Mv35/xwGMh1PmATTs0XtGs6FEimoxK6k21FPJrmu8xEnH5t98ulfraKX2gm3ydejIgLd q0xg== X-Forwarded-Encrypted: i=1; AJvYcCWc3kysTqrdvIjpIsIxpofNM+oQgqJvC4UUKKQRYkAHlTSEppfYE4CSCdXinQvUm9ygAmsMDIruv+YXGgg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzd+5CR+KKgFJwqrxf97pBhaP4IrqJRWBWJeSnYgBVhfw4RwcRB PHh65MitY5Ntu3lPxRJqr4DvaMdH9OumiLaIMQEn1IGzoFvNaRYXPL04 X-Gm-Gg: AZuq6aIqLqyuFbvHolg8hYZufZdBcQW1S3PVt9fp9l7ybz9qb6Ko91Bd8Ap8aGlYKHY XH0Mwh2e3HeGSY31HyXZ32g94XvW83qbzFEEaapdJ2VilNs9GtuJ+dfxICXxOjykVPXd9lVN6y/ noOIKToAKdQcpbFeajaA7wY+6qCn1U4qJhH+vAk0Y+3fbOJB62Ufb/kfG9myLDFaiSZA50FbJjT YHs0csOvvljCmYuZ/FMYZFWc/8z2/P509VNvmRdgQF5KQAM4iUBRtNDzAKcwC5qonpRdvvHewgp c7jyqcQjgNXPJxIWYW1O1V7nXnT+7uArvJd6aT4YiMfAvlPmWp5HAa6snkybRhcx5JZkbsALL1K 99dKJmLqDfJ9stDNYaDoaCFFCppzt2R1GNJICmnHkcU7c9XGCqQae1iqtsv2UhiWlFou93KVut6 HRXh9eXXN0ILJfiDVR6XMmpD5IvbIWoZg7VG7gD+0ACJ4KdFhEdQwuH/BTkOzyTTy4 X-Received: by 2002:a17:907:787:b0:b8a:f2d7:9942 with SMTP id a640c23a62f3a-b8d3fce31cdmr73328966b.3.1769366367942; Sun, 25 Jan 2026 10:39:27 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:27 -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 Subject: [PATCH v2 08/19] drm/edid: Parse more info from HDMI Forum vsdb Date: Sun, 25 Jan 2026 19:39:03 +0100 Message-ID: <20260125183914.459228-9-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Drivers may need info about gaming features exposed by HDMI sinks. Add a central way of storing this information. [How] Adds flags and a struct to hold HDMI VRR information. `supported` here is an additional property which allows easier parsing in consumers and adds a bit of logic used to detect malformed VRRmin/VRRmax values. Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- drivers/gpu/drm/drm_edid.c | 41 +++++++++++++++++++++++++++++++- include/drm/drm_connector.h | 47 +++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index e2e85345aa9a..5bdacd425908 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6149,6 +6149,33 @@ static void drm_parse_ycbcr420_deep_color_info(struc= t drm_connector *connector, hdmi->y420_dc_modes =3D dc_mask; } =20 +static void drm_parse_hdmi_gaming_info(struct drm_hdmi_info *hdmi, const u= 8 *db) +{ + struct drm_hdmi_vrr_cap *vrr =3D &hdmi->vrr_cap; + + if (cea_db_payload_len(db) < 8) + return; + + hdmi->fapa_start_location =3D db[8] & DRM_EDID_FAPA_START_LOCATION; + hdmi->allm =3D db[8] & DRM_EDID_ALLM; + vrr->fva =3D db[8] & DRM_EDID_FVA; + vrr->cnmvrr =3D db[8] & DRM_EDID_CNMVRR; + vrr->cinema_vrr =3D db[8] & DRM_EDID_CINEMA_VRR; + vrr->mdelta =3D db[8] & DRM_EDID_MDELTA; + + if (cea_db_payload_len(db) < 9) + return; + + vrr->vrr_min =3D db[9] & DRM_EDID_VRR_MIN_MASK; + vrr->supported =3D (vrr->vrr_min > 0 && vrr->vrr_min <=3D 48); + + if (cea_db_payload_len(db) < 10) + return; + + vrr->vrr_max =3D (db[9] & DRM_EDID_VRR_MAX_UPPER_MASK) << 2 | db[10]; + vrr->supported &=3D (vrr->vrr_max =3D=3D 0 || vrr->vrr_max >=3D 100); +} + static void drm_parse_dsc_info(struct drm_hdmi_dsc_cap *hdmi_dsc, const u8 *hf_scds) { @@ -6274,7 +6301,7 @@ static void drm_parse_hdmi_forum_scds(struct drm_conn= ector *connector, } =20 drm_parse_ycbcr420_deep_color_info(connector, hf_scds); - + drm_parse_hdmi_gaming_info(&connector->display_info.hdmi, hf_scds); if (cea_db_payload_len(hf_scds) >=3D 11 && hf_scds[11]) { drm_parse_dsc_info(hdmi_dsc, hf_scds); dsc_support =3D true; @@ -6284,6 +6311,18 @@ static void drm_parse_hdmi_forum_scds(struct drm_con= nector *connector, "[CONNECTOR:%d:%s] HF-VSDB: max TMDS clock: %d KHz, HDMI 2.1 support= : %s, DSC 1.2 support: %s\n", connector->base.id, connector->name, max_tmds_clock, str_yes_no(max_frl_rate), str_yes_no(dsc_support)); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] FAPA in blanking: %s, ALLM support: %s, Fast Vact= ive support: %s\n", + connector->base.id, connector->name, str_yes_no(hdmi->fapa_start_loc= ation), + str_yes_no(hdmi->allm), str_yes_no(hdmi->vrr_cap.fva)); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] Negative M VRR support: %s, CinemaVRR support: %s= , Mdelta: %d\n", + connector->base.id, connector->name, str_yes_no(hdmi->vrr_cap.cnmvrr= ), + str_yes_no(hdmi->vrr_cap.cinema_vrr), hdmi->vrr_cap.mdelta); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] VRRmin: %u, VRRmax: %u, VRR supported: %s\n", + connector->base.id, connector->name, hdmi->vrr_cap.vrr_min, + hdmi->vrr_cap.vrr_max, str_yes_no(hdmi->vrr_cap.supported)); } =20 static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 8f34f4b8183d..dab9d5521f41 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -254,6 +254,44 @@ struct drm_scdc { struct drm_scrambling scrambling; }; =20 +/** + * struct drm_hdmi_vrr_cap - Information about VRR capabilities of a HDMI = sink + * + * Describes the VRR support provided by HDMI 2.1 sink. The information is + * fetched fom additional HFVSDB blocks defined for HDMI 2.1. + */ +struct drm_hdmi_vrr_cap { + /** @fva: flag for Fast VActive (Quick Frame Transport) support */ + bool fva; + + /** @mcnmvrr: flag for Negative M VRR support */ + bool cnmvrr; + + /** @mcinema_vrr: flag for Cinema VRR support */ + bool cinema_vrr; + + /** @mdelta: flag for limited frame-to-frame compensation support */ + bool mdelta; + + /** + * @vrr_min : minimum supported variable refresh rate in Hz. + * Valid values only inide 1 - 48 range + */ + u16 vrr_min; + + /** + * @vrr_max : maximum supported variable refresh rate in Hz (optional). + * Valid values are either 0 (max based on video mode) or >=3D 100 + */ + u16 vrr_max; + + /** + * @supported: flag for vrr support based on checking for VRRmin and + * VRRmax values having correct values. + */ + bool supported; +}; + /** * struct drm_hdmi_dsc_cap - DSC capabilities of HDMI sink * @@ -330,6 +368,15 @@ struct drm_hdmi_info { /** @max_lanes: supported by sink */ u8 max_lanes; =20 + /** @fapa_start_location: flag for the FAPA in blanking support */ + bool fapa_start_location; + + /** @allm: flag for Auto Low Latency Mode support by sink */ + bool allm; + + /** @vrr_cap: VRR capabilities of the sink */ + struct drm_hdmi_vrr_cap vrr_cap; + /** @dsc_cap: DSC capabilities of the sink */ struct drm_hdmi_dsc_cap dsc_cap; }; --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f67.google.com (mail-ed1-f67.google.com [209.85.208.67]) (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 374EE2F4A18 for ; Sun, 25 Jan 2026 18:39:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366372; cv=none; b=PjGYPekro0GnexVO3dn404Ks4YTJ0oLaYz9caog0NfwZR11AjdwAfrJoVU5ZE/90xMJnBK3LF447wUwQcAruH4BC8KPe7XbzkfISRmwVUzRXB7XEvR2VA9R06D+/rnYWK0+9yFdwpTQewaWnkBSzgM14moRlMVwv9sIpDaucT1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366372; c=relaxed/simple; bh=yqhpTyamX++1bTXH0hzFRbHZ79ugb4d0HEFANkb2THg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Sx+UfXqFfUw+1ZATn+T8gQNSzEPUxBdx391Zgck1oH1ikT04w8R2ymDYv6BAgCVYCDKpbi9UVfYPd6xc6FHvVb3J+t6TC7n58xu9BwAIylNypFiXbxiHWLONVtrc+CCNb9JPqHGPdEzWceGvBye/IXGpYtEGhpvFFpcRh4ybYAU= 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=FlI7goYV; arc=none smtp.client-ip=209.85.208.67 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="FlI7goYV" Received: by mail-ed1-f67.google.com with SMTP id 4fb4d7f45d1cf-64b7a91f9daso544571a12.2 for ; Sun, 25 Jan 2026 10:39:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366369; x=1769971169; 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=IRzbLCxrVkWp1Gv9W66KOOv/WVW000APHSi4XKPpJIk=; b=FlI7goYV3sK4YCVRAMg6pnHM+inJSCOPExSjo4jk8rtIWJIbPDK9vjyAAumN5wFJBd 99XV05WGsLwlK8HQoZ/y9aaiOz2BNtbbX39KOfz6bSRFV+MmIsyEwvb182wpsF1ufWkm jz/W8k75BSNHErajsyy74zWWPxMpDVjdOQo+b8iZuWMkBsatrJa5sRh4cfualU2IVAlH lAdNHluIE5LdPPa7aVzkJZKwMf0QkpX8K9S99nnRNqEQ6ZMJgUA+LIFoJCQhlBxucD6G nGThrWygh4dYwhzhmfsZoTEl/BgTOdnoin7F9Yjh7aL0YyKScMfI39o4sHvjHjxj9a+R M4LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366369; x=1769971169; 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=IRzbLCxrVkWp1Gv9W66KOOv/WVW000APHSi4XKPpJIk=; b=OnhTUb1YR91CyrHvbQjvuEFP25ZaX2nCfGPCl+0nHPWdevUL2wYyB6LCSXdPSHLcrJ 7HzqkPcO0YHHzi/GV9vJEVOjipyCj8kP6oA6WUT6WRDBE93j6NRehRyK+lQHIo45D+BX X6KwJ0n/6LgHsFFkL+mvz+GSzp68MxDaj+k4NhaY2e3B6gEj/QjAj0OxrRhcKGaM0V0j N/RjqWnmY1Dw3P8NtmOrs0Xhjv3JQEOsCc7FHkkli2Vor+sFsV4qG/Hp5c49mPgTIC0c IxdVyu7vzBJSw6A2VEYuAMTe33ypoqGWUhqRBgqpvk3mLMwb8P7PwBi7P069lps2VWvC lh8Q== X-Forwarded-Encrypted: i=1; AJvYcCUcnuOJWdlGpu8ASPxn08jfsssdCETSt8FLACT53ziqo1wKTeEgzJPY1Vgw8j8sNPN0EbS+UMW+B8cIqSM=@vger.kernel.org X-Gm-Message-State: AOJu0YyD+FkfaqiH9JM6J5u3fifaNUnHAYD8NCpoVVU7a7XmV7BZD69G b6TnJApxS5U1/P41XHDl7k9RCfkMWt+YGGhkbR4IzM6v1rqitGWCtV85 X-Gm-Gg: AZuq6aKPCD07F9PAeK8NqYbVdZMsB3pE6HK27f8aSkXt+OhtnaX//5Mx5DSUM45v1g6 aS9CZtGksLzcZGCweR7tcfpbnzCUkLzQDyOphtQ0tKkZ0L1fAp1WayLkH3XQBluMy0h3Ail6GD3 O9tc3ZyfTEGZxgpFuESOaoDjpFodOmR6Mbjv1RjQIbcb6tJl34diunl+2qGBGLpNIN5gbYkjZ/P 5wKdq5lP5YrcExUKovuDwg7iucX30m2E1wEXr/BSRX72A7B4DMbucU/hpA9Fnx0VAgYNQFJkujo GMb7oNmQbOnPyqWEqI38mXk4pvorXUzjcE3xdDpYWri8GzCTn5epTcieBqbYJx6rlk6N0JJJrxD R5euYy66L4SnNvPtNOofkQF/Wbhmns7lx+xSl6+B+S6zTplqTiVmHTeAfNgyyUumH2HKh8xK19Z tV5aBHtnib/B2XmgjmV2S125ftonl1Ev4upQUkVliioUnXHMHqDKkDVDfjZTw23v/z X-Received: by 2002:a17:907:787:b0:b8a:f2d7:9942 with SMTP id a640c23a62f3a-b8d3fce31cdmr73331066b.3.1769366369311; Sun, 25 Jan 2026 10:39:29 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:29 -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 Subject: [PATCH v2 09/19] drm/amd/display: Rename PCON adaptive sync types Date: Sun, 25 Jan 2026 19:39:04 +0100 Message-ID: <20260125183914.459228-10-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] PCONs support sending out HDMI VRR infopackets on their own and this makes this types not specific to FreeSync [How] Make the name more generic for the upcoming HDMI VRR over PCON implementation Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 +++-- .../gpu/drm/amd/display/modules/inc/mod_info_packet.h | 10 +++++----- .../drm/amd/display/modules/info_packet/info_packet.c | 4 ++-- 3 files changed, 10 insertions(+), 9 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 7673143ba651..2f856833806e 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9599,7 +9599,8 @@ 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 FREESYNC_TYPE_PCON_IN_WHITELIST || ac= onn->vsdb_info.replay_mode)) { + 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 if (aconn->vsdb_info.amd_vsdb_version =3D=3D 1) @@ -13341,7 +13342,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, =20 /* DP -> HDMI PCON */ } else if (pcon_allowed && vsdb_freesync) { - amdgpu_dm_connector->as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; + 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; =20 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 ddd64b7e4c04..5de8a6918e6a 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 @@ -48,11 +48,11 @@ void mod_build_hf_vsif_infopacket(const struct dc_strea= m_state *stream, struct dc_info_packet *info_packet); =20 enum adaptive_sync_type { - ADAPTIVE_SYNC_TYPE_NONE =3D 0, - ADAPTIVE_SYNC_TYPE_DP =3D 1, - FREESYNC_TYPE_PCON_IN_WHITELIST =3D 2, - FREESYNC_TYPE_PCON_NOT_IN_WHITELIST =3D 3, - ADAPTIVE_SYNC_TYPE_EDP =3D 4, + ADAPTIVE_SYNC_TYPE_NONE =3D 0, + ADAPTIVE_SYNC_TYPE_DP =3D 1, + ADAPTIVE_SYNC_TYPE_PCON_ALLOWED =3D 2, + ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED =3D 3, + ADAPTIVE_SYNC_TYPE_EDP =3D 4, }; =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 00473c6284d5..294f56d20062 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 @@ -590,7 +590,7 @@ void mod_build_adaptive_sync_infopacket(const struct dc= _stream_state *stream, if (stream !=3D NULL) mod_build_adaptive_sync_infopacket_v2(stream, param, info_packet); break; - case FREESYNC_TYPE_PCON_IN_WHITELIST: + case ADAPTIVE_SYNC_TYPE_PCON_ALLOWED: case ADAPTIVE_SYNC_TYPE_EDP: if (stream && stream->link->replay_settings.config.replay_supported && stream->link->replay_settings.config.replay_version =3D=3D DC_VESA_PANE= L_REPLAY) @@ -599,7 +599,7 @@ void mod_build_adaptive_sync_infopacket(const struct dc= _stream_state *stream, mod_build_adaptive_sync_infopacket_v1(info_packet); break; case ADAPTIVE_SYNC_TYPE_NONE: - case FREESYNC_TYPE_PCON_NOT_IN_WHITELIST: + case ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED: default: break; } --=20 2.52.0 From nobody Sun Feb 8 20:34:42 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 3F7952F0C7F for ; Sun, 25 Jan 2026 18:39:32 +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=1769366373; cv=none; b=Lv0ls9GwFMFJ7kQKA412h1++l3Pi7n0ZWVdgGZ80U8ZUOe5QyLz0Xsc/WX9Lc4I2yYBYBHwTQrBx4XYED9FlsoNndcS7fRIHoPdzpMt5a/1PbeK6vIF/RHXeNYy8b5DZzNGIFtzDQghPr9GKVnKVEFVEporVYm34nUqMu8ICim0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366373; c=relaxed/simple; bh=wHoRnU9Rzxv4b5jLR9rQC0aLORVpg2sXfsqoy2ebfTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IO5Pbuljk4cL0ImKlP1uI8kaF8l8savDL3F9dqen5xx+QUaIykSAp1phiWvGXlftSPqYRLAotDyUaU5l6l3oGToiwEXQTgvHkaQzk0UYUv3/AXonyHftAXNsi62uNbbxr607TxLJGnSuQ/9NAedm3J8Obu4udsl2gcfdtU293ak= 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=ay86f/Za; 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="ay86f/Za" Received: by mail-ed1-f65.google.com with SMTP id 4fb4d7f45d1cf-64b7a91f9daso544573a12.2 for ; Sun, 25 Jan 2026 10:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366371; x=1769971171; 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=wD3DZNrHRBINvEokamMq5jiUBWudz0vnljedektK4oE=; b=ay86f/Za721mlE7nvw9VTuzkq9/gEk62k9MV/hzp9bi/1NBfi0n8RJ+FmxNyk7b4Mg il87IH78EdlEzwduRUNIchUj53nWeGiPiYDqbXjWAP02PLTwOtvVQdXVH4bpZvONvU3Q 06UZpbW50ToA/tw6dKxvC7LB87YovU717Pu+ZFMY4VfCPtP4IjdT7M40bKKZHHhXkszc 3EtMsauk17zNwAOqk73SHyxKDEOvwWbYoR/FVGgPK1Yr0knrpMRvsVE7NtpeuAeZa5Y6 UyBEZh8/vnRQ6sVZrQ8gbnmjT/ciE8shupk0ReC6CwAlQ6A6al/IYq/NogVC7lgFb1I9 KRBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366371; x=1769971171; 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=wD3DZNrHRBINvEokamMq5jiUBWudz0vnljedektK4oE=; b=pjtoRA2hmz1LClLe44+M59tKXghT4/jcX8/I7mrk9EL5f5JX6QEVrQ1GNH5PstDf2T BFb5nd6uMl+Wtq58vWE3mNGUDje1xQhuufSCs/KbtoReZVfBsCrqyGJ23RlyYJgSajyP 4H6pcAfCz16OTiZNwg7NQIwMZbxaQBqzalfJAHaNa5nBkLaM2x2Z/pG6wv2djLhplzFa lcPph7vJHgYflaTUwQiRl0ijr3X5N6KXLV9ZMxkO5VAIqD2HhZXmBpEyGX+biCxox4LY 0uM+cgvWlZcFF4fH1jU13XcUTaZnOA2Ayp2j6p8ste4faeGmv5NErVUNwxtNpkeeFTfz JbZg== X-Forwarded-Encrypted: i=1; AJvYcCWnnA9J56gwHjTJXERZ4MwhoM1psCkRifpfACuZNO/drroeKY3wcrdKBUh6tO0emuv4xAMmQBoyzp5D7Sc=@vger.kernel.org X-Gm-Message-State: AOJu0Yyp2iA6XS2hJkqyWzb29vmwd2asi2DdGthVGK1+2wKkOnVUpyMw t0FQwZjYitrHYZpCSrVRE1IVXwY3NU07EtxX8Aixq68KL5vUfEJO1QOC X-Gm-Gg: AZuq6aLMArUnqYReSY4SeV46VEtck6JdZyW43xRvhN167l7168axJzZr1xTpFuZ27Jk 8XZ0PdGhMdlAL8Z6XYqnPO7/tqn8KUp2/51wroy3kmJSEshT1v/abM9t8afZbUE2EWW/Y/U+csH VBCi+kLXeVRNwlOr5k4jj3Ely3R0J3gKgRlpXyt0Bpqcn1Rvk7hjLH2A0BHqPmx4aCZFWeB3Kw6 UR71DUVu0QOWMnbPrdFRlLeGKKnJWx75CS5+S+kvjxrryzhRCXVnouFm7FwYf2UHpKso0rBxkec CjR9p4FljqPAxm9OYgL7rrrBr6y28yki/4hObd+SfzhcE/HbMSDyQOs7AtBTFPLIsGN/+UZQNZF LW1PgYn/SfSo2jRJo5Hrmlx3bZjlaN8ESaswEy9FKt9cdoGlNqq1mhPfXN9bpW6vy9RagR67WQ1 yNey7egnxO56kS2c5KnrfULQJq2ZnQ48GXbfd9SAYhynCoYUXHj3V4t+uulspiax/S X-Received: by 2002:a05:6402:1467:b0:658:1299:8a03 with SMTP id 4fb4d7f45d1cf-658706c3572mr823565a12.1.1769366370537; Sun, 25 Jan 2026 10:39:30 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:30 -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 Subject: [PATCH v2 10/19] drm/amd/display: Enable HDMI VRR over PCON Date: Sun, 25 Jan 2026 19:39:05 +0100 Message-ID: <20260125183914.459228-11-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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 | 32 ++++++++++++++++--- 1 file changed, 27 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 2f856833806e..d3464705ab7f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13210,6 +13210,21 @@ 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. If VRRmax =3D=3D 0, + * try getting upper bound from AMD vsdb (if passed). + * + * @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 @@ -13259,6 +13274,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; @@ -13296,6 +13312,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; @@ -13341,12 +13358,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 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) (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 8C0632F5A32 for ; Sun, 25 Jan 2026 18:39:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366375; cv=none; b=m9SEbj6VjlfA2Mkl7VyzQcsrqVFgi4Bajckn6cDgtukkrbqg861qs1de6bIB37Edp2/ceZOvE6nKcf8GDUyEosrZ2PFiV9Ef4SnqMAeQXEkq8fcGM6vwqbkjGHkcM2gTHpTub3EqW4/wNcoKtiv+GCy4KIwmIvR6mL6b1n+yXaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366375; c=relaxed/simple; bh=/W+J5KNiImurTEGKwIHSrNB2ayoimoZfMD7OdPWglcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JPByYaGv1tw+xy6bbxEZ621Ix7zorUQszhz22vyt2+QeHfF5ri9bjpEbsOupI4KZ2XOLKEtUKwz6YXloAys5RnOfozxZHGDhZl/yyrxvBn0gs+7KYj3juoSyUki5y2zzH7qgQTvoxmxpOnVcVIcamVfRPwMCc8oUhIexHBucCFs= 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=G5Mgv8Bt; arc=none smtp.client-ip=209.85.208.68 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="G5Mgv8Bt" Received: by mail-ed1-f68.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso579664a12.2 for ; Sun, 25 Jan 2026 10:39:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366372; x=1769971172; 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=03JVoj5pQZnfXuN1Dsu194SUGxgQv5HQ+1Go+Oa8Fms=; b=G5Mgv8BtV+rUMsaggNf5vCHt0tXcQ1dQrNIMeYpW8MfGoGKOlWkME6keeZIiCo2HZP F2U9qaMUIp1c50RYZ1f2A2FzZFgDDFhgoUVKi3ZtijCnT5KuCYWyYLis6Yii0LLAgw0T oxzNNf//tikVDKhBF0r8vA6T+fYQ/xgb8fxHYSRzn2RlbYRmi5S/JxQzgnBnvSlu1uIe iDfv8B52RaG4MPvr/PAQdQatL9Irg4NslhnuiWI0orp0DeQlf0bm5f0CUKo5r7+WFbVe EKYlto15F8w2yvaa8n4co5+fBz4z0N8MMZ1H18tKbOBWKUTIa5+twXd/vWOgfq0ChrVX v5ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366372; x=1769971172; 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=03JVoj5pQZnfXuN1Dsu194SUGxgQv5HQ+1Go+Oa8Fms=; b=rIHHlejxXMv5INsN5/cHOjSe3ZrC0rgLySyb0EUJ2LpqY2znfHFimHXXoZmVboXmJ2 BoqkFzhtVRta05HTy+UusGtn3yyLJ3j20/qc09lkWfQZoU/3Lf+0uABcCim4ZMSlrXj4 jX06x8RCqSVowzwSzV+KEUso0umPZSXq3GYhpt4yM3dMORD4qjTiXg8SEehmSQOMz0FV NBHzhx61lyJ1xGxyMdYhCRfokZwSesweiA88wZCbtnC19M+j3cfDiwgXwaQc/RfgjTKm FYFXv7jYv6pBct7SjmJJB3ttt2OylujJzar3XmxgK3VlE5Tv2WMJecdQ8a8HLgr4RGjU ns3g== X-Forwarded-Encrypted: i=1; AJvYcCUnVvugeKDYQM7UyeRBD48WwIxq39nrAhKdnFwh7OohO9cw1RGOhZ8BCdReCzP5g4eo3YrbDokgZff6sG0=@vger.kernel.org X-Gm-Message-State: AOJu0YzJDbczHIj3C0E1EQsIhu7I5OafFELGjoI1EwnMzDxXlqrSt6NF ayn3mDRdz5VV7zoUdIe3Nc2bwellecM09//rtnrmBEp7SX9dBhMeEOca X-Gm-Gg: AZuq6aKlnnzp2eoTXgAfIwl+FmYF7ZA7JXeCD77dWeM3HPmDi+bAvjYyEqEcFrajVBS QeATDzwNT51SnShPFXBHqEw8AqCaMBYaRxFbtlzOI18ZXva87HQYUcfL8MD/v5rd9jv6ImQROJ/ yGAIn3CVKLSnps/LXL8SgRgA2zEcCoKERjjLHYVvB1O817aeL3DCP70IUV8s6XT1iLuiUv2LGmk EAnmDcVRWSaevE1qlGF9a1dlxSmPfFvh6k+8aJF/Guf8J9KVxakyUQBaByhgPvrwAJTnB1A+8pJ HEVhGWeM/cf3TaLb8qRyal3G/r3pGY+790n0gz6Ue1GhOZ4kQV3HNycqyaEDp3x6w86GmbxpU7y mmvKHrTtJpWrebb2Jq/Pu2PlMToW8xbkXNtUXavo/l5XDiT4Hj9DKMy96/qHBRoSQG3EwiTV/XR Vp77hrtac+dHz01NSF5UeKyn1z+QKqijzquu4O4PkFryUghz7ia7FI+uaw5DL85gdT X-Received: by 2002:a17:906:c104:b0:b87:3087:54f0 with SMTP id a640c23a62f3a-b8d3fa9d567mr110192266b.3.1769366371750; Sun, 25 Jan 2026 10:39:31 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:31 -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 Subject: [PATCH v2 11/19] drm/amd/display: Support HDMI VRRmax=0 Date: Sun, 25 Jan 2026 19:39:06 +0100 Message-ID: <20260125183914.459228-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] VRRmax=3D0 is a valid value and means that the upper bound is guared by the selected video mode. [How] In this context, saved vrr max is the max possible refresh rate ever. Try getting upper VRR bound from AMD vsdbif it exists or rely on the limitations of BRR in VTEM info frames. I found through testing, that TVs seem to reject VTEM when BRR is set to over 1023 Hz. Use this as the last resort VRRmax. v2: - Update max BRR value to 1023 Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +++++++++++++++---- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 17 insertions(+), 4 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 d3464705ab7f..b93ba14d87d1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13215,14 +13215,25 @@ static void monitor_range_from_vsdb(struct drm_co= nnector *conn, * try getting upper bound from AMD vsdb (if passed). * * @conn: drm_connector with HDMI VRR info + * @vsdb: AMD vsdb from CAE. Can be NULL if not found. */ -static void monitor_range_from_hdmi(struct drm_connector *conn) +static void monitor_range_from_hdmi(struct drm_connector *conn, + const struct amdgpu_hdmi_vsdb_info *vsdb) { 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; + u16 vrr_max =3D caps->vrr_max; + + /* Try getting upper vrr bound from AMD vsdb */ + if (vrr_max =3D=3D 0 && vsdb) + vrr_max =3D vsdb->max_refresh_rate_hz; + + /* Use max possible BRR value as a last resort */ + if (vrr_max =3D=3D 0) + vrr_max =3D VTEM_BRR_MAX; =20 range->min_vfreq =3D caps->vrr_min; - range->max_vfreq =3D caps->vrr_max; + range->max_vfreq =3D vrr_max; } =20 /* @@ -13360,8 +13371,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* DP -> HDMI PCON */ } else if (pcon_allowed) { /* Prefer HDMI VRR */ - if (hdmi_vrr->supported && hdmi_vrr->vrr_max > 0) - monitor_range_from_hdmi(connector); + if (hdmi_vrr->supported) + monitor_range_from_hdmi(connector, valid_vsdb_cea ? &vsdb_info : NULL); else if (vsdb_freesync) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; monitor_range_from_vsdb(connector, &vsdb_info); 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 5de8a6918e6a..306eb7355c25 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 @@ -33,6 +33,8 @@ struct dc_stream_state; struct dc_info_packet; struct mod_vrr_params; =20 +#define VTEM_BRR_MAX 1023 + void set_vsc_packet_colorimetry_data( const struct dc_stream_state *stream, struct dc_info_packet *info_packet, --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 B66832F12CE for ; Sun, 25 Jan 2026 18:39:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366376; cv=none; b=ih8hQrF1+damezS4Ik/6Lbnh31887oMZD7kcJqunTuuIxzTBG5AKy3wWFWCo/yj/DulbESiDWXbI0gRUm6EUNrlBPtEEIAwC2OWBXig92GXXliVhvqd1HG3teQpEfTF3DTajVNwOGhlx7En58xkxSEFLwHIZxmFpDoLAv/2AX3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366376; c=relaxed/simple; bh=GcaEj+tOuxKphgozm7nJzgaBYu9cItIM1kvz3wBp5hs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Eqo7HP1+K5Puoei6FvJQOSAL7VCAM0hd4S7Y8okBXF9dQjqYukYe8Og9ooJIgX6qzufMDkeVjCyQAYAN493GBACkahgNIMsWbM0jZsW9VG0FAdvE0UYhRcZ3gCIPnOLoLQBf/ND5jkaS9yJ5wK23DcBB/TefsIJlDGQg1Yt7EPA= 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=ZGFp9Hiw; arc=none smtp.client-ip=209.85.218.48 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="ZGFp9Hiw" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b884d4fb7dbso20522466b.2 for ; Sun, 25 Jan 2026 10:39:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366373; x=1769971173; 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=B4XqZpkGSkEnuKP0+cVaiZq40DDr/xmS7/WCMvlfxBE=; b=ZGFp9HiwTFuTDWsBQvAZpcOVPI55VqzCHWeWGUUE/MkAlcFO3KWOHAcoMVX4BkJzDm TQpP4AMyRljFHQ5pGK7Ry+hf4efMDGj3woaCAgZ/zETTNCyjIVn22xJe5ZNgIsiN3UjW xh/ApdUFN9oO5/5qfjgezU2F931V0JPlG/wKgIV8tCbUU814veBtDw5JLaNwwJgw+1IG iYBmqe+Md2yyDNhff7zoYN01zXNfzxPIfEhFcG9MthLBEtHbON44CZtDzQ4aQ3Q3uDlw XVomLqLUAJEZBKrTycdRNy7Yheu2NV8B/aZY983xcuhKKyZnTpd+uGSJakG+TKSBe4wz Akow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366373; x=1769971173; 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=B4XqZpkGSkEnuKP0+cVaiZq40DDr/xmS7/WCMvlfxBE=; b=CI3PtpAAbZQNC4lMrzu7+mZ2PtoaJmf5pElI2gQBwDqaDz69nLd7HFlS7FB4I4nJ6o k6Nb7sKGTtQxgRSPhRdoa208APCxL3Ks/7SR41ZkN99CA4thpMiACu0aXCeqExEpu2+0 Dl2RwzqwMKAANT6sS3ij+w09W4rt4iXVVuBhVp1B83nQlTAPp/tnuOHelSgtffq6vZ4r k1tnlTxUygi6oSv8KqIH7J8s+RASTzrTtxd+dwb5x0c2BT95z+Qqi+dk1ee3HxALu1jF ZUGjap3scI4jZs49k8N43f0068ypYbc2X5cj9gCo+3B9j3Smpi42IbxiHJ0kc6ph5/tK ogVg== X-Forwarded-Encrypted: i=1; AJvYcCXKo8vMWWfQcrIdiV2RVt20JDrrXyztoi3By59ouLDgdiCSrtnJ+7f5TPvm9nlFejxHkKjMkYBR2JHTxMw=@vger.kernel.org X-Gm-Message-State: AOJu0YyaJbNh4k8IbOj+d/bKfG/bmlI80tpxMEFk+O4z4oK+sgYITR49 NdlU6lebXEVNTRg7ucJuyOdXVrot/attBpPU1L5TRMq1Q3nV+FCczDx1 X-Gm-Gg: AZuq6aJrPCubMWq1kr2yAi2Um81JbKoeUgXxfQ9gr0qqSqvKVYzNv9dfOiURnJ5LhRT 38JSM/nZpQxacXMcgE50F9iDhf3CUGgQ9wXl+7WxEGv5mIomW1lfNf/hNYQ8Hj5aT2odKvGfF2S 1iE6tbNNOqOBCRkXaGhXzsQ5tXrNof5gNihz1vhSA0rplbheUKl/5eAWTELzt1M60vv6m0F+txF spulMp+bigtj2X1iwwkOxIhbtZOjZ/rI4H9JMQ0SpUqEM3nS78VaLh1UiMnDtl/c4mWQPnZernE Q1izwCo5JwI/5TRtRIUdsundGleddpO7FDiPullMyn/r6HrvrNiJIH+kIjpixBw/xdJr5/QPqnY v5/guf/I8V16YOVR86ChYPaJ8YzbKvcMnvgaHNxQGogNlGIHwXqHBSyxG7tZQ+jUrBtN9EfufQN fK+utMdGZgA8OYAu2dfGERP1CGgE2sUrdBgiVMrX41+6Zfm8XmenX+BxQRXQ7tsDHy X-Received: by 2002:a17:906:d54e:b0:b87:1c20:7c5a with SMTP id a640c23a62f3a-b8d4f85435amr104144566b.8.1769366372975; Sun, 25 Jan 2026 10:39:32 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:32 -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 Subject: [PATCH v2 12/19] drm/amd/display: Build HDMI vsif in correct slot Date: Sun, 25 Jan 2026 19:39:07 +0100 Message-ID: <20260125183914.459228-13-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] HDMI vsif was assigned to vsp_infopacket (FreeSync) field [How] Build HDMI vsif in the correct hfvsif_infopacket field Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b93ba14d87d1..f95e8a739303 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7362,7 +7362,7 @@ create_stream_for_sink(struct drm_connector *connecto= r, update_stream_signal(stream, sink); =20 if (stream->signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) - mod_build_hf_vsif_infopacket(stream, &stream->vsp_infopacket); + mod_build_hf_vsif_infopacket(stream, &stream->hfvsif_infopacket); =20 if (stream->signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || stream->signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT_MST || --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (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 07BAD2F1FC8 for ; Sun, 25 Jan 2026 18:39:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366377; cv=none; b=pbS5rK6ZYMr9QU4OVGV0wsrAn6rACjz6jzhSdcG9kt4XWfMUKRdv0BZxPDNUhimBCcPliwp0Ltnmslaot6T/ArIqF4p4TEH/b7/m06XnJJXzM+9CJv3Vd6ELU/OSdC5tH2QHUxSaGyIGnLIw5l8Uya1XpAlY7CkHwh219172Z2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366377; c=relaxed/simple; bh=vf5cu6bfSPUzqqCF/xqA8f4ZPyhOtQv0KP91XkoQyWQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H07OSNNnxJRGbqYACVGna9gvtHOLpu0kPGaPDRoILAGNIgoissJMlWwqZcrGl9KaWSNgLlcs2wLShZz7nheMnbSD9qB+C6CHyEhdkdfqGHHh6Qejb2jIeknYHnlES8mO+2acQM9uP9xnQkIx8kbT6qvCAbINxjoCHxeu8AbGT3A= 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=ONa1mf8U; arc=none smtp.client-ip=209.85.208.42 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="ONa1mf8U" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-6580ec94bcdso508144a12.1 for ; Sun, 25 Jan 2026 10:39:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366374; x=1769971174; 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=uzW7AW51HsUGJKWqzdZ3dl0YJS+mvGm7coF5xMofNf0=; b=ONa1mf8UcraC9E7vmHJtF8b2OJlZeptnoMB6/2C78usMz1zAkWKdm9R6LbQ0rxtlDC xFZoei21e4N8L+1Fr7bdAMU92rO7k+TWwqOhWZquoxEwFLi980T4tcuvnQ1JZFKcp80A 0cHvfNbYLwvMEsRdjL/GWT+eQhGH09i7yzVplR4wJ4+1Ipf5uvh/n1f3HSNvrgT1ypW8 /8/TqXZ1GcFLzip67x21F38yO0/lek70rWm/FNQwwptt9VBrF6gQvmtR/3wiJ893ALoF Q6X4UCxBMZOXk+c3sC+2VOEufwESKWlYHxPhzMxuV5FswoRy16bHLmPq/EjzXO8Umf5J BVkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366374; x=1769971174; 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=uzW7AW51HsUGJKWqzdZ3dl0YJS+mvGm7coF5xMofNf0=; b=WIy8+1X+yQ752BsLC7I+ssxMoM2YibJoL+aFtDINj5krLawGLLQYiLxUUiZ7eQ8Su9 2TqCr20VouM9YurpJe+olwccKhgyQ2Owun1SXYB7ztlGu302zQ5J48vDbO+FODJ2Dafm Ta9oGsMjGtU+ZUwYaswg2aVpbuVEGdcSNw6wQxLH3ux7jvgNveLL7bhE9L6pnniCHRRL b58ruYBY17xx7tY0kzOU181tsvsTOKkvPphsh+7ug4KerJZA4uutwNRPURGNoSVdckpR Sslc69XW9A2R2IzBV9cf5rYnGS8nsBT8UK8DahTLdxbO0t5qMz4QXJoGgOKAQoC8gGjd HhjQ== X-Forwarded-Encrypted: i=1; AJvYcCVWS+wtkUeL5OiWvRzWiw0ATwt19PVQ6FfP6yW7WmRSRqaMxhkuP9Tlg7nM+8wWE30M6puk8MX0yEg2nN0=@vger.kernel.org X-Gm-Message-State: AOJu0YyiQGGlc7DLc9qkfSjPztYuVhe/bIAjusB6UhbFE80b7lOqkMgl ZlMTrSXPz5yS+SzheU8aC8usJmusixLpprbNdWI2k4QfXiSnCd/HQYRe X-Gm-Gg: AZuq6aLDU33/ZZivhoti6he89+a9lHQ/YhMFvPyb1AXOIyO7pmhh90+pVD7qnj3OHS/ rsWMkU04zebylQJheGwC784bX8zbV0RblbBInWmuumENWyRHg4C+gJ6mjV1cT80kmmOUCAYkXb/ TMMLiUFwNpdASuLRScHC+AaVHlVxXzQoTD8hHi34I7RsnbLkd88Fb0zrB+Qf9m/oQs5UFIkcnt3 8uRvXUr+cYvkXxSH1w2YFYiezvBTXpXUykWnHejqZzd6aaW+eV/W0VMZ7pFezYJ7kui/+d5BqFU r+1IsxrTlmJ3nfXzzkwlgmIw2lelnNZCbNmB5ucJINiWeuZXNBTuIsREFMwOCgRxPgsMnENSk9p Ho/do9ud1BvRukHydfbO/EUkOppKf6j6WowPj9hIfjVzQhy+eUedTccmFa/FLAv5ygRHRllVxx2 We5CjV+Pkfvy0ccLyNymu5Wdl8HL3s/GfqWOOwXMKudVuvpW7Ga8PI+/Nh+ePlve6QPDOLLKYwx Qg= X-Received: by 2002:a17:906:c110:b0:b88:45e8:cbac with SMTP id a640c23a62f3a-b8d4f7197f6mr85434266b.6.1769366374187; Sun, 25 Jan 2026 10:39:34 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:33 -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 Subject: [PATCH v2 13/19] drm/amd/display: Save HDMI gaming info to edid caps Date: Sun, 25 Jan 2026 19:39:08 +0100 Message-ID: <20260125183914.459228-14-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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 need info about these features in parts of the driver where fishing for drm_connector struct is infeasible. [How] Add three new fields to dc_edid_caps and fill them if connected device is HDMI based on it's EDID Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 7 ++++++- drivers/gpu/drm/amd/display/dc/dc_types.h | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 690558584a0f..c24476182fdf 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -137,7 +137,12 @@ enum dc_edid_status dm_helpers_parse_edid_caps( edid_caps->display_name, AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS); =20 - edid_caps->edid_hdmi =3D connector->display_info.is_hdmi; + if (connector->display_info.is_hdmi) { + edid_caps->edid_hdmi =3D true; + edid_caps->allm =3D connector->display_info.hdmi.allm; + edid_caps->fva =3D connector->display_info.hdmi.vrr_cap.fva; + edid_caps->hdmi_vrr =3D connector->display_info.hdmi.vrr_cap.supported; + } =20 if (edid_caps->edid_hdmi) populate_hdmi_info_from_connector(&connector->display_info.hdmi, edid_ca= ps); diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/am= d/display/dc/dc_types.h index 0e953059ff6d..f9f108db1734 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_types.h +++ b/drivers/gpu/drm/amd/display/dc/dc_types.h @@ -210,9 +210,14 @@ struct dc_edid_caps { =20 uint32_t max_tmds_clk_mhz; =20 - /*HDMI 2.0 caps*/ + /* HDMI 2.0 caps */ bool lte_340mcsc_scramble; =20 + /* HDMI 2.1 caps */ + bool allm; + bool fva; + bool hdmi_vrr; + bool edid_hdmi; bool hdr_supported; bool rr_capable; --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 9870C2F9984 for ; Sun, 25 Jan 2026 18:39:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366379; cv=none; b=Zd19TMjfAU5MEFYXtoV7bQyofXg/fd3k1xT+4JcmmCo865HaT21v0ypg3cONmFB5gTT2paDV3U2IpOEKwpxMi1/iTUd98E7e/0WlBQckOa7Mvvu3IT4/tmsn4OfkgvZ7ujIL6epBCzigjkMeKhd8P/td/Z1s9UmVEam+Wrte3Dk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366379; c=relaxed/simple; bh=vCeNIrpSQnHAiIFw3AElk8d1M4LVBQRi4IODP++43PM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=urc6layU6acq3L/xT2Fa2X/w2KIcJMY/xeglvxQMV5SUfJ2PfQD1Kyw+L9FuKfpjMzLSID8oTmSnHnK31WlUuwHDBBgylyxuAGLqUqyGozk5FI3fUFvDdW4elQ3cjYVdffP/Pq0S6B9thnuZcue8Oay7YH9NGBnpYEEs7ZB95Mk= 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=YQk1AOAy; arc=none smtp.client-ip=209.85.218.53 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="YQk1AOAy" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b884d4fb7dbso20523366b.2 for ; Sun, 25 Jan 2026 10:39:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366376; x=1769971176; 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=ZSHN2Af/L95S4Os5yYFaV1hvvj2RmaOdeVqj+0nIWBY=; b=YQk1AOAyNCuHqk0gtGXiDfl2e7sGcAfmWWeqPlusPBAQfB2dx69hreg1iltdvNojI2 NKxpD2Pf74oZCcAM1S41bOHNdwHk+W2QYEUnJcOBtkdNdeUSP7uxZyZjo600yRIuPVnF XqShy29kCDwb6Eq4wmfY/d6o/lzxjPo6G2syHFrUY91kVydxEEvdqZ4mX+WIQ07AFQPn E+q3dugijTmMKgosXfpVZvh5lsPJwlROJ6qxs6dDMSJQKGpP5NpkAZoIzATwXf62p/vW 1l3G56yTENFk7V3NGJ4Di2YSG729H8absW611MYq6uZ9aTRsk2DH5XQfCtAfKYnsKBrH NMxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366376; x=1769971176; 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=ZSHN2Af/L95S4Os5yYFaV1hvvj2RmaOdeVqj+0nIWBY=; b=Vg4ZcQULdmXV/i3hM9YI93ZiFIwQGp0x/IUy4rRLeix+fhu11ICfhXCerMqPjyU2YY o+U5Vr+/0JKmfHHs5iDpLXY6NEeNNIXRNwKFYsIdm0H+7s/VeKjKTKRcjgGZpebPLhQY l8OU1RUqEe+81Xl/h29eOrJlqLnQ1DTxpF5Bij0rrOoqyBMODCjHU+n0m8eGB5reG4fj tXeuyvPLm0+VAARUt4YLablnEk40tuZbxCPG7ncg5ONexr5lzkSUW9EZz2brRAVkKTLS cmkVtSxLUBRne2atjdIz8f/oihnFbfBgBtiP2bi4CSz/Q2sK1k6DkeZO8e3s9NqPhrBj DVkA== X-Forwarded-Encrypted: i=1; AJvYcCW1skahp/m9kuj7RzHY9GConZ/wMb4GYh84pm3olhPHcF5yYdm7cBitWLJsUsrQPC/sOmCKKmAagdaWgBI=@vger.kernel.org X-Gm-Message-State: AOJu0YyLNGzt2EnSvX8E2aciC2mqhIJoJgQkwo71ko5wRJz8bYOfqm0U lAIHwZ9qxvdlbzNpfM1gswnZR7NQQ7CtW0da70h5IuSmURuQNnqj8xNL X-Gm-Gg: AZuq6aJRwLWk3vof9rWMU5Oe4mFHx2hBwXoWko3g+PZkwdnHrFZCeGXZsRoLHNSkV25 MMB5MEDsLdraUaKC0+Hlrs14Cwlo/JF64cyH3M5siAWaPSduzwANMZbr5oqPTWNggfWE2oXv3gU exgHXIuPX/odk8kdL303W+zEqX5XquW3xjdTIDUkKhnDYwL6mRhe7dupE4N4EjBk0HQuOKkPiy4 yUUGHqhQjaaKOjShaoEVqo2IOAC+eEsMPG4DqiINCErAnjKoh0zy7VCyEzYO8ScNnsihIq51Vby MJ2NVzH7wutD68BZ97StlQvs1fmM6e1h38APNxs5BoMKJfjnhaU7I0YkFEVfwLJ1kBeakwRBjtF F0OEROdM77PHE0imYWo4Vi8ZHMRhqCkkrqfNctqSQPrdjQ4/lJPXGEy7tx8kgtwajG1yJa/Ft53 iLPC7ZhgSk8U/wQekNDp9/vx7NWGwTLoHcDaLQbY7gjwObuY5pGSw4ks6NdgozkpFweEWtTfMYD dI= X-Received: by 2002:a17:906:7955:b0:b87:515e:654a with SMTP id a640c23a62f3a-b8d2e8fb72emr80881766b.2.1769366375441; Sun, 25 Jan 2026 10:39:35 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:35 -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 Subject: [PATCH v2 14/19] drm/amd/display: Restore ALLM support in HDMI vsif Date: Sun, 25 Jan 2026 19:39:09 +0100 Message-ID: <20260125183914.459228-15-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Support for triggering ALLM in modern TVs is missing. When HDMI vsif was added in 2019: commit 3c2381b92cba ("drm/amd/display: add support for VSIP info packet") it was improperly handeled as HDMI actually has two separate vsifs. The implementation was based on H14b-vsif and ALLM bit was messing it up because H14b-vsif doesn't support ALLM. It was later removed in: commit 75f77aafe281 ("drm/amd/display: Send H14b-VSIF specified in HDMI") ALLM is supported by hf-vsif (HDMI Forum) instead. [How] Add proper logic to construct either h14b-vsif or hf-vsif based on required capabilities. Currently, only ALLM from hf-vsif is supported. Turns out, hf-vsif is almost identical to h14b-vsif, BUT has additional two bytes of data after OUI. First byte is static and seems like a version supported by leftover define. Second byte consists of 3D and ALLM bits. Implement logic to offset 3D data if building hf-vsif. Signed-off-by: Tomasz Paku=C5=82a --- .../display/modules/info_packet/info_packet.c | 112 ++++++++++++------ 1 file changed, 73 insertions(+), 39 deletions(-) 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 294f56d20062..1a1ddcdb4362 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 @@ -49,7 +49,10 @@ enum vsc_packet_revision { }; =20 #define HDMI_INFOFRAME_TYPE_VENDOR 0x81 -#define HF_VSIF_VERSION 1 +#define HDMI_INFOFRAME_LENGTH_MASK 0x1F +#define HF_VSIF_VERSION 1 +#define HF_VSIF_3D_BIT 0 +#define HF_VSIF_ALLM_BIT 1 =20 // VTEM Byte Offset #define VTEM_PB0 0 @@ -496,9 +499,28 @@ void mod_build_vsc_infopacket(const struct dc_stream_s= tate *stream, } } =20 +static bool is_hdmi_vic_mode(const struct dc_stream_state *stream) +{ + bool allm =3D stream->link->local_sink->edid_caps.allm; + bool stereo =3D stream->view_format !=3D VIEW_3D_FORMAT_NONE; + + if (stream->timing.hdmi_vic =3D=3D 0) + return false; + + if (stream->timing.h_total < 3840 || + stream->timing.v_total < 2160) + return false; + + if (stereo || allm) + return false; + + return true; +} + /** * mod_build_hf_vsif_infopacket - Prepare HDMI Vendor Specific info frame. * Follows HDMI Spec to build up Vendor Sp= ecific info frame + * Conforms to h14b-vsif or hf-vsif based = on the capabilities * * @stream: contains data we may need to construct VSIF (i.e. timing= _3d_format, etc.) * @info_packet: output structure where to store VSIF @@ -506,63 +528,75 @@ void mod_build_vsc_infopacket(const struct dc_stream_= state *stream, void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, struct dc_info_packet *info_packet) { - unsigned int length =3D 5; bool hdmi_vic_mode =3D false; + bool allm =3D false; + bool stereo =3D false; uint8_t checksum =3D 0; - uint32_t i =3D 0; + uint8_t offset =3D 0; + uint8_t i =3D 0; + uint8_t length =3D 5; + uint32_t oui =3D HDMI_IEEE_OUI; enum dc_timing_3d_format format; =20 info_packet->valid =3D false; + format =3D stream->timing.timing_3d_format; if (stream->view_format =3D=3D VIEW_3D_FORMAT_NONE) format =3D TIMING_3D_FORMAT_NONE; + stereo =3D format !=3D TIMING_3D_FORMAT_NONE; + hdmi_vic_mode =3D is_hdmi_vic_mode(stream); =20 - if (stream->timing.hdmi_vic !=3D 0 - && stream->timing.h_total >=3D 3840 - && stream->timing.v_total >=3D 2160 - && format =3D=3D TIMING_3D_FORMAT_NONE) - hdmi_vic_mode =3D true; - - if ((format =3D=3D TIMING_3D_FORMAT_NONE) && !hdmi_vic_mode) + if (!stereo && !hdmi_vic_mode && !allm) return; =20 - info_packet->sb[1] =3D 0x03; - info_packet->sb[2] =3D 0x0C; - info_packet->sb[3] =3D 0x00; + if (allm) + oui =3D HDMI_FORUM_IEEE_OUI; =20 - if (format !=3D TIMING_3D_FORMAT_NONE) - info_packet->sb[4] =3D (2 << 5); + info_packet->sb[1] =3D oui & 0xff; + info_packet->sb[2] =3D (oui >> 8) & 0xff; + info_packet->sb[3] =3D (oui >> 16) & 0xff; =20 - else if (hdmi_vic_mode) - info_packet->sb[4] =3D (1 << 5); - - switch (format) { - case TIMING_3D_FORMAT_HW_FRAME_PACKING: - case TIMING_3D_FORMAT_SW_FRAME_PACKING: - info_packet->sb[5] =3D (0x0 << 4); - break; - - case TIMING_3D_FORMAT_SIDE_BY_SIDE: - case TIMING_3D_FORMAT_SBS_SW_PACKED: - info_packet->sb[5] =3D (0x8 << 4); - length =3D 6; - break; - - case TIMING_3D_FORMAT_TOP_AND_BOTTOM: - case TIMING_3D_FORMAT_TB_SW_PACKED: - info_packet->sb[5] =3D (0x6 << 4); - break; - - default: - break; + if (oui =3D=3D HDMI_FORUM_IEEE_OUI) { + offset =3D 2; + length +=3D 2; + info_packet->sb[4] =3D HF_VSIF_VERSION; + info_packet->sb[5] =3D stereo << HF_VSIF_3D_BIT; + info_packet->sb[5] =3D allm << HF_VSIF_ALLM_BIT; } =20 - if (hdmi_vic_mode) + if (stereo) { + info_packet->sb[4 + offset] =3D (2 << 5); + + switch (format) { + case TIMING_3D_FORMAT_HW_FRAME_PACKING: + case TIMING_3D_FORMAT_SW_FRAME_PACKING: + info_packet->sb[5 + offset] =3D (0x0 << 4); + break; + + case TIMING_3D_FORMAT_SIDE_BY_SIDE: + case TIMING_3D_FORMAT_SBS_SW_PACKED: + info_packet->sb[5 + offset] =3D (0x8 << 4); + ++length; + break; + + case TIMING_3D_FORMAT_TOP_AND_BOTTOM: + case TIMING_3D_FORMAT_TB_SW_PACKED: + info_packet->sb[5 + offset] =3D (0x6 << 4); + break; + + default: + break; + } + + /* Doesn't need the offset as it can't be used with hf-vsif */ + } else if (hdmi_vic_mode) { + info_packet->sb[4] =3D (1 << 5); info_packet->sb[5] =3D stream->timing.hdmi_vic; + } =20 info_packet->hb0 =3D HDMI_INFOFRAME_TYPE_VENDOR; info_packet->hb1 =3D 0x01; - info_packet->hb2 =3D (uint8_t) (length); + info_packet->hb2 =3D length & HDMI_INFOFRAME_LENGTH_MASK; =20 checksum +=3D info_packet->hb0; checksum +=3D info_packet->hb1; --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 ADDCA2FA0DB for ; Sun, 25 Jan 2026 18:39:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366380; cv=none; b=oaIM8dsgptfhqNKTfa83xDOs1/cZ7aTXRHdRzOABiWoniyO4bbZXd9rjmwY0YIYYsR+9vsngt03Zg1GIgwvRQ/qSjpk3igLjLyPzHN8zT8gl6TwnZPbGBB69DBDH7GnaSDGj+JQIg8ZqVl2VAiljozMDKXct13rcGcvlnnpjCGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366380; c=relaxed/simple; bh=/ORgbMEp2tKkgeStJ2o1swKX6ZH8EHkyncDudc7Py8Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=m0ebH9EBycZC6Jk7/eOhSud70WGWTsmediWjDzrCTTqZGuV8ZINERPCW42sGzpQSd8hqIOfmtMOMeCW9J4qWv261IaRjHF4QiHJpP5gzPbXRbOysXmmHJvN3gKzyFYj8hAVZcSuXi6+8pUbbPtxeXrnm4PCJu5lIwpfAhSJaqEk= 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=lGA4QI54; arc=none smtp.client-ip=209.85.218.49 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="lGA4QI54" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b87266fdf56so62812766b.2 for ; Sun, 25 Jan 2026 10:39:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366377; x=1769971177; 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=NIMAxiDT59usF3Prsk5bN4xvPD4Qaw8f/xUnPv/laJc=; b=lGA4QI54HfeBzeXaK/82PsKJiPkB63aOy8Eu6PVMGcU/YBPH2Phwmjt/RMO5FU8xEO GtvzAdObnhVghouC588RaI2uXwUHsJwTdPFTRwQ/ZZSXLiZmIqtSZ3UXDC+mKwZSWGkx bRLYSOrYYznOemFy0zS3WjXvOUfGLww/5SD9MvDjTEr5VPSImLdyZ8sVtSfkhEFhf1nZ sPOae3mhsZfSTQntiZdPk38N4KsXgDrts/2uCtWctFuzjfCQImfJclg/dpi23voqMhOs skRWWN6jxDVyU2mZUSyqjLNf9jDpyTMTLudFvrFWKSTGDLpDkBhGb4b9d97MvGnhfPXD 9ARg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366377; x=1769971177; 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=NIMAxiDT59usF3Prsk5bN4xvPD4Qaw8f/xUnPv/laJc=; b=j5CDhTLXQMFU3N8MDHPjSR2BQNYzB2QGVGsaxBLDoOjiGmRWrxYYZtJUk94pT4ZUp4 yIF2K0FxzY1az7VIFNzzdpx9zv7xLT9o1rrnyPw/ZuBo+d40Pm9sX60P9r7Lgbm4JVHG ym/4p5DAa6BbILgimPtscsAwdl/vvpAazQZ+Zn55IGUQYuO6+7pZJxuZqIJ5qUznIN8i 1Qo7C4/kfw/xcFN0MqkyTugm5GxaJFNQ8fXH7QRFXO1LmkzhZk74KZyICJ98x37JG/2l 0OyZeF8f8n/KLmFJfIaU+Nuf5ZrA66WCxq3Ge2JH4/MwGd/LjFDtsqgo4ugdy+5jZPWx 5TqQ== X-Forwarded-Encrypted: i=1; AJvYcCXuquDuuDmuguVPBotZK9wB8ByjdSEEFU6iXm7javpOEiTMz0lwZ4IbyQeqPYbw3l9VfRPne7Ve0MAgpaI=@vger.kernel.org X-Gm-Message-State: AOJu0YyA29N4x/JS4XNHHv8ytQhNRNpX/HrtunJWrw6hRuS8mR3LygjQ 3KnwQrd0R1IdRnG9atOG1+XcGyV7qTLTS+nV3jauqXxBbThfkGYrvj59 X-Gm-Gg: AZuq6aLjuo/2t1UhRGFVH/r9D+bCJfRhu7Q/20py7GOAPgDoPsQ8NtNXOVyTRBnMokg O6QhqwvcO64dDBXBAc/aFX+5FueMARuXmXbNtXVCRZTy8QX8HkwaWrmUB43l6/PVseR5n9ayY0K X9vvt0DRKVExzcfipS12PHM/S7YWYn3jiKa/hHG5XCezyVdnmhvde6kXqcV71+osJRpsShSqCIJ zfNvNzEItDOJiaI0mlDghuFik3tqNkvwvqF7Lb2K/0NT0ZafY0V01jthjozU6Evlg1uIPAvFm1F PODLk8+42a9oKE8cMsN+A4WNneChT1FksS1rYrTpMQAocoKZNBCnaVCML+/P+gBS1rRw/MPmBL0 GLJH0FScd9abL4Twoe2BBZjEdg33LFMDMcpsX8RWmF1KKHBYuZwWCtgZ+dVwc5kowKzqQqZMKKN acPAwUeIUZrgry6F6+mvcrJOfZ2hWqL+CW+tIRpJeyMbrksK3eS7YCevyWiJCqq9Oa X-Received: by 2002:a17:906:d54e:b0:b87:2099:9f6b with SMTP id a640c23a62f3a-b8d3fa9b5ccmr99201866b.3.1769366376862; Sun, 25 Jan 2026 10:39:36 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:36 -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 Subject: [PATCH v2 15/19] drm/amd/display: Trigger ALLM if it's available Date: Sun, 25 Jan 2026 19:39:10 +0100 Message-ID: <20260125183914.459228-16-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] ALLM automatically puts TVs into low latency modes (gaming modes) which we basically always want for PC use, be it gaming, or using precise inputs like mice and keyboards. [How] Read the ALLM info from HDMI caps and use it to determine if ALLM should be indicated in HDMI Forum vsif. Additionally, make sure VIC modes are translated in case of ALLM active as VIC cannot be used in conjunction with hf-vsif. I learned this the hard way... Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 4 +++- .../gpu/drm/amd/display/modules/info_packet/info_packet.c | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gp= u/drm/amd/display/dc/core/dc_resource.c index 848c267ef11e..4a7c9f810e35 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -4504,6 +4504,7 @@ static void set_avi_info_frame( unsigned int rid =3D pipe_ctx->stream->timing.rid; unsigned int fr_ind =3D pipe_ctx->stream->timing.fr_index; enum dc_timing_3d_format format; + bool allm; =20 if (stream->avi_infopacket.valid) { *info_packet =3D stream->avi_infopacket; @@ -4658,8 +4659,9 @@ static void set_avi_info_frame( if (pipe_ctx->stream->timing.hdmi_vic !=3D 0) vic =3D 0; format =3D stream->timing.timing_3d_format; + allm =3D stream->link->local_sink->edid_caps.allm; /*todo, add 3DStereo support*/ - if (format !=3D TIMING_3D_FORMAT_NONE) { + if ((format !=3D TIMING_3D_FORMAT_NONE) || allm) { // Based on HDMI specs hdmi vic needs to be converted to cea vic when 3D= is enabled switch (pipe_ctx->stream->timing.hdmi_vic) { case 1: 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 1a1ddcdb4362..0db2db7a197f 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 @@ -540,9 +540,10 @@ void mod_build_hf_vsif_infopacket(const struct dc_stre= am_state *stream, =20 info_packet->valid =3D false; =20 - format =3D stream->timing.timing_3d_format; - if (stream->view_format =3D=3D VIEW_3D_FORMAT_NONE) - format =3D TIMING_3D_FORMAT_NONE; + allm =3D stream->link->local_sink->edid_caps.allm; + format =3D stream->view_format =3D=3D VIEW_3D_FORMAT_NONE ? + TIMING_3D_FORMAT_NONE : + stream->timing.timing_3d_format; stereo =3D format !=3D TIMING_3D_FORMAT_NONE; hdmi_vic_mode =3D is_hdmi_vic_mode(stream); =20 --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 45A132F9D98 for ; Sun, 25 Jan 2026 18:39:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366381; cv=none; b=E1zCaGp4XzedxeikahZ8/zMIJBAhlmu7jWt7VsGVJJ7RFqgP57/i6Kmnys6gLK33VlLFip8BUzb0sqhNTYIgMxltPKS8dQDu3fphPXC4TRS0QSmGRHBE6/UvPsX58yb72zrrGmiwM14vTFOGMRie53nEumOmVHZJP7I9MXJ/w+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366381; c=relaxed/simple; bh=iwaWUeFlDmNDzJzGhaVkoQYgdOxQVFLKLdSfv1D+Mwk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UcQtBrLzEaeMdRMgK/03nsZqCbSdYX0N5DUHc2ic1GGtjDN1RVFR/pXFMUy5Mlx/1Hsb/2tWX7FeXZwwj8ffNXfv9lEmsT+HIv9eOLqQTR/lCx5VKyZidxE3aMIZwjfIkB2sALyEJIj5d1/xSc8Ww6ddPtGFTkB1nGM6jNZ3hhc= 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=HlbKfXTQ; arc=none smtp.client-ip=209.85.218.53 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="HlbKfXTQ" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b8719f5a2b5so50779666b.3 for ; Sun, 25 Jan 2026 10:39:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366379; x=1769971179; 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=ecPuaGgfpB06f+q+wYbBx7hNGw3dVlBz9Vc5r6vMzJA=; b=HlbKfXTQ1ZlRFMWzAkfvUyTtl/Oz7Hh630fayRmfgID1EnlJw775iVBq6h+D8zWM3Z R+Hev/fJud33mjRxA0jj3DL8uJxRD2N0b8tXKa7wLwvicC6Jwci//n+mXdz1cdip7c1z Wb6WGkHKSHDurhSX9wuGdJxB+7GIG7b0cApGmO0yJYaICZLNqQyDt/ueYn1pGNtHt/BN fdDl5enqUtzmFCjPBiwsVQ4JuDIae9QmGS+NQR1ard8lnJXcHbZxXcUs2PUd4lhRPcuW k5IWjtRbsiA1QlvMFo+CndJIauq1/D8t5ijtkatpOym/ovYNGgugLM8biRlJTtrIrsQA AB6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366379; x=1769971179; 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=ecPuaGgfpB06f+q+wYbBx7hNGw3dVlBz9Vc5r6vMzJA=; b=wx6uH8XOPjyAByzbgS3/qXj4Kx6EKtJCprb7NgzJ+eFCWMwoazz+e99lLXl/RPGRuH ofoBpDLIGHzZXmddpPsX6ry4v1/Kp9HSplROP0AcN1WN353hJi/EfkdctTp0oNTpetr5 TI7LAqLiOZJZzro8x5RYSXys01TBSpg8xKmBV3qS7lpFRx3WGgH71YsyYl1gmoq3aJ5C srIYslVjDdC7q50pmzdGUH4Gefc42Gwi41uQMqkf4Zwg3JOH8FhnjsWMYWfyYc2wL26x ogFvnkXStRaQFZqmXxZwSfubLvcIqEN38YibmhKZEF7/OzeHwxdvd8GGbF7DXtTfDEbC tadg== X-Forwarded-Encrypted: i=1; AJvYcCUmSjhV1jCWL4/iOiQGGrOrEYQgLwx8SRNiuv4sBZdMZe4opztmBgTek74hPxUSf+15FDn/N08HjvDIa7c=@vger.kernel.org X-Gm-Message-State: AOJu0YwCbUlikJpdhfZ3VUUcKl20Bubk0/IOetaw672E4qmAHdHAGkAl NjF5kUmr6h06lEvzK4t7xWnVkDLeem/39V5QPgOv21pbXRRP6AxhMwVV X-Gm-Gg: AZuq6aJyWb5J1iXr4VBmtpJmj6pMSkViRn3E9+9mP403Yv0362ejCNGlVhCztvcNr8U kIW9HOAnybcGK/Lee0aogvHKqFsJwDBn9M9IKv4qlbP3KdXMdp8h1Z6GCE6f4cpRIOFVR3fQ8Ls fiWgNx8xyo2vb/touU9PHZLaopP83OPfR2+Fts1WeW9LQwWpCvhO+afnLdayad90RYmW3hsw1nR mHsP0ny7CrnTiQIq16pQt0jbB0vjaCpys/jMg61c855gHz1ts4wAgmPf88dbQCLnjHQ7KU7+Gbv Gexh2SQylYpoU4cwaybvHlrBNBmcOxZHg6DR4WRC091MOWCW+OlDXu2b+ZU4O5kIMxOCitilACr URrQcVHp8XLESdmZlwpPf9uAMelefNs0GBkb34yI+2We7xt5wvUgqKiOQLDg2qdQztXhqWnMyZ/ gkJ/z8Usu8kO4+hLbtYYHG2LVySEyifwlezG+Wd+7uHonzEViLyZbm4UhMhEZdHaw1 X-Received: by 2002:a17:907:c28:b0:b87:106c:88eb with SMTP id a640c23a62f3a-b8d20d64cdcmr80438666b.0.1769366378380; Sun, 25 Jan 2026 10:39:38 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:38 -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 Subject: [PATCH v2 16/19] drm/amd/display: Add parameter to control ALLM behavior Date: Sun, 25 Jan 2026 19:39:11 +0100 Message-ID: <20260125183914.459228-17-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Some users prefer to always manually control ALLM/Gaming mode while others might want it permanently forced on. [How] Since there isn't yet an API to control this, expose module paramter Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 14 ++++++- .../gpu/drm/amd/display/dc/core/dc_resource.c | 7 +--- .../amd/display/modules/inc/mod_info_packet.h | 1 + .../display/modules/info_packet/info_packet.c | 42 +++++++++++++++---- 5 files changed, 52 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdg= pu/amdgpu.h index 9c11535c44c6..c9eab44ad5b3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -268,6 +268,7 @@ extern int amdgpu_rebar; =20 extern int amdgpu_wbrf; extern int amdgpu_user_queue; +extern int amdgpu_allm_mode; =20 extern uint amdgpu_hdmi_hpd_debounce_delay_ms; =20 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_drv.c index 771c89c84608..3bdbb46e4d69 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -248,6 +248,7 @@ int amdgpu_umsch_mm_fwlog; int amdgpu_rebar =3D -1; /* auto */ int amdgpu_user_queue =3D -1; uint amdgpu_hdmi_hpd_debounce_delay_ms; +int amdgpu_allm_mode =3D 1; =20 DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, 0, "DRM_UT_CORE", @@ -1124,7 +1125,7 @@ module_param_named(rebar, amdgpu_rebar, int, 0444); MODULE_PARM_DESC(user_queue, "Enable user queues (-1 =3D auto (default), 0= =3D disable, 1 =3D enable, 2 =3D enable UQs and disable KQs)"); module_param_named(user_queue, amdgpu_user_queue, int, 0444); =20 -/* +/** */ * DOC: hdmi_hpd_debounce_delay_ms (uint) * HDMI HPD disconnect debounce delay in milliseconds. * @@ -1134,6 +1135,17 @@ module_param_named(user_queue, amdgpu_user_queue, in= t, 0444); MODULE_PARM_DESC(hdmi_hpd_debounce_delay_ms, "HDMI HPD disconnect debounce= delay in milliseconds (0 to disable (by default), 1500 is common)"); module_param_named(hdmi_hpd_debounce_delay_ms, amdgpu_hdmi_hpd_debounce_de= lay_ms, uint, 0644); =20 +/** + * DOC: allm_mode (int) + * Changes ALLM triggering mode (if sink supports ALLM). Possible values: + * + * - 0 =3D ALLM disabled + * - 1 =3D ALLM dynamically triggered based on VRR state / Game Content T= ype Hint + * - 2 =3D ALLM forced always on + */ +MODULE_PARM_DESC(allm_mode, "Changes ALLM trigger mode (0 =3D disable, 1 = =3D enable (default), 2 =3D force enable)"); +module_param_named(allm_mode, amdgpu_allm_mode, int, 0644); + /* These devices are not supported by amdgpu. * They are supported by the mach64, r128, radeon drivers */ diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gp= u/drm/amd/display/dc/core/dc_resource.c index 4a7c9f810e35..b779aac28dfa 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -44,6 +44,7 @@ #include "clk_mgr.h" #include "dc_state_priv.h" #include "dc_stream_priv.h" +#include "modules/inc/mod_info_packet.h" =20 #include "virtual/virtual_link_hwss.h" #include "link/hwss/link_hwss_dio.h" @@ -4503,8 +4504,6 @@ static void set_avi_info_frame( unsigned int vic =3D pipe_ctx->stream->timing.vic; unsigned int rid =3D pipe_ctx->stream->timing.rid; unsigned int fr_ind =3D pipe_ctx->stream->timing.fr_index; - enum dc_timing_3d_format format; - bool allm; =20 if (stream->avi_infopacket.valid) { *info_packet =3D stream->avi_infopacket; @@ -4658,10 +4657,8 @@ static void set_avi_info_frame( ///VIC if (pipe_ctx->stream->timing.hdmi_vic !=3D 0) vic =3D 0; - format =3D stream->timing.timing_3d_format; - allm =3D stream->link->local_sink->edid_caps.allm; /*todo, add 3DStereo support*/ - if ((format !=3D TIMING_3D_FORMAT_NONE) || allm) { + if (!is_hdmi_vic_mode(pipe_ctx->stream)) { // Based on HDMI specs hdmi vic needs to be converted to cea vic when 3D= is enabled switch (pipe_ctx->stream->timing.hdmi_vic) { case 1: 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 306eb7355c25..9ec123ecc7c4 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 @@ -41,6 +41,7 @@ void set_vsc_packet_colorimetry_data( enum dc_color_space cs, enum color_transfer_func tf); =20 +bool is_hdmi_vic_mode(const struct dc_stream_state *stream); void mod_build_vsc_infopacket(const struct dc_stream_state *stream, struct dc_info_packet *info_packet, enum dc_color_space cs, 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 0db2db7a197f..7516ab9a7554 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 @@ -23,12 +23,13 @@ * */ =20 -#include "mod_info_packet.h" +#include "amdgpu.h" #include "core_types.h" -#include "dc_types.h" -#include "mod_shared.h" -#include "mod_freesync.h" #include "dc.h" +#include "dc_types.h" +#include "mod_freesync.h" +#include "mod_info_packet.h" +#include "mod_shared.h" =20 enum vsc_packet_revision { vsc_packet_undefined =3D 0, @@ -54,6 +55,12 @@ enum vsc_packet_revision { #define HF_VSIF_3D_BIT 0 #define HF_VSIF_ALLM_BIT 1 =20 +enum allm_trigger_mode { + ALLM_MODE_DISABLED =3D 0, + ALLM_MODE_ENABLED_DYNAMIC =3D 1, + ALLM_MODE_ENABLED_FORCED =3D 2, +}; + // VTEM Byte Offset #define VTEM_PB0 0 #define VTEM_PB1 1 @@ -499,9 +506,30 @@ void mod_build_vsc_infopacket(const struct dc_stream_s= tate *stream, } } =20 -static bool is_hdmi_vic_mode(const struct dc_stream_state *stream) +static bool is_hdmi_allm_mode(const struct dc_stream_state *stream) { - bool allm =3D stream->link->local_sink->edid_caps.allm; + /* Sink doesn't expose ALLM support in edid */ + if (!stream->link->local_sink->edid_caps.allm) + return false; + + switch (amdgpu_allm_mode) { + case ALLM_MODE_DISABLED: + return false; + + case ALLM_MODE_ENABLED_DYNAMIC: + break; + + case ALLM_MODE_ENABLED_FORCED: + return true; + } + + return stream->content_type =3D=3D DISPLAY_CONTENT_TYPE_GAME || + stream->vrr_active_variable; +} + +bool is_hdmi_vic_mode(const struct dc_stream_state *stream) +{ + bool allm =3D is_hdmi_allm_mode(stream); bool stereo =3D stream->view_format !=3D VIEW_3D_FORMAT_NONE; =20 if (stream->timing.hdmi_vic =3D=3D 0) @@ -540,7 +568,7 @@ void mod_build_hf_vsif_infopacket(const struct dc_strea= m_state *stream, =20 info_packet->valid =3D false; =20 - allm =3D stream->link->local_sink->edid_caps.allm; + allm =3D is_hdmi_allm_mode(stream); format =3D stream->view_format =3D=3D VIEW_3D_FORMAT_NONE ? TIMING_3D_FORMAT_NONE : stream->timing.timing_3d_format; --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (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 7E4A32FC006 for ; Sun, 25 Jan 2026 18:39:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366383; cv=none; b=tLdgZ72d3RXRSYpeuOnW2UwNYND8L3Hl+g8b2Hr5xQMVBqT3tlp1yzs7YLafxACVxOKAiIIvz7W4gZ7BmOqrDkbkAz6dcysfVDWOoBlK7/Nsc1FA17b9VrooJrr63AE8YIVW+7e8gVGIoHs+AOC5y8Qk3btawGERshgx8dBfpsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366383; c=relaxed/simple; bh=iJYrK1gPiuEfbBnN0R6kWMZR/ERGPHwUkKiOsED+f14=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OpWRCdzPHJY7q3vUr0kqvHfmhqpw+IlpsmOsnxlw0HfKuR904NYExQz4uXdaRjQ1ko8JNV4oGoll9MPUcbo2VYcT50ikBFunRVZ16rqU5LsJwXNRPLJ3p/3S+YvvbVKi0t+9BdsAOIDcQ6+xRqybnqHjb3vHVQWo1BsLsdx4bI0= 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=S4E1yRgz; arc=none smtp.client-ip=209.85.218.42 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="S4E1yRgz" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-b876b5c69baso66976866b.0 for ; Sun, 25 Jan 2026 10:39:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366380; x=1769971180; 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=UcnraORJPqzLaNna/Rh/WEL5R0qkbZJXIJKvYu5IS4o=; b=S4E1yRgzxcF1RhNLbI90Qkkmo1a/xS1wEO4LJCmm+Dt9ftukAzjrSwQv010jNVYdD1 zt61t9UjJFtTUWgMk0aUbpntDUt+121j2W1HSVpJEdT4tCEEob0plBXgQmyj2O8CUVLY 7/l/A2Ip3tZc3SGeiiT1rOOTgUKZ9sy7Nd7C1N1aDkMIAF3h0G8z16+Td/mxC7m/OE1z ya2MBibCrgWCWwwy0aElIC/rof59gmTDoqta5dHPHFkKdyw9dPnbtIeJd4bxpTK56Fbf 523WYkZXGdr95Y8ykWWSZ/ij7s7zl8jRIbFOjjPc9dctv7IDE5xgRDzvLD5kuqD5ap0/ bsRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366380; x=1769971180; 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=UcnraORJPqzLaNna/Rh/WEL5R0qkbZJXIJKvYu5IS4o=; b=untbkkMSt/HLD0Oc9q4jfEcCxtXkEqQxVMaVEY9N3yHcr8t6xj6+qyUblTBTBSIAT/ O9ymKXl6RGpnB+cU4u+YKqZqeZDL3iurbrsVUXk08L1ixmOtiYDKGDkXR8TtZkeOsl4Z xk64OJIIaDsMKRSqL1opOaHj0JmygRpUSBKwLGJDh+JEF1NQfQJkG7B9kISJKbSJaIly aZbmJfl5sKGelaCjvgSJ+4TIqmhDbMTuH4oExw8vf+ehVqIjLAkGrJaarSTfhvhytJPQ 57yvXF7A3is/e0A8lbLgIpAcDpjllMcnhq/xa1ftEEf3Ud+KKL6AycK3HCyy6zHxafBw RVoA== X-Forwarded-Encrypted: i=1; AJvYcCUhxjEfh2gscfaznv6JCFL4BwhlLilEzQdGT2BYs3jyp6MZJ/4EBR6FPuCuYrlhhQ57gtTZqdJb64J8z2w=@vger.kernel.org X-Gm-Message-State: AOJu0Yx55nT9YkXJnw8JfaYjRxeTtV4r5hpnkywu8tK+4kHbTUjuNn6Q Lh1JuTVXmRutF+++ySYoT3C8ZrQY2UOecncAeb2tZBSUieJhnuYnmGHA X-Gm-Gg: AZuq6aL+18TIt76iJxpdlIfnim8YGgB075FDmxeMOwEEwHtd5klgP0fblK9JgC0EIQ7 JNFChEpCeTQCLhyOySMW14Z27xfe1ug1pt79RhRxP+FNjsTnXj2/Z04FO/4xWKha1Wa8PLVbraR 9vADT23o+G3+//y9/jexc1Bfs9hMmn8lSf19Us9YTrKrvvIm+Ob6eju+5/WGpId1oOdI7wne2gm sd8TA5Dj7xDZWsB5ljQVAY78V1WtkAsaZI351CaXsOVhwWnS3xQTUhreo1aUSfpJ8nCU3MjOfm0 PmDisOGPH4OklztFNM7+yxriM4uNErlBXEs3vX6Y0ZONwKdD8SjsT7B3Ls1wKBPk0o36Yz1mU7o jaEJi/l3sd2fxMxP8rka8AeBL0ZV5hnL1k9LrMRrUDCh1twnlzN11ultZ2VO0l/sXLkF8KQhadm 9ZsEAU+y8rz/ln0zwFzibf0p10OyF7z4iNeZfl3AoitiBwVb5GcQs0t907etANxoPn X-Received: by 2002:a17:907:3e1d:b0:b7d:3c0d:96ef with SMTP id a640c23a62f3a-b8d4f8369b9mr93097066b.7.1769366379622; Sun, 25 Jan 2026 10:39:39 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:39 -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 Subject: [PATCH v2 17/19] drm/amd/display: Reintroduce VTEM info frame Date: Sun, 25 Jan 2026 19:39:12 +0100 Message-ID: <20260125183914.459228-18-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] VTEM info fram building was removed back in: commit a9f54ce3c603 ("drm/amd/display: Refactoring VTEM"), but it's needed to support HDMI VRR signalling. [How] Build completely new and more robust functions to build out the VTEM infopacket. Many values are defined but could have added logic in the future, that's shy they are not static values but already value + bit position in it's byte. Reduced blanking detection was previously missing. Use possible hblank periods defined for RB1 (from CVT 1.2), RB2 and RB3 (from CVT 2.1). Signed-off-by: Tomasz Paku=C5=82a --- .../amd/display/modules/inc/mod_info_packet.h | 4 + .../display/modules/info_packet/info_packet.c | 178 ++++++++++++------ 2 files changed, 121 insertions(+), 61 deletions(-) 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 9ec123ecc7c4..07e86b16ef77 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 @@ -50,6 +50,10 @@ void mod_build_vsc_infopacket(const struct dc_stream_sta= te *stream, void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, struct dc_info_packet *info_packet); =20 +void mod_build_vtem_infopacket(const struct dc_stream_state *stream, + const struct mod_vrr_params *vrr, + struct dc_info_packet *infopacket); + enum adaptive_sync_type { ADAPTIVE_SYNC_TYPE_NONE =3D 0, ADAPTIVE_SYNC_TYPE_DP =3D 1, 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 7516ab9a7554..5e245a053267 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 @@ -49,6 +49,7 @@ enum vsc_packet_revision { vsc_packet_rev7 =3D 7, }; =20 +#define HDMI_INFOFRAME_TYPE_EMP 0x7F #define HDMI_INFOFRAME_TYPE_VENDOR 0x81 #define HDMI_INFOFRAME_LENGTH_MASK 0x1F #define HF_VSIF_VERSION 1 @@ -61,74 +62,52 @@ enum allm_trigger_mode { ALLM_MODE_ENABLED_FORCED =3D 2, }; =20 -// VTEM Byte Offset -#define VTEM_PB0 0 -#define VTEM_PB1 1 -#define VTEM_PB2 2 -#define VTEM_PB3 3 -#define VTEM_PB4 4 -#define VTEM_PB5 5 -#define VTEM_PB6 6 +#define VTEM_ORG_ID 1 +#define VTEM_DATA_SET_TAG 1 +#define VTEM_DATA_SET_LENGTH 4 =20 -#define VTEM_MD0 7 -#define VTEM_MD1 8 -#define VTEM_MD2 9 -#define VTEM_MD3 10 +#define VTEM_M_CONST 0 +#define VTEM_FVA_FACTOR 0 =20 +#define VTEM_BRR_MASK_UPPER 0x03 +#define VTEM_BRR_MASK_LOWER 0xFF =20 -// VTEM Byte Masks -//PB0 -#define MASK_VTEM_PB0__RESERVED0 0x01 -#define MASK_VTEM_PB0__SYNC 0x02 -#define MASK_VTEM_PB0__VFR 0x04 -#define MASK_VTEM_PB0__AFR 0x08 -#define MASK_VTEM_PB0__DS_TYPE 0x30 - //0: Periodic pseudo-static EM Data Set - //1: Periodic dynamic EM Data Set - //2: Unique EM Data Set - //3: Reserved -#define MASK_VTEM_PB0__END 0x40 -#define MASK_VTEM_PB0__NEW 0x80 +/* VTEM Byte Offset */ +#define VTEM_PB0 0 +#define VTEM_PB1 1 +#define VTEM_PB2 2 +#define VTEM_PB3 3 +#define VTEM_PB4 4 +#define VTEM_PB5 5 +#define VTEM_PB6 6 =20 -//PB1 -#define MASK_VTEM_PB1__RESERVED1 0xFF +#define VTEM_MD0 7 +#define VTEM_MD1 8 +#define VTEM_MD2 9 +#define VTEM_MD3 10 =20 -//PB2 -#define MASK_VTEM_PB2__ORGANIZATION_ID 0xFF - //0: This is a Vendor Specific EM Data Set - //1: This EM Data Set is defined by This Specification (HDMI 2.1 r102.cle= an) - //2: This EM Data Set is defined by CTA-861-G - //3: This EM Data Set is defined by VESA -//PB3 -#define MASK_VTEM_PB3__DATA_SET_TAG_MSB 0xFF -//PB4 -#define MASK_VTEM_PB4__DATA_SET_TAG_LSB 0xFF -//PB5 -#define MASK_VTEM_PB5__DATA_SET_LENGTH_MSB 0xFF -//PB6 -#define MASK_VTEM_PB6__DATA_SET_LENGTH_LSB 0xFF +/* Extended Metadata Packet */ +/* Header */ +#define EMP_LAST_BIT 6 +#define EMP_FIRST_BIT 7 +/* PB0 */ +#define EMP_SNC_BIT 1 +#define EMP_VFR_BIT 2 +#define EMP_AFR_BIT 3 +#define EMP_DST_BIT 4 +#define EMP_END_BIT 6 +#define EMP_NEW_BIT 7 +/* PB7 =3D MD0 */ +#define VTEM_VRR_BIT 0 +#define VTEM_M_CONST_BIT 1 +#define VTEM_FVA_BIT 4 +/* MD1 Base_Vfront */ +/* MD2 */ +#define VTEM_BRR_UPPER_BIT 0 +#define VTEM_RB_BIT 2 +/* MD3 BRR Lower */ =20 =20 - -//PB7-27 (20 bytes): -//PB7 =3D MD0 -#define MASK_VTEM_MD0__VRR_EN 0x01 -#define MASK_VTEM_MD0__M_CONST 0x02 -#define MASK_VTEM_MD0__QMS_EN 0x04 -#define MASK_VTEM_MD0__RESERVED2 0x08 -#define MASK_VTEM_MD0__FVA_FACTOR_M1 0xF0 - -//MD1 -#define MASK_VTEM_MD1__BASE_VFRONT 0xFF - -//MD2 -#define MASK_VTEM_MD2__BASE_REFRESH_RATE_98 0x03 -#define MASK_VTEM_MD2__RB 0x04 -#define MASK_VTEM_MD2__NEXT_TFR 0xF8 - -//MD3 -#define MASK_VTEM_MD3__BASE_REFRESH_RATE_07 0xFF - enum ColorimetryRGBDP { ColorimetryRGB_DP_sRGB =3D 0, ColorimetryRGB_DP_AdobeRGB =3D 3, @@ -639,6 +618,83 @@ void mod_build_hf_vsif_infopacket(const struct dc_stre= am_state *stream, info_packet->valid =3D true; } =20 +static void build_vtem_infopacket_header(struct dc_info_packet *infopacket) +{ + uint8_t pb0 =3D 0; + + /* might need logic in the future */ + pb0 |=3D 0 << EMP_SNC_BIT; + pb0 |=3D 1 << EMP_VFR_BIT; + pb0 |=3D 0 << EMP_AFR_BIT; + pb0 |=3D 0 << EMP_DST_BIT; + pb0 |=3D 0 << EMP_END_BIT; + pb0 |=3D 1 << EMP_NEW_BIT; + + infopacket->hb0 =3D HDMI_INFOFRAME_TYPE_EMP; + infopacket->hb1 =3D (1 << EMP_FIRST_BIT) | (1 << EMP_LAST_BIT); + infopacket->hb2 =3D 0; // sequence + + infopacket->sb[VTEM_PB0] =3D pb0; + infopacket->sb[VTEM_PB2] =3D VTEM_ORG_ID; + infopacket->sb[VTEM_PB4] =3D VTEM_DATA_SET_TAG; + infopacket->sb[VTEM_PB6] =3D VTEM_DATA_SET_LENGTH; +} + +static void build_vtem_infopacket_data(const struct dc_stream_state *strea= m, + const struct mod_vrr_params *vrr, + struct dc_info_packet *infopacket) +{ + unsigned int hblank =3D 0; + unsigned int brr =3D 0; + bool hdmi_vic_mode =3D false; + bool vrr_active =3D false; + bool rb =3D false; + + hdmi_vic_mode =3D is_hdmi_vic_mode(stream); + vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || + vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + + infopacket->sb[VTEM_MD0] =3D VTEM_M_CONST << VTEM_M_CONST_BIT; + infopacket->sb[VTEM_MD0] |=3D VTEM_FVA_FACTOR << VTEM_FVA_BIT; + infopacket->sb[VTEM_MD0] |=3D vrr_active << VTEM_VRR_BIT; + + infopacket->sb[VTEM_MD1] =3D 0; + infopacket->sb[VTEM_MD2] =3D 0; + infopacket->sb[VTEM_MD3] =3D 0; + + if (hdmi_vic_mode || !vrr_active) + return; + /* + * In accordance with CVT 1.2 and CVT 2.1: + * Reduced Blanking standard defines a fixed value of + * 160 for hblank, further reduced to 80 in RB2. RB3 uses + * fixed hblank of 80 pixels + up to 120 additional pixels + * in 8-pixel steps. + */ + hblank =3D stream->timing.h_total - stream->timing.h_addressable; + rb =3D (hblank >=3D 80 && hblank <=3D 200 && hblank % 8 =3D=3D 0); + brr =3D mod_freesync_calc_nominal_field_rate(stream) / 1000000; + + if (brr > VTEM_BRR_MAX) { + infopacket->valid =3D false; + return; + } + + infopacket->sb[VTEM_MD1] =3D (uint8_t) stream->timing.v_front_porch; + infopacket->sb[VTEM_MD2] =3D rb << VTEM_RB_BIT; + infopacket->sb[VTEM_MD2] |=3D (brr & VTEM_BRR_MASK_UPPER) >> 8; + infopacket->sb[VTEM_MD3] =3D brr & VTEM_BRR_MASK_LOWER; +} + +void mod_build_vtem_infopacket(const struct dc_stream_state *stream, + const struct mod_vrr_params *vrr, + struct dc_info_packet *infopacket) +{ + infopacket->valid =3D true; + build_vtem_infopacket_header(infopacket); + build_vtem_infopacket_data(stream, vrr, infopacket); +} + void mod_build_adaptive_sync_infopacket(const struct dc_stream_state *stre= am, enum adaptive_sync_type asType, const struct AS_Df_params *param, --=20 2.52.0 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ej1-f67.google.com (mail-ej1-f67.google.com [209.85.218.67]) (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 9DD612FC893 for ; Sun, 25 Jan 2026 18:39:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366384; cv=none; b=MurBWSg4/VZ6lB90TVxJ5Lu/nvHrh1Llh+9jtP6aZokCqn7ch4m5DYBvT+oqn49jnfSLDIJ3hI0opVLV//AA8m5T2pR0wAb93mvEsa7Pa4ZPivc0iR96YioG8UclJwzCN8wEcpBa1dOSTswZAPtjvpQUfbqFGXeGodQkwJIQldc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366384; c=relaxed/simple; bh=sa2ve9y1lPofbgUrII1RE9wkXH+4C+97+jeK6NwKK+w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AKRQMAYI6JY9yssHIVSxMBGXmvuOCtRInv93pGl85EyD7Ketx8MmthgV5TDeWvgeWtedYQD8zieQD285IFHrpA5ZMilbIpWlX4eFSB+lLqvs4UW86eo/ODeS3l5B7e10G9iqPKQ5gZs2ndPEmOsM7yJDJvxuqfEptE7ptZRKoOU= 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=gGkL8DeE; arc=none smtp.client-ip=209.85.218.67 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="gGkL8DeE" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8859d3e1c3so43986666b.0 for ; Sun, 25 Jan 2026 10:39:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366381; x=1769971181; 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=hdLeMslJpmP5aqg3skjNgOL1QWmOegbJOT5yvSqo4kw=; b=gGkL8DeEV/4qfyXSY+xnmEoSAEMtcqlkVLrEO6SMdAdn5u2nqC6e588QoMlSL9ikf3 /2h9Oe4BZbdZ8y8lsZX7eIAdVqkZyLTsGhEjGzfL9l3obzt5YF4VXuw35NCiqT6I44fI M7IUlG7qa+xYLteMLbUkPZLoYgvyG9ERIIA0RjrlP5dzc1lAVPv91CrnKiWcmDEHVFl9 r+rB+Q5tARp0sgIixG0/9HQLSs860LI7GpNGPS5uibiz+QP3rCPkO5lzcCr3W2cA+tVQ l4eGLhqn51mGyxdYnbykqFO1r4RN1B7Q6s7cKyyowjnVBq73mLVMA4O1ofmC8zazRU5n nWqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366381; x=1769971181; 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=hdLeMslJpmP5aqg3skjNgOL1QWmOegbJOT5yvSqo4kw=; b=kpZKIuOlDh2L7ptvcGX3XSFLl4/IAXcaZ6qOfgpOylM54ag8P1PnUAMSU0PnxwESp9 kNWtSy4+5X+CrtiCIMzMZ3tyIyTOmhyWGxG7mwP3gCrXgwa4ooHwEMRwDhgXORyli/W3 t8ohjbBtYniclxzzkX1YiVuNTOPUoVBSlSLqE3wQwTJo/5f3d7r1RnK5vjNlTMYoT156 lyof0j4klmLpGPJAtM51z1N6UCicZsi4J55HY9EbPxEuhpuPfhsrRXwnxYLpN0hotzV9 ldR2d/71Trsk9lnBalJR0FsRkIpt0FNgLMwYlfQd2LnLI0X4/7oJ21aAVGNk6BVXrnVj YSLQ== X-Forwarded-Encrypted: i=1; AJvYcCXxlWBLqbexPxSmgZSCH9vEo5cdRrZpQnDuQAmANJjw8EXO2WKrYDD4ZDMFDb0OGzeTlvy8NlfEhpz+7A0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywe4o4HQB589meyBemxMzG/HCU/cWX9HBY1CUqMb6TfcZ3YYr7a b4P/JoyJ6Y1ATLfeFaLPSkpB895sPjk7KwFmAnsid7CentwItwUYjDVp X-Gm-Gg: AZuq6aKsCW4oOoYd22/z2oyxJGcb5jXDX9y/nQ/3laUsdpEmK750P3QCFfh/GuATws7 OwZnBpTb6fR0yprvDI9tlfJZSC0fTm5AWJ+bFLPYJp90VDfRZJppMNz4ClYVMm24UL3vjwe+h8L UpnmNb0kUS3yXd48vGI2NcIjb75hEQO+y+qy/LcWNeqos17X7kVZTuZo+Oa4kIWVgV3jwa9NoGO vv32XYgy0PFymbhtq7lkn+YfDRsabB7exrPBmk89nWQvflc6FJQzfLUJ4nqM6XgrvKgrpYMpvh7 umL4xSbaRxBh9iohGC5hJy7wLPLibNj/bf4Xbpcz76OQsxejxiaAx/+2vyo1+nWXFB1DOUIwybM AiHkEJzbo48rR0rIsFiIK+U3/5pFeGkWPfAmfrYkPIMIYE8WcigAYG9GASvIhLH/Wfs9rkn9hqw k7OowEZwUtTu4uGMVcQHQaAPN5ZXVwwssrGBxus1+Hmxc0/+3O51wnOgUxQod9I0bw X-Received: by 2002:a17:907:6ea2:b0:b73:99f7:8130 with SMTP id a640c23a62f3a-b8d3fbe920fmr79276666b.6.1769366380901; Sun, 25 Jan 2026 10:39:40 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:40 -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 Subject: [PATCH v2 18/19] drm/amd/display: Enable HDMI VRR Date: Sun, 25 Jan 2026 19:39:13 +0100 Message-ID: <20260125183914.459228-19-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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 | 13 +++++++++++-- .../gpu/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, 17 insertions(+), 2 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 f95e8a739303..7ebac7b610e7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9614,6 +9614,9 @@ static void update_freesync_state_on_stream( &new_stream->adaptive_sync_infopacket); } =20 + if (aconn && aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_HDMI) + packet_type =3D PACKET_TYPE_VTEM; + mod_freesync_build_vrr_infopacket( dm->freesync_module, new_stream, @@ -13364,8 +13367,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_frees= ync) { - monitor_range_from_vsdb(connector, &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, valid_vsdb_cea ? &vsdb_info : NULL); + } else if (vsdb_freesync) + monitor_range_from_vsdb(connector, &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 5e245a053267..38056b2d37b2 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 @@ -719,6 +719,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 From nobody Sun Feb 8 20:34:42 2026 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (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 022162FD66B for ; Sun, 25 Jan 2026 18:39:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366385; cv=none; b=WGwmJBbRK/RttJZEsz63zfpEe+KTcBw+EPHMu1z0d3C7FkgMlAzZAYF+tng/I2y+BZHPaMPxoxSk2SRB85nPtfvOH+Pe1aO3WjjfI/8u3Qb1kxO2rVZAzsh4/rxE8uCwOt8CeWniiFnmSKKl3pJ7iyguNa36/ZVQrbAjmPzQaEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366385; c=relaxed/simple; bh=Y8zLqnNcTvmX637b94D1n6R8UZzz/boGOxILJU9ldhM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uBadtpVZr8X67ydOGoiq+x75bvRQKuB3VXXkye64sbAEENeDKHfHcJfIdtcwz38nQvsbDqfZdcssP52DGlZpbspehF4UUzmcI6yDLa9Zcg3Nn/sGgguXdMHm9KZ+0ZptT4QWcTOosQAMl1OqoD7erBMaVh7I04VuT9Yi3oZnm7k= 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=nKaVUvFL; arc=none smtp.client-ip=209.85.208.41 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="nKaVUvFL" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-64b686e7d04so672525a12.3 for ; Sun, 25 Jan 2026 10:39:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366382; x=1769971182; 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=pzpJ4RJ7cNME7CVFy7TynUsF3JEY3Q9X0Du26C0ArzQ=; b=nKaVUvFLx0jtt90oFSMoiHVVcbnWG6wQhKXFCH+XAQf/WrU1LPZ3Mf1BzrjkmydTRs 9DaLDf+QC0eC8grGPZ3wGXXutDEAm/R0HHCUy7VhdFgiXDIjfzlTWq248oAQ1D9PJtMh qZ2bW3Wo3H8N7Qnx99jcwEj747rghruh+tUkDC+u2vHEG8uyqFbRRnV7aB/WxPFjIDdV PjJSrZfg8F9O1ancF1NvAhSDK5U2sJOtszq2FBmCU0PRrMESP93YGRq+jejCcO9I6AB4 2TetYJQT2PskM6oNsuZDG3cbeokeMDaFf5PFbGx+xAY5MKk5F/3YgnvlTljKu8CcPHAD Oc6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366382; x=1769971182; 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=pzpJ4RJ7cNME7CVFy7TynUsF3JEY3Q9X0Du26C0ArzQ=; b=Vi+oZpAut7/ZyVbPewLZZpKv6FLTAe4kPWBOAN7fskW4VD28tWsaJ4aJDHbnDWRWB6 5YcAqp0w6xotH0R3CLhzB0C6FxZo7Ns4hSpvwMsqX0vRXpqms01HIYFj3MQe5OiuqoWJ xBzhYZC4y3bbnSufABfUw5VPfAr/MJnoUitbZDGBX7MDc60uN/7i0KlyBKpq2qJXzTB9 kRXtGJE1LWg54sugqWkYJMJs0pHwt8awF7SVQSo1rY4IsoykkHOawuz5khNBiKrekik+ wbgG2JyNfE9dX8+bqVpzssDKBBenqXRVNkq0DVJR71xXRbdoYH5xBToaggDgHZKbQ8mW jTdw== X-Forwarded-Encrypted: i=1; AJvYcCWkt9/e12RyC9wraXOB9vMKK2iLhzCH92YqIHpaJ/jAXl4nUbWcWlv4zPEskUHcTXGj3262Wrzw1xKd9r8=@vger.kernel.org X-Gm-Message-State: AOJu0YxO6/kCZF5E9aICNxE10p9Avq+9ARYei2LscUviRu/hRFEpQKzG GM8mJC2VhKz+PMOQzeOqkt+K18H8Yxng7w2D67oaGiGuyW5Ng2Zy4RPp X-Gm-Gg: AZuq6aIiiwjuDypTQkoFKFrWLo8p72lyg0UPRkcWNbigTAAPF/Sg375Ojef7iKB0qqp F9YBHOoBcAEVsVwIuyjvpiTWubMxPd9eS7zwLtuqjAXjic8eBEKbkLQLxKsQkGqTZdf9Cg8MSA/ Nsz4CyX5WpEnm32fTNtOsEK7v31vnzfkApLENGVx3WQ6p3X6+KLWfQKgnZ9omaTMp7IvMNKQUwA z2qRWB/ruOV12CDeZvd0RGDZxvu6KQv20oFKWJAQJ9oqHuGsK68FXknKvjtOA+dAxcRREpN5Dgk rnIanl4aSF7nwIxOK7jR5DsBukQ7AnNCkkkwPkQQasq6BvfhKdUpFVCFNVrmCvfQINuLfFngMSN +tzcL07hgtbEk3X6BkVZMBpPT5+8XyG/qDMc/PzPm7yDjNb4oz7R1OWICltcUHLae4PGv3paRKF yKnH2v3ngDfk/l8lD4VR83AcCJXYTRqThMvLo4BeZPpmpwl5Bdm4y3aAp36g9yrTzd X-Received: by 2002:a17:906:c104:b0:b87:3087:54f0 with SMTP id a640c23a62f3a-b8d3fa9d567mr110207266b.3.1769366382183; Sun, 25 Jan 2026 10:39:42 -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-b885b3dad3asm499133766b.12.2026.01.25.10.39.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:41 -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 Subject: [PATCH v2 19/19] drm/amd/display: Add HDMI VRR desktop mode Date: Sun, 25 Jan 2026 19:39:14 +0100 Message-ID: <20260125183914.459228-20-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-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] Many TVs and other HDMI sinks suffer from blanking and possibly other glitches when VRR is toggled. With FreeSync present on such sinks, they behave like the signal is always variable, even in fixed refresh rate situations. [How] Keep HDMI VRR toggled if it's supported and not explicitly disabled. Additionnally, add module parameter which allows users to configure HDMI VRR triggering to only happen when the signal is truly asking for variable state. This is useful if end user has a TV that automatically toggles ALLM/Game mode when VRR is active and such user doesn't want gaming mode in normal desktop usage. Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 13 +++++++++++++ .../amd/display/modules/info_packet/info_packet.c | 10 ++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdg= pu/amdgpu.h index c9eab44ad5b3..dddd8ed361a0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -269,6 +269,7 @@ extern int amdgpu_rebar; extern int amdgpu_wbrf; extern int amdgpu_user_queue; extern int amdgpu_allm_mode; +extern bool amdgpu_hdmi_vrr_desktop_mode; =20 extern uint amdgpu_hdmi_hpd_debounce_delay_ms; =20 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_drv.c index 3bdbb46e4d69..f4551450bf31 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -249,6 +249,7 @@ int amdgpu_rebar =3D -1; /* auto */ int amdgpu_user_queue =3D -1; uint amdgpu_hdmi_hpd_debounce_delay_ms; int amdgpu_allm_mode =3D 1; +bool amdgpu_hdmi_vrr_desktop_mode =3D true; =20 DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, 0, "DRM_UT_CORE", @@ -1146,6 +1147,18 @@ module_param_named(hdmi_hpd_debounce_delay_ms, amdgp= u_hdmi_hpd_debounce_delay_ms MODULE_PARM_DESC(allm_mode, "Changes ALLM trigger mode (0 =3D disable, 1 = =3D enable (default), 2 =3D force enable)"); module_param_named(allm_mode, amdgpu_allm_mode, int, 0644); =20 +/** + * DOC: hdmi_vrr_on_dekstop (bool) + * Enables FreeSync behavior mimicking by keeping HDMI VRR signalling acti= ve in + * fixed refresh rate conditions like normal desktop work/web browsing. + * Possible values: + * + * - false =3D HDMI VRR is only enabled if refresh rate is truly variable + * - true =3D Mimics FreeSync behavior and keeps HDMI VRR always active + */ +MODULE_PARM_DESC(hdmi_vrr_desktop_mode, "Changes HDMI VRR desktop mode (fa= lse =3D disable, true =3D enable (default))"); +module_param_named(hdmi_vrr_desktop_mode, amdgpu_hdmi_vrr_desktop_mode, bo= ol, 0644); + /* These devices are not supported by amdgpu. * They are supported by the mach64, r128, radeon drivers */ 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 38056b2d37b2..c61bbf912a8b 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 @@ -651,8 +651,14 @@ static void build_vtem_infopacket_data(const struct dc= _stream_state *stream, bool rb =3D false; =20 hdmi_vic_mode =3D is_hdmi_vic_mode(stream); - vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || - vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + + if (amdgpu_hdmi_vrr_desktop_mode) { + vrr_active =3D vrr->state !=3D VRR_STATE_UNSUPPORTED && + vrr->state !=3D VRR_STATE_DISABLED; + } else { + vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || + vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + } =20 infopacket->sb[VTEM_MD0] =3D VTEM_M_CONST << VTEM_M_CONST_BIT; infopacket->sb[VTEM_MD0] |=3D VTEM_FVA_FACTOR << VTEM_FVA_BIT; --=20 2.52.0