From nobody Sun Feb 8 15:01:56 2026 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 621A01A3029 for ; Mon, 19 Jan 2026 01:11:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785112; cv=none; b=Z50go2zKxbAKZbSXJfXUiphQxvd68Gpik5qwpEgfcqj1oc6I4wkllOvuF8wfHMM7UO8E3vYittEPcbObQGLPYVSzI71lM5jMOhTsQ83cNwQxEn3ZWv8CVudvnhY0uEh9Jkh7xwq+BKYeLwEquggIAKUDwp/5yXjzOYMQBNfpZCY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785112; c=relaxed/simple; bh=/D3AyvqcDkQXJV9myDIbk7dbihQ742JIAFBo4VTM7Vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NAVUpQ7HUGIkklrzjO2lNShvOhOdzc/hs9CQnqWW8nkxXy7Da+9Pd+ie2jbmCQK8lgmGug4mntV30I5R9Btn90VpL88NPjJYQVXo5eFVfyKQryWZmx00icMxsMS6OkxwNb/yoUn27ui4buQ4dc5goGngiBEn8nsE0Buq6lh+y54= 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=f4CYqCpZ; arc=none smtp.client-ip=209.85.218.47 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="f4CYqCpZ" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b87677a8a96so75084766b.2 for ; Sun, 18 Jan 2026 17:11:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785110; x=1769389910; 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=5i79BDrxuHBezOHdjkerpF2EfskLPnOmytUYpUqDeYc=; b=f4CYqCpZHD7bHE3TvGW3OsciW32MYOjqLL3W8wxyN9zL46FjDlcf0y7Rn5LlsgVoZE 6QArxeqcUtriJntPKyRa8o1choR4rn4OiI334yQZGa6H58VE+kxm/vj4vnBpSTTxc8eF ycQ8/dw5FjkFfyPxFKe2E6NGZF6vGfq93m7DEZltZPtPrEcgU/YSFwywb3okwruX7z7j C3JggCdaoUk77ZA8UPu3syM+Ii+iDRPxZcIwtxoUNy2QiWE08P9VS4mokWZnvFgKDTOI AaM881cUNBTkDRj6ug8pb4BktRDB7R0e+bBVS9SbgXtI6rdGF5F4qvxNgaDZ8Hx4sXAo CxNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785110; x=1769389910; 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=5i79BDrxuHBezOHdjkerpF2EfskLPnOmytUYpUqDeYc=; b=bY8nuzWZAG4z8F1YtOh5QNET6rh9hFOp2WMAlhQ2f2HFq44umBrON8IbOZxvSJvBxF RO1BI+Z98NJMc7JIbuQGQrcoIK+VxnciepgQOpnFY0WM0wWLLMMaA+s70Iqnb7NMScqR oHU+jErBZk9U1SaSQUYkaYbRkOxni38Fu/KDVv0ct8MUHG0idOp2NdVPhssyay/ROt60 Ogvv78dzPZPMQOsj4IYDtIbbbNYL4WDcAQ1BITes6aEg1OkO+C4Z9EWUWtNU1YAqy+0f A5ynAUnqSXbm5E+w0632uG02pAPDrox08FJFZMOijsO5VCeLGs9DMVuk73L+rx3kIlWM ow0Q== X-Forwarded-Encrypted: i=1; AJvYcCWbxbJ6rr2v8DG+PIjPUZrSwqRcc9apGtEkjWMZ4t1PUhblIXNBhZtlxDMJFqZkMNwYh8x33WMZsNZAfGY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7qtIAbw6YZCSd73PYlqifjQYho5P0kEUJKgRk3CpCsXlKzKv2 WwPkwsd202+uYKfNRogjIWet40lGuWfal7zcDhnBoTuXpiiuUIKQFoR9 X-Gm-Gg: AY/fxX6l9BU3YETTCPBQX1CUWZ56wSMonSZUTMcDNLM7Jtvy4UOyF7mU5/mRkh8f5CA JIEgaLU7Al3iZlO1WTM0dAgJzmL3Gg0MyRDg3pOcg17IJhbwHabq/dc5Okm83Vgh5XyVu0DM8MG qJUczrVVShwjVdWITiyW6EytH+y1m4IXikr0W1VpPligd+L2wL8PcxraWskLsPAXMCG0827ORtd k5kvCIE68h7fjqjU+/PGaxbkDZW7YY1CyrFHSpGYgpLxpePe1AmyHvhDHIxppkZcwb+FtAEjcEp r0JVvHkE2MlQfLO+q7n64oATDeS0PVU7Zr/9DoUKM+ahRLDkVC/7izLDfYkBqpceMD4mJ7jptVb DZZ5hI2PEG7i/HMp0xxLw+sQPXahiV9oYtLup1nGded9UIV7GO7qKN+lPoHxRT59Dd6ZD/PQUpI iPz7kA+hbanlF/PSAM2GKnPisWbQ4gcHtyAFa2PClcmBPVrAQJucTqeYuNA2cV7x1U X-Received: by 2002:a05:6402:270d:b0:649:9c37:5d5f with SMTP id 4fb4d7f45d1cf-65452bccb59mr4148768a12.5.1768785109659; Sun, 18 Jan 2026 17:11:49 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:49 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 01/17] drm/amd/display: Return if DisplayID not found in parse_amd_vsdb() Date: Mon, 19 Jan 2026 02:11:30 +0100 Message-ID: <20260119011146.62302-2-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 655c9fcb078a..a0d23853b8fc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13113,6 +13113,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 15:01:56 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 8BED61EB9E3 for ; Mon, 19 Jan 2026 01:11:52 +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=1768785114; cv=none; b=SxxjY3YXAti4JiQqKrBHyKADQ6c+ML4I+UzbDE/ygFonadfoymqxBcePxjxM4zu86UpHjd63nO/4/hgKqswknY1Er2zci9Ok3iErvY8K+JuqH3iuRNEcRQgQTmiqbFpob42bqf7HNRnpQdf0s/gfOeX6gJxDF5heSbv3LRdgmms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785114; c=relaxed/simple; bh=xjkx/RjLm3qmEeybCu80XAZFZoqG7bh+CR0W8zHb7us=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DeiPXHZt+W8hq6NTRcbS57FMgALkGlvNNvirgapDPgCWi+vcfsuW3QBeGZmyVfszzj86NyODoeDT5MFKoD7IvpqeI+cqC2ufEDY1364H5q1m8EvFMxNaeyEdZn08BeqgZ8c3Z8pdZTAJBZjtntUWIbKG7wlTBNV7mjM+kNRgHi8= 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=CnTjFqVw; 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="CnTjFqVw" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-64b686e7d04so460153a12.3 for ; Sun, 18 Jan 2026 17:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785111; x=1769389911; 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=DDkX9tiIpLGCY4WDxdoWW0wKCm3VG7e/EcS3/xb60P4=; b=CnTjFqVwIGOQX06n3hDW6Pe7F6AiyjkzvLosnp4aJ+7pPdvh35RW7+UIvy/ria7EGp +FOP776qTco3QQG2A2QqViCxBUQxi6SxCxKnVR0s0ZpmBmeC7IAvGS8RR0464qCYUwCX EHJE62TcdbXSNXWqHWVxcRTF6ihH0zM1dXFpjE0L16VVsuDgptqnQoTPZ3buQjnimVqB hOhkznRZ2WJoMKnietZYfZ63VH6G6sP7oy58IArjM894nKJJbt0dRc4z7aY5dq3JohXb gRuhr+9w3jXI+vGtDknDPImUvOvmU43NLLk5XkxkxPms+iX7XyEtMBze5eiiAk7SE2L0 NVTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785111; x=1769389911; 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=DDkX9tiIpLGCY4WDxdoWW0wKCm3VG7e/EcS3/xb60P4=; b=OLLHx6Gw5DSuF8cKfJbNCLAykwflcTCFwWekOxNcAUrXCaB4XKsq70X1NCLbzn7wPg iLgqgb67rez3FqB7Bcny+lQcxjSqM2P/U6xlK50DFCNeCmLMq3BZeaLb0uQC4aSUUd5C nWmT+gffo96EvCCDdFPfnOjaCfnyiyYnZ/SCpmTacSRzaSTltJ7YSNkxlgvtAVeHWBBs R+ReRPzJ+gWmX22/ZcStYnRfbekkJ06usSp02rb/ogh5s/+gh+nQN5XHLE3dgsPu6Vth smU/Xiad99++6B3SwxsMh2vBd5ZwoabtedhFesQWOoYa7KBmQ1QniUIUGDIlxU+Cm02D O4AA== X-Forwarded-Encrypted: i=1; AJvYcCX1Xc526BZ/EsKuKPK4u8S8/MqIroLUd/m0HqgCy2HED69ickuF75o6ISzP3nrVn/TBc0UVL71dc6mOPBA=@vger.kernel.org X-Gm-Message-State: AOJu0YwQYXBTuugXnYyRtaCOXd8DlO4sOnH1NiRfGwo21K7nN2OI1DMD u94Yfbe9CrpUIpuMnlSVaoYkoH5hYGHzDxgXwg5FrJOsIzroOm1b0IOk X-Gm-Gg: AY/fxX63NFVvCohIEnyM37zzvTyCFPP3DG6zLSJ8IyVIZG574R8+KwI6wSfMdMCpIaD 82wc1o4pnJPAIMge3vwP+iOy8Uplyt7dwbLlarp4NeTFJKWdLgB+XmRIoeVVGkJ4QYeJvZOxec9 PJc1381Sb+51/Hxwd/KptgO3zTawC0KfDaM7BrWHGr/bUCTbhA8KvxJCd5wpfDjgMYgoRybfECn Hw9hKTPDn5hJuIa1XYm7N8vor9UG0J7fQsqwMzvdz7pFBJQBLxnY/eiHzB684Em0km5Y/aiQMnC hb6ZN+IL0wsCMy4rd6Ny9cKLOEA5vmyUIS/Rjrws5cTgPZTvxA5rrcweRsz6uQvMdtBz2gkgO36 7Ajxq3gXmOoRrg7jZYLzm9lYdFZ230LAkegUB8lcqUyaSEYBilHmPUD9grO1t4TOpNAvy2Ct25d Ax0Waf61vLP2x6kUV6r/vuyufihN/Jk1THvPGN1lAXGvwsYHmTPq9305q6eWAbTwjE X-Received: by 2002:a05:6402:27cf:b0:64d:4623:8475 with SMTP id 4fb4d7f45d1cf-654524cf67cmr4280700a12.2.1768785110864; Sun, 18 Jan 2026 17:11:50 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:50 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 02/17] drm/amd/display: Refactor amdgpu_dm_update_freesync_caps() Date: Mon, 19 Jan 2026 02:11:31 +0100 Message-ID: <20260119011146.62302-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 a0d23853b8fc..d83c65dc93d7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13096,8 +13096,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; @@ -13134,9 +13134,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; @@ -13166,6 +13166,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 * @@ -13180,15 +13218,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) { @@ -13218,62 +13259,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 15:01:56 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 57F1C2066DE for ; Mon, 19 Jan 2026 01:11:54 +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=1768785121; cv=none; b=ceEj4T861S5BrtDr7vikrj0EKkqqZpgIN5d8zdJKeU3VCRwYbBhF/suE8ATFOxEc8bgfo04SuCIa/3EfHbeNcDHWpZviuOoEb2C8TzPp89N0pc2aLvaNHj31ofck8P9fezw8MlSFCgQDciZ3G0NwNM2nbBOrlDCXTeEafcJ1/ag= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785121; c=relaxed/simple; bh=5pSDDsXSTS1rWiWkC1NRJqJRJgN8TDZqMjr1alByLhs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=L081cBkJwHiHuONRQyzKKtJ45BYrnbqqof2eXVzoPGM96j68BhNcVrRGWTNrejgMrODzLDdChHyegm9tuzMe53LzFljMNFzejwGZJYrmRE9MDmNLLWDbR+oP5EzGAY63ckfh4L1LN9yknkVVF+ZAKcPrd39dp169lom9a6xc9M8= 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=QgBYi/lC; 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="QgBYi/lC" Received: by mail-ed1-f67.google.com with SMTP id 4fb4d7f45d1cf-6505d1420daso363664a12.0 for ; Sun, 18 Jan 2026 17:11:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785113; x=1769389913; 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=VjUW8QutM1erT9rGZZG1L0OVEG29nCs3yzGVKhAVPiQ=; b=QgBYi/lCTBZDrgNnt00EIYvein0WibFL9149DoxzQbAkvvaTkmKRgzPkKP47FwsZDV p/UK3ImzVjeK9yDe5Ffl1wcj/M7BAJ87nRjVEtYCuFkJilFSEmz3TTyMFE2fUl9APS0A Q+LE9yWGSXw+Wf/fF+AJgF2hwQi9xjI6HgL1fX+B0s0x+G0YybDTR6JIYREUN8ie7RPk Z2KgUh9AYrV6GO+hs1KEQmpKIvhtlBQY/ejgPYs+vArr6QEGSU7Zhk7v6wdj5FnTg9pw XQXxHAYkjbYfLoUXnsTIzporJG2fKiDm3A4vwAurOyn168bPbSOvHdDFItHVmqoz/3Pf kziA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785113; x=1769389913; 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=VjUW8QutM1erT9rGZZG1L0OVEG29nCs3yzGVKhAVPiQ=; b=BhXkAjE+8qjgkp2OrfkA/BvJSOEy6OkfydMvnQ3gVQ3JBWDKGdrmobNtZAWgeLM7HU JaOTA8p4ER+ByZsh5YZaGkq+UR3dWTwxFJp0f5cGG9QMIMrXktAHo6M0kDeQ/ovmbbTZ Oo4mTUrtN6HPT/iryXdqoPtl+NuaP09VxmoPPCIXbhrjaa4IWv2hpAubNQEbngqXMB0s HckDoI+PCnQetOXto+25e8D1H0krO9NChkvSDPhxOyZhAPGGkK1cCdic9WjXPISXymQE IXHtSIOcEyRZbTbUO7qS+7ux0tqYl/VTeGkkKYWiLmfXjwCqEOslCqOis/iCVQZwt1kV wyrg== X-Forwarded-Encrypted: i=1; AJvYcCVpTeyLav4ePuapz8zMnYzk9ZkOIlMbPz3xTV0dNH24dUJNNmX/icbcdNUEKy9RvjgJWldlcamGF5afsxE=@vger.kernel.org X-Gm-Message-State: AOJu0YweC3VE3/Kslt9rYFUqlM0W6exUI/xSjH/4ZgQaOv0p+Ix3t9Wh rNqEJIF8G0rSSpvyJMn8kXLUVR6ZxigP33C3S2jL79yy5WaqjvN6f8mt X-Gm-Gg: AY/fxX5wgc6kdEnqr7TjqRAi9BFeqTdCMT5B2VjqxFtBe5wZZFAaglbir4eA9oeti/Y VkQ716AalOr7a1zJq+8YD/zmKr/lJxcxUIAlNwAlAHQyjELKZ4hjh0Gj9nCx/+K1fz7GYwg7szS GjN3EhUG8XOhmBRQ5mvZv7i2+pq3RvG/Ikq6vO34G3AlHUa0PPjivzRmHpAEPkqOChwwzr2ifky OSgWNIrm61Z8cqyKCa6WI8avwI2uVuZ76VeLwC+oNb+gGyVvk0PI28JV4Wz/iFqMFBddtfKUwms z1ZzTAE+321oLxja2++W3ZRKL/X9B1d+QwgAD1u3DT2ip/HJc1Xinha1h+L+wVKHcTeqx5Iwgyq UW+h8Qj2LnW+HKw07FSM1DHZ4IWqiFp1S6ZPvpp8LoEIxN1wDD4Z+v9aSy+Ez4veVWuuCxJqm50 en1OZ0yKt+zR+P2mJ9R3Mhw2t02L5paiLehhC3KgYBMrWj1Lt/UGtPehjTEGLvR5EY X-Received: by 2002:a05:6402:5242:b0:650:854c:454a with SMTP id 4fb4d7f45d1cf-654524cdd07mr4619489a12.1.1768785112567; Sun, 18 Jan 2026 17:11:52 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:52 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 03/17] drm/amd/display: Check for VRR range in CEA AMD vsdb Date: Mon, 19 Jan 2026 02:11:32 +0100 Message-ID: <20260119011146.62302-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 d83c65dc93d7..69f3dbfe4ca3 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13270,6 +13270,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 15:01:56 2026 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 5D8A41C860C for ; Mon, 19 Jan 2026 01:11:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785122; cv=none; b=KbanRT5+yE3VLQirR//8wDS1xIdlCD7xb2XCsB4c9ecdgPa5tz2kfdGrN8TN+XHywEDUpK0gxV260sq1RFFGccQ+UhlTdq0HwDuL6VLL7glzvZP13SYRskxKzQaCOa1ET+GkZBLEK0gtt7UxxOwOqlqInUDwwCAr/YoHrsWn2Q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785122; c=relaxed/simple; bh=RXIvslnYHtPzDYcY7+pSyJ6UoebKjuEG44nPPhyKpL4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=R5jM7yrO47RYSD+4d4+QBX+olZRX6n2mA0lPz/LRyr9xvTvvMAguNR955QrA7hyTi3pQV+4QW9CFuyAXA8DMlFlNX113Z+dmtBo+0pLbpbWEmeUx2d1NTyKmioa56LYeQqghkPRApo8ZVCgB1m/tVNlIrO69MF4ZsfkjsxhGInQ= 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=RBDq0LVL; arc=none smtp.client-ip=209.85.218.43 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="RBDq0LVL" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b872cfd35cfso75724666b.1 for ; Sun, 18 Jan 2026 17:11:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785115; x=1769389915; 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=Y8+XechJIId3v9u+c/ggDmxy+XunBGz8iE7d4QwyvbM=; b=RBDq0LVL5cUhAuMDRWF8Ea4Y/0VCoo3qzDubNKO16bg+cVmb5zBkI/F25itqv6cLd7 eoQbGEa+8SxnGSaAG7qnH+fFsT2C7pbkgDok1MXqf0Il1BweGvxU8syCxroB0ypy3sfy 2MT8I5c0IEmUW2dOpEDv8DF4J42B+2WEmvCF2DxdcB+QTPtukc4IuZZtx8bx2Q5uPyjb DF/DIf6ZJvKnpvHNgpf7iqvPw8xtbKNNeXk3osNRUH7FtM+ywqtpm2s9sRq1aZYbytUt 5zczmtn2j3vZRsv4t6iMXcgNyUEKOecolIyISho47kcyeIZPvcZPVPQ0hd4kPtKIr1gF JP9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785115; x=1769389915; 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=Y8+XechJIId3v9u+c/ggDmxy+XunBGz8iE7d4QwyvbM=; b=s0u5D2dUFlb9uAN7PGUDtlgkyShLd6AtNfh4A4pAy297eXXtvcFSAFs/JfiywBYDyJ QKnD3LNBTgx5Ry6lmm19e1gQrhM20jBa+l9gpVqBQP3jB+RiKKz9mA7V0uWKw8SVGeqJ kl9W+g74i0vFlF95rdeSTh8dz8GYuO4P7aWYqWAFvL3XIYuAGiBzYziakRhO687AxGU/ t45GxUH6fW5dMSMko1BuTtYxLbozQG+NOiCPWEv/WeBGzkaGIgU2lJPUTb9DMKWihaBN 7rq41BuOgN56JV4tMNoLmHEzUp8uvHg2pCT0ngCczdiHB1pUn7SYC4keyN6iAY3IzjvY LWDw== X-Forwarded-Encrypted: i=1; AJvYcCWv8qt+065Zmf+npyyAd0desMVkyI+b4J0clChYMNB1OPdu/OiulwKbvHiq6ZKRE2R/j2yTd3dHiUhyOxc=@vger.kernel.org X-Gm-Message-State: AOJu0YyPbvY/TVRcCg9qijUOg1H4z3CXAR/7aUhUkmsZLNqVTsfu6HFl FB1bjlHd1GhCFOfBFt/yniBEgoCykdIMPc/9Lzz8ieAE8/KSONeUC5fg X-Gm-Gg: AY/fxX7cJ6vY17fhbqx51WmoNn+wEIMQIzqjqs3i9tlNQjwj4/U8WiKK7ZevTQvBDit FS1Ijfohzafrlv5mKd4u8XHPVWwV2ahKJvnPjrxHNxiCXivsHasU6vYB0Op0QDJdk9oIO7fbZx4 MkrppcU1f647V+m8zyd8t4LkXydAOyHo/mz6iX50gZaryXlFVMplJroFTsKf7BmpxONuIjTUDu/ vzNAvduH1edXOBcT1UxMWA9a84zlQxjDk+r6uQNALEFPkL/PfDZNzbGLxQY9waLa+N4eKNPLicS dwJtW5ZF9ziZoS76ywYdsbU15fHw8bBh7vLwpTLm+htbXi22cfEHlG8UGYpOyf8EMvTUZMqaWky aER/mG0hCtrJkhHZITHbiDuuwuMlcR9/5LAJJ32Mz5mmlZIbUcU5RGov8a7VNy8Pw/SbKmA+UGn FKAwJ68B9TCvgJ2253ZTR0EnV8Yz6TWyxr3CDbBUJti+6zNJTKF3FEamircQREoNSQ X-Received: by 2002:a05:6402:5253:b0:647:9bdd:3211 with SMTP id 4fb4d7f45d1cf-65452acc814mr4363238a12.4.1768785114650; Sun, 18 Jan 2026 17:11:54 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:54 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 04/17] drm/amd/display: Use bigger VRR range if found in AMD vsdb Date: Mon, 19 Jan 2026 02:11:33 +0100 Message-ID: <20260119011146.62302-5-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 69f3dbfe4ca3..37ab89532408 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13204,6 +13204,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 * @@ -13277,6 +13289,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 15:01:56 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F32D1A3029 for ; Mon, 19 Jan 2026 01:11:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785121; cv=none; b=nbQoqO3JMKJbHqsXlVBxDLordOtG7GzBtyrPD4d1w7hTPyuEiq2TiMqsqSRc2RO1USRdP9m2eD8uqVaODQy0tjHPYvzrtQsDtaWD7Ue1k55yiB8/CvjydMCLteUGiKgnoYyuU4LC024GFTpFsgg84RyqHGneB6v+gdCDw6XyOgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785121; c=relaxed/simple; bh=R+uLRY82QL+hpWLnKwLHrCHDd400bXoq6dB7SnnKie8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ojfS2NMaP+I5bnFUIVvyDYsv6SSVdRFqSoee8BpD5W+kYhRYDmCnr0aZXOKWfJqqjlYmwN5PD7lKTGws7p2uQruGwjvnZIBzl/4FdEGgHgICFrcDs7B8Nu35/tM8Lbeyo9dpN5yvSY3rxL29jdjKe916gFXY2sAncbOkbG5qOkI= 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=mk1BqKAk; arc=none smtp.client-ip=209.85.218.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mk1BqKAk" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b87174fbacdso44798366b.2 for ; Sun, 18 Jan 2026 17:11:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785116; x=1769389916; 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=O/+mgz8tz1oq1jAsf41mu+R3jbahLDvbH8hDJMkGxqs=; b=mk1BqKAklAM9PCEr9CoYq8S7xdSq3Kx5oAbsad6X5K1j77QAfhP8wVjtL5FaDv6bvK pSzk+4ebADWNSiQjebrpZSCajHtvPC0uoAaz/IpdEEcVCA03TSgvkodXYbT70yUX4YMW gS1su/ovAznXdX1FMqd5UVYMlv3LNFGKmyDNTro8cidYp1+KqITPu1M5KCDaFGSk9enE ZF03jbhFtJiVL1NV9pwQkm4G93dwDXQyzxN+6qBc7cWM6J3PNuYve19r6a+xX40RNm/5 tBWDQKI3Rxc3uyHcNuCu4+/ldX76DKmDlUE/NQJKSWAjJmA0E/99Nr7iIzKz5LD53MV7 U6ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785116; x=1769389916; 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=O/+mgz8tz1oq1jAsf41mu+R3jbahLDvbH8hDJMkGxqs=; b=ONQBmIsOZRiE+94rdGaGnMHp6zN52J4tAd2vbg6kVUI2dTTQvWyDLJOsJ6aE5e267H jaYZtFsTwDVnny59uH9p6QUY4k37o3mVRpvlNqOUp/VPpbZwFUT166pE7TNW4FHFncWb EqwpVhinN22Kd2k6KfOp3KF8u/uFX9UmwsRZCVu+1mSVqZ3RQ7otCmEmzZBqoMI3v5fd 7Lql6BZ0iwZYFO7YTV9tozZkCuugD/v9c1kD8YQtU0Qaq6NBXN72nzjme8pnaX+YDxlV gyDsjZih0/Yu2ncuFdpYfGXCLMtgRySpEHk8a1iYrYq82Y39D+ML3aqxSwpskW/akXFA avcQ== X-Forwarded-Encrypted: i=1; AJvYcCXCydMa9gkUlovKnBYXRHNuQ2/CxzvgUTSokjMYWD5BjYjPY8Z2XKtrIQ5lP/zDyS4/AkvwB6q0WPBIrZk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzup4dfcWXuVhl1IxmJSZEV1FEfbmF6gikXNA/ghZInjqGGDIYs QMFYRA0tq4zJGMwVFjOS9gwmMosDuHUM9Al770YdmW1uvCPPE5tPjt6B X-Gm-Gg: AY/fxX5miBQp8kbbTAv1yKJZnUuEFSp6lFajdICUF6PI6ZcI/hIRZ3VBqtYPvR2eFNi 82ZBYSrqhv0K0G5AlO3RECpsh/iXE1u7IsW6yNUAwY1UIpDHYsEQMWNNle257kNsc4UMhbzSUm2 gs3qHtCdF/JJuziegjG+iYGE6VdXdfOKuFnbjY+tNxmR8lKA2MUkVP/Eam+GRmTeoY+xG9N8Qsw j0/jEz6gdqbR3H5miJaR+Es31fNRilYIgAsfT9U7NgV9qRkreAJvdRd72oEcIN5MEzt7GbdFZpm gizFi9w2K3SolmMwIEwSew60UYdr8k5rOOgCUPwzowc4VmCBsACVWOAm+WFbOD7BQ6iDLtqK2Vm aXqdL2Vm4mYMBYxCBfmbnLCxQGqojG8vfaaMpVNtDJ78akeW109j0A5HaBF21nciuVtQG1RjKmC c7LBTDKMUV0AFxT9HbOeM5oNr0fKUgirKNxEqbHW02dMme3cgHUw+oqWI7e8OKnS+p X-Received: by 2002:a05:6402:5114:b0:64b:45db:3624 with SMTP id 4fb4d7f45d1cf-654529d2140mr4486900a12.3.1768785116317; Sun, 18 Jan 2026 17:11:56 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:55 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 05/17] drm/amd/display: Refactor PCON VRR compatibility check Date: Mon, 19 Jan 2026 02:11:34 +0100 Message-ID: <20260119011146.62302-6-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 37ab89532408..662f51faf949 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13242,7 +13242,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__); @@ -13270,18 +13271,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 @@ -13306,17 +13313,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 e5e993d3ef74..76a10fe8d545 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 @@ -1375,40 +1375,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 9d160b39e8c5..f8b45a09d680 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -219,10 +219,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 15:01:56 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91A791EEA31 for ; Mon, 19 Jan 2026 01:11:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785121; cv=none; b=Ebu0DquEQweowPWL+9GX40ZZSACeqkMmkPc3Y849Vl3Yl3FFJzI9bdnH4elMFaZvKvnqx8AoLlRNze+hxnmNIOzZ3dsrgHXH7NUmfa78yooIAQxZNul8UGGwHGyk6J9GzSpgzXKZOz7gRJ9aSuYQliy832cZEHkNoLrQ0z3kYlI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785121; c=relaxed/simple; bh=b40kBm/VJNS7JhiBYGCgUXbkQHy6Nk+i9y1ClV4U0/c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=V6ET+ne3EgYtjQO6pfyHriVcVCun0k6kgmvGJ7KCqxlMgfab5uGkrDtm/XcsKxChvzf8FKzqKq9ly5clBorM5DAZFZguWOz7hTAzC9EpBZszTj2gE19Wva61JBivNjX/Udl86WvS4+HFMMK6ebxNF0IdXO9i75flV0WuCP1uUok= 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=DKjcR48m; arc=none smtp.client-ip=209.85.218.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DKjcR48m" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8718294331so56144766b.3 for ; Sun, 18 Jan 2026 17:11:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785118; x=1769389918; 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=fP5YEeeE3B0IdA9ryOj35W/sze8zh4cUnFXv3GSvmyE=; b=DKjcR48mWZXz89j7abQN1LggY9CyEpKfpuJcMVlr2kBuBPX1wwWnr2WSw4wzX/sgsy MdAojKYOnYaIc5nBo06mGFfitD6A/YUwGQGJzw/c7qH4MalC76FC74Eq7o5cxTljnd0N 856GTLFOGzJomtzcATmXSXBobRmPeDKl12yL9+cYAPvJlvhUdkr9uXQjRlWq9PTDtP/I G0gLmoQM2YpMlnmcVcxEDO5rn6sMAGOMaRBjpt5wU8OaL4ktmW638renruhCHj+e/BXO Z8vZqZcDFCu6P+DxQXalqo6oa9OTD9gATk4zehmUuij9safGt3IPOqakcJiRsZCIXRlh 27HQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785118; x=1769389918; 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=fP5YEeeE3B0IdA9ryOj35W/sze8zh4cUnFXv3GSvmyE=; b=bLAOVByBxisRFLcGRzRR4fxrEqfWot2HB036JQrg0mbBM4+caN+zwyQtbWs8OZHyb2 GrFa5MUSwZMhkUgWn9Lh1+tV3M49rQi4+KCwdc3TIZ+wmhb837FGVWEKR86AI/iCMGeS iPOQKrXCc3Ud7BNJTITexq4lhPIB9Kn3lOgrs6Y5OL5Ya8rkWXTQ5xtJRzEzPme7loOp Q0OiZyQOPYrtLPdsFODOtlUt3uAZJY9kpNfp/EvWn/qsZhOO9HQPFu9x7g6tNqoqyske /0Wgg+JVGi+AqAoJKG86EqBll37kG26zag5ID+tBn+gW/vkfmVwmzgdSrzEmtjwMRVCj fReA== X-Forwarded-Encrypted: i=1; AJvYcCW3gim3c4d6y42fzHuvbFLaZvfr0o5z+dJgDFqweU9zXjZZcqG6yvfYYxIDP1GWlV/KQxdDw1EYAFA/1l4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7NKUd36Zr7DXllIKXd9Vnqv2fIKnXUZHuYH01121mAZPOKeTf 1A34MOEC7rzA3kSL4Wq7UMaq09FqbV1rKwZPbe+9pLUi4odFu7K/Xxm5dLpeELrd X-Gm-Gg: AY/fxX6RyBahfG+Tvur0zkHvMhrWJ4UalBOOvhVUhQ91qucAWV4YnSVjPRvTcvNte82 XLm4hXmePB4ceMQ3ubC+6GDl44vf0ILSN+/IMQ5MkiVgJSqqK4EMvsRMqS+lv2VqvdFzucaLckY KMPnHc4MbHR24WtIhFtKAvjOURquusHDqpJrrnrW7smPOPXCyF5MlvyDsXitrNloYHaG+0pEfOj tXIHm4n+bppfCgRwZw8VsAiovlmrnUgwPB0JhWzAmO6Vz7jMwuaH2TN8OtaRLb31/93REC0W6YO GLIPvRbNzUDYkZeVT1lcnmgGBkz0bqAn8k27QTR13tbzK8c7yvryg097G6O1VvsJmwD1EUF9rhe arEVtkpHyzOWepP0iaNnWl+hMj/1fhEsET4nMG1wryMUgfg5LAbwDrSMiXer04N5SxD4nK9c5Gs X9DdPTVSiddNl0XNKqiY964Cv+qQ2pM3kiLpvuVsBtcJ/FgBOeotACPluTkg+LlMhC X-Received: by 2002:a05:6402:510c:b0:649:b47b:2ef7 with SMTP id 4fb4d7f45d1cf-65452acc99bmr4627590a12.3.1768785117830; Sun, 18 Jan 2026 17:11:57 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:57 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 06/17] drm/amd/display: Add PCON VRR ID check override Date: Mon, 19 Jan 2026 02:11:35 +0100 Message-ID: <20260119011146.62302-7-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 662f51faf949..859e34235769 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 */ @@ -13279,7 +13282,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 76a10fe8d545..2ef515a4e1c4 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 @@ -1375,7 +1375,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; @@ -1393,6 +1393,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 4068d5baef21..5be0507f8a27 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -1056,6 +1056,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 f8b45a09d680..ea94c52d2b87 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -222,7 +222,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 15:01:56 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 DD05D1E8320 for ; Mon, 19 Jan 2026 01:12:00 +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=1768785124; cv=none; b=SkbwXvqYQPdiXyIxQqsumzdUH/VtIAcSBOOzkj1ER/LGegzBuYmpRgsXjncht7UnFwLcSNXlxJF1uLyRZZLAco7TV2EA3L4bRL6vg2IFCG+OJl11rTRZxFcx8TAPFkoYOS6JBMLA0D/dZIxPud0QccP4h7t6Fb551RA2neTbYSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785124; c=relaxed/simple; bh=YCUXoppIlU1XyAxTc6PUJaTgDcsruwutmmFGCnI0Y5Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lyTsLmHjz4wq8b34y7NeECSJ8q9wDdSws0Xd0J1LDeBLdn6SwgCLus04Zl04AT3aFt9SkgxJEiSOBvLrglUCG6rHN3x4pi9RBsacRCPghUmhDEPwBM+9+2MZ6wqPMPY1eTyUSPvI25a1VT6vcEWf+9A8RnyNDzIUFlbqlIoqF3U= 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=IsnA00hu; 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="IsnA00hu" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b87677a8a96so75087866b.2 for ; Sun, 18 Jan 2026 17:12:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785119; x=1769389919; 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=LZXVwXnPctt9VEWjXx91N6i+1aICn1iOJ7TSOyayxAY=; b=IsnA00hunAcjsyGcNLDdQJ7gxwfi1w8ubHUudXjpIW8EtvZ1gnU1qWQ6B9V0IsMeO+ Hdvy2kULpEuxir4uuWtQdpEsdZKM45ABKSadH8OXhB2890RTYAzIfQ5M/DFHXnWDuFxK 2K+q5Za2XdVWyfJ9BVHpHF322z+H301W9R9L+ev9RTbov3QGFKzRu/lQBFLPt/0xxVQb ffTjcmS45B1czUZmFvbWFO8igkeXBWvWi6AMnF6H7uoZXRbW2akl+10q7XzHpXqgUUVj PFxNIdXNiFHY2kAjZNFgLVouu1z5PH11n3/+k93kyDbLI7UO4Fx+ncvMnoXopNzRz1ik ZpmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785119; x=1769389919; 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=LZXVwXnPctt9VEWjXx91N6i+1aICn1iOJ7TSOyayxAY=; b=CcdQOr+t1fLFDR2U+2WUcLtJeEtdEerBZ0YH0POeap3v4LCPSeBSgTiE8M4UxTQnR0 paNsUlLxNe2TYKPSao4SsM6zuwtzisQuVOsBRkhsWCN3HNslC6mvdQdWfiI0Wkzf4I92 y5NZ5CfrEC+lrUoSfYZZPz44CxsiZXkzkiPAolzaZnI16fbgZGBC9iaqoVv15flInrj6 EJhdTJopkkYkm3xhI3UqthreZmxhlqixbcLtrq22g/5UhCrDy/sKcz3sl1tS8DhcMxgC zPALn502JYhgJY03m6oFo8QZ4rHAfG+0BEWV84kQY6TXH5X0kSVORs2WXU8rQ3EdGrPZ r2cw== X-Forwarded-Encrypted: i=1; AJvYcCUGgE9I4qPsl1OPdP4wZ+EFnlmNPZC+bowtVo8h5g0h3Y4A5hz3Ps1s+Bp/FZ+dJxnezicxXx3HABKxxyk=@vger.kernel.org X-Gm-Message-State: AOJu0YzqGyFLfBQNC2bvwkzZGcxrhvBbiVdlu0WC/fMrXgwhnI73z0IV DRggjuMNNT6HjwfVSRLotsxiMGc70r56SJXJgeU8O8VyIq/dRvp/m0vZ X-Gm-Gg: AY/fxX6TjquLnUxF69lREekTSP2iLgT/QfDUjrDXbY2cdWgwt28cxWwOMx92trtu/dL X9pIWpKJd/IwtrXIASYSus3Otdrs3aJZpgrYcIJsdcsj9LnwyoDnnTuI3252i207OrUCJC7aGn8 85BovcwzAPvPAuODpPOUHvftLRvWBX7R0+mgSoIM3EcOUuNqd3VDSS67SSal4+xM+732X7qqJj8 pIepxkCYfmPnaqsdwdHIhvJDksxIL3NEpS860vmNEc5u695a1Xx66FGWJyAzcCa8UkhxIPWdjRO HAh19Rh+VMqpc0uP9zU4S/ltP50+OFkrmjQ9yiEpG3FLkHKyLd/EFyUc48IlQfW2cluRZ8pF2wu n6RxwkfkQm62p25vSNLcqO83b79UyHJXTXusXkXJ2gQMslOG9yHG+ohKArj7Yisyd0jq5C8PCx9 1KTjHqzPdEHO3rkr8uxEW9ue4ZlXC4jS50hAYNhG6r3zR2isXoTGJnMymUy8FzbDV8ZqaT724ut /w= X-Received: by 2002:a05:6402:42d2:b0:64d:23ac:6cae with SMTP id 4fb4d7f45d1cf-65452bce08amr4211650a12.6.1768785119145; Sun, 18 Jan 2026 17:11:59 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:11:58 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 07/17] drm/amd/display: Add CH7218 PCON ID Date: Mon, 19 Jan 2026 02:11:36 +0100 Message-ID: <20260119011146.62302-8-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 2ef515a4e1c4..37747f87b55a 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 @@ -1390,6 +1390,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 15:01:56 2026 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (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 811B1205E26 for ; Mon, 19 Jan 2026 01:12:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; cv=none; b=Ce+vT6NrX6uq0+xiHxBzQkh5XN548JP5WZ/XGe+OFXA9/oWQCzqvRpxofZiPCPp9VSuj3vKlMjSKRm7ox9MSScOTiSXrkAQzNpKYCq81hj43Vtxzqhy3gOY+V8mTB9IWXu6cdUddSw5eev8yUxyLVS7zu1LSduUG3XmrlQveUMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; 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=NHRhpR/jqnX1od+4nyldx3Y+rbTzCO6wO4pasn25oqe9eXKuWogD8Kw3QFTqM7heCN3mrBsPErXV9WHqDnwopaFizPPERdkPd12pI0RmKrFPxPHXx+g6RKRwJLwrKc9eyH5+Z2vlI2vcwn+7RQzD/AqMJnkAHS++nwzzsN1b8Ng= 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=lZUZbjjo; arc=none smtp.client-ip=209.85.208.43 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="lZUZbjjo" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-64b6f22bc77so666928a12.1 for ; Sun, 18 Jan 2026 17:12:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785121; x=1769389921; 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=lZUZbjjoy/zDFswB/WV3Fs6Iv7Cewm+X5IgZWggcpw50viy433Qe6PMqCwAX3rDMKN WrRZLpWp3WID9Xt6TqKZSR+CGBsHSrtGSo2Yg8F/cNtFRTNT1SZlPaymJ9Xr598wf60C Nn3yrMrZXPWhwUBo4Pa44J2HS4oW1uA4kNuhcdSHBd7d1OWd4yHuZ4M4nf7VeldpcAIF kPmGh4esuZ4YjDmzi0GHiyZWZRYRVU1kul1XLWq767SfHvwn1KCjkzZ3mRiQewk2o98J FeEZmb1k6NMPkjDLz9PjrjD0xNXQiQQKkGLAX6wixoi1sHWWpcM6vB12x2ah5ScElhvT HuSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785121; x=1769389921; 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=dWV0vN8LTR2eK3IMyx8eFgAv3Mt7cREXUIZRFvlp5s3ySuFLORr3c0uTRVjKe/pu29 zJa0XlgnLe8/G6c/9TWccxwqYujhfqGeL1AdGXr6ei3nU7KFtT2gkljyt2z+RKKmnwkQ QNYepg1gjSHhSfu3U8fHPHCWt7jGVdSIZeo0wtm3l2nO+7cSV/R4GBo/0dvMXnTOK+7O s4tgolgo2vOpThDLBVkCrblo9fCkkteU1d/sbMwAqYuljGbgyZZ1hLavy2RskiYuHLBP LUDkE6rpcGG27VHxnC618dwSLYAwisOzMPwENgC8Hv1TBsz+fpCpIRAK69z/FTaG05H2 9ZeA== X-Forwarded-Encrypted: i=1; AJvYcCW2lMfl47DcEkTlCAAMlDrK7UGRFEzwyMCHBDcqgqPVWZIPe5qkSMB0tU/ovKwht/3aq2qowYHQeusY7jY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9sYIzhy2OFtJv08NL+KQMw544Q9faMLs7lq1qwB5XF1O7yTZn 21Ec4J6X8BF2wkztjRneULte16tYjELPyXeQQ14Hos9QrfwhRryOoLn/ X-Gm-Gg: AY/fxX7cPzyHiL3wIyyKTTQ/yxzh8fxte64LZEI+PfVhCVckgBn8LsLnrfDSSBPmdND oHAoffw/pNO2yE7IP88FB36zeAkcHr28aHDq2C8ax76mgOTmc1/e15jwTdPhZ5GOdvSa+KEA0Ew hKszMssTzx0ByUt0OK3OiQGzUZ9MvnCxT+JRIy3fT5oO2adE2I+RoJNAT9EAcqqmj6M1BLWxW8m hS6/divJtoQ6oOce2g6t2ARIJUva5KTOpexJsZihiwfl72PPx7KCVbJjKTLHMICia/sHPbTYq6S 3ypmzyQARGildUXBoed77+Y7blS1dbS6c/SBP5Lmp9OJq0owIsFGdJrfby5LXFiMkYhRVNOZiA6 09hwKTo7dvuCb6TImbM+QvoyFXGxEX6JhqVqBR1vbDn3+meT8lyHlBx5MQXOQKr163ogN5N5sVl Bn8eQyTtO4Ur/WKs4vRd3DC5CWkVmOzuMZ+daydm572goX8LP5iaprwQyuOgOOthoQ X-Received: by 2002:a05:6402:520c:b0:64d:23ac:6ca6 with SMTP id 4fb4d7f45d1cf-65452ad0b19mr4219339a12.4.1768785120824; Sun, 18 Jan 2026 17:12:00 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.11.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:00 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 08/17] drm/edid: Parse more info from HDMI Forum vsdb Date: Mon, 19 Jan 2026 02:11:37 +0100 Message-ID: <20260119011146.62302-9-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 15:01:56 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 762AB1C860C for ; Mon, 19 Jan 2026 01:12:04 +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=1768785132; cv=none; b=lz82tqzIms+wLIZSM/U2p26CaMIePDfIy3Z2w3s+NEXwc6E2UuHHTtq10CKDSr85LjA4qaC5QDhqIFQ3NDFSdbD+4hlllG1JWY+StGIox6ZOA31Epb3OZ70yXAbEWLrR5tf8xQGxP3JsBPVcqxYjxe7AmHYBJynRbvEsRnx9GZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; c=relaxed/simple; bh=fjKhpv2Rk7n1xhM59EkaEe5kqG2Po8cNKO3S0AgCsEE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WuP+Zt9Oz7nbBEFHH7voR2Q9VoQcxUhx/XeWwbthAEymaKilzcwrv0TUtUN9qNmKato5WrEOkYYBhfZrJcOvH7CaEnTsrjYXpuFuLjsIxHykHOs2N2D7ZYpFRIJVxbqpklSv8ijc1sijS/a+0kbjWderLDG9jD+NBCTBDwutocE= 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=EJI0SN2V; 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="EJI0SN2V" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8715908e58so75479766b.2 for ; Sun, 18 Jan 2026 17:12:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785123; x=1769389923; 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=6HUGS6jvxmoIyvr+IqDq6ssoVfWMzXazHZIMF4nNX64=; b=EJI0SN2VRRo2ASpAuvyJaaIsqw5f5XXO9Z6VJ5hlfTisGS9sO/sK7JT9db9zWQTRkA 5jub51hIPqYbW812OGmBJQKBNmibelbpcwSDnjbYyoztqk3lMxBE20SE+eV5cwNBAPiP K07siKi3EqMPRZlW74gPArhcDqBSmO4qFkXPFeZGBUnwEEkR29aiuqy9XOXxb/MpE7ch R8aX9cWhgT7Su8nl+vhkbBImmPeRyiw/qk9AlfK4ZMY420ruhlfc+jq6uJBCQJI72Avi OITzJOCxH4+JhdpEL8xSKHLXrPD0FZVTjl9oFSgszLRQS+J93UhC742L9jtyfwfO3wsp 9Mgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785123; x=1769389923; 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=6HUGS6jvxmoIyvr+IqDq6ssoVfWMzXazHZIMF4nNX64=; b=HxhBndRodkKTNiGFYjxoF8uLcD8hNTQJGQUxFovfFvBExBtF96X8AVFDjsJ4cbGHcW JOClMhpNkNi0+USxnWQJDZA4LlfgkW+IQjiwRWQvwSNlgXuxyXPOr5bR8ZFlvHhJeASc Kkt2u7MtrbQltVxJEZzRN1rwwWUqPCd4DVEyRtxfxorRYQhhtE9x6ixWMFvbSRBwp+QY cMYgem4d6gqyVerbf8odWwqtr5q4owuSk9wTnqs7sxo544QMhKx807qDiS22JdpxVzFD v/os/c2/cb5T0xsX7UBXZWfUqb+Thx1J419EP7GSdYawOtAcda8i3loAmoT955Ywo8mU cqDw== X-Forwarded-Encrypted: i=1; AJvYcCXmBm03jxML4+R554Dz30yW5jfHft3s44rNYvCWnrp9TbgFvGhNYbVAZX3eJI4f2jewLlPScP416toDe5g=@vger.kernel.org X-Gm-Message-State: AOJu0Yxkaew8Qjlm3n4ULI3AIFYoH0m4r6yw5NtRTnTOIr1b2g2utvMc a52PPBwGwGET3b8YAr/XwYxCvFKzAvYNcj2MvrE9Nv3lmDkH28HiPNjR X-Gm-Gg: AY/fxX7nDRsGL9oprkhAoxXiqKzB3g5b/+BIYhSEsot8utBK1WKPEUaJTrw9L+YFhZ0 lK3obo9r2J28Iy6EzAzHyWAj8R9V8k/uD6XRD+bdwMP8oG6r/2HK/nTvuHnyZDJzRZg4uvEo8aL M2R4a2fdn919tM+Lin4KObkv/yftYLpLTQv0lZu/OMrXztRmT84kG86hns8O7NIMgmEYUiZLRba i4b98tVJ5VckRIQKp6PRjzWbA/lIFZmpfrdEAOEdSgLJLXxVFMVG8JTb84W+mIQuvUU8Xmsxnf9 Io64GZMoNSCD81JkcSLhg0TwyrHHQsbZtVzpudLUYTPBdh0Hsy7Odxqi9jgAG7PfWWZERkyq191 zThxCV4oCdJ8Wnln2SIvPQu0OKTHDQ14IX3z3yVOwsUaJpLlHEAVLpdMleRh2UcBIxgv4NdtigN 1PWzv0jwxxK3PwzylKvBA2EZgYjb9Z8yU2bb2WDB1mAQXVC06LEE3X1pnu1M2Xnpc8KMWFjOv4j 0M= X-Received: by 2002:a05:6402:3513:b0:64d:46f:331 with SMTP id 4fb4d7f45d1cf-65452ddd6edmr4683637a12.8.1768785122665; Sun, 18 Jan 2026 17:12:02 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:02 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 09/17] drm/amd/display: Rename PCON adaptive sync types Date: Mon, 19 Jan 2026 02:11:38 +0100 Message-ID: <20260119011146.62302-10-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 859e34235769..b7deff137df4 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9597,7 +9597,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) @@ -13324,7 +13325,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 15:01:56 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 185CB1F91E3 for ; Mon, 19 Jan 2026 01:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785146; cv=none; b=gO9XHAFuquVE6QKIeEte+OAtmZ22bYEs1ATrk4ECb2U1wvuqvpzBK3WyZCVwbAfvdfMYdvOyyg0oQLxRgrFbDeLaP1/FQgY0I7QGcXd53MufFwhhSHA/mxiM0jaIl6oEgN5kYWnHOcN5/7nZ8O2jzBxoxpOMf4r43yNo3A5aO44= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785146; c=relaxed/simple; bh=3rhi2p+ZdGq6QGCG4l8RLjwdh1gCm7C9puNo1SxBS9I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tORWCnZTCiObW+iSlW+36k38dpSkknR154Idox6V/U20awKom5llczzI47/HTSnf3hwQRxePgVX1z5EGPN8TufrDDHW5/uTz2svmffvuiXPL4qzJHR7nb3ltLmz8RR9T/cG0AJKoFpLS0IWTjovG025BRqF0RPFO0jwFVsTxUVc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=cZ8JIT+F; arc=none smtp.client-ip=209.85.218.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cZ8JIT+F" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b86ff9ff9feso39039666b.1 for ; Sun, 18 Jan 2026 17:12:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785124; x=1769389924; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=r18vhTswb3nOt1VBJpOlruOgjP/ijyrBC8r/JG8t7Ms=; b=cZ8JIT+FZe+zL/EgzOvtfl41iOaUfOx/lIL2ioGl20ZVdSz/tRdM4ziKDBUhwQObOh Fn4pYKNT7K74qE6c70L2JEgxF3jsGCmQ2sZwr3OE4PMAPsKcGa+jZPdb7dW5PfgQuk/7 6PimZCSXiTtVcXTIpsp3vjP0PA6X8SEPCsfLqfUR8VtY80ciZEvyBtN9zQFFd8h4li4I P3H02jDVopxnLIdOkMJKOA+hVVIRUEL9XMmVC2B+EZvcqXPRATc7YMC5Qav13VHc/VQT YuuD6DJ1Y8wm5f0I4wGfAy8szm3sXhRz+tI5wj/r4Ivq9OUlV5wpjF7D1a45c2PLSsEq YFhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785124; x=1769389924; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=r18vhTswb3nOt1VBJpOlruOgjP/ijyrBC8r/JG8t7Ms=; b=bZyEFONzIEmfa8oxKPGDXxa66vgJblQ0cAJN4lcJGLcTqpQBUneuYaBhWeljPz1xj6 Jy+csBGTGefSvbYNzrknp7ZhLXTPcJlccExuZb0BR/nfDirkkWcAseGS6uHnz8gnc3iT ba2ek04g9ndVTSEvIvd7et1IKrXo/4kH9C4a37K83JwkZjXlHzQMgD3fM2vXssTntPA7 JhaVrf2i2MORc8r/A1DSmzqus3JeFHp36ztGZj040X3lmtK6mKiQtujOxuzki+UjAlvJ Berpy/BQDIZfgeSmWEe6FrCvXIxDp0QPBemddura/hT9KbqwD49xzubJJzVgaFpyJUAy 8W3g== X-Forwarded-Encrypted: i=1; AJvYcCUSdX8/I/1/Ll1pMyPPytI5eN5cz5yDKTbNuqYky5wg9WrsDn5uOb2nHHqJw+BQ+WWwlugpVdesehER+Qo=@vger.kernel.org X-Gm-Message-State: AOJu0YzaJR4NEiha+wmzoAhpexD9v801doM+Nz64imGjYSocADG6QwLB 0sD9uzWpsuR3OWrazVLElJX/s6fRuDkwRapUMIT1AbjbUNVoQ/ps7y0A X-Gm-Gg: AY/fxX5YUiu4EnC9pYdLhGaUb1r+gW3agz+YABVAXtmA34ouTGxG6Ar1EQNOuwU9K5w /18s9bogYAIpsfX1S1LPeMcc0eufOC+18vZxNQNBBlwW1HXHzazZCHmb+YkJ/tcThInj/+lNN2W JD3/LjuqxO9p2WKNW/y3+CLIgci002TPwlA56RcuovHlLbgzFlBABn+fvVoRDuqOgouteU+GxDL 4s4VIgC12PFR2kv7rTbURjvP4lsPXadE69PlKQWdaeXJjZK8to3iBRLV9FbaRw/b6XFQ8gwWmHV SFwsRy6DrT9S1CQkOaTtzfC4ri7FHcf174XnHjQnTpVEkxlQJYe7qvmEwLT4jTNLWWkfk5Q8XUo 2BvRQgzYiI7XdPuIQG3RhUrcqtkT+J80xENW9DMti2V2i5M1b7l6JDihJxgP0ie309jckZTJcsm xgP36Sg9Ae1iCZFnwoNFu2Dp7as9j2scbMhKL76oDR+h4U6jBJ6YhZWOQUjeAabfBY X-Received: by 2002:a05:6402:348d:b0:64c:9e19:982d with SMTP id 4fb4d7f45d1cf-654523cc85bmr4269711a12.1.1768785124078; Sun, 18 Jan 2026 17:12:04 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:03 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 10/17] drm/amd/display: Enable HDMI VRR over PCON Date: Mon, 19 Jan 2026 02:11:39 +0100 Message-ID: <20260119011146.62302-11-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] Not all TVs support FreeSync and many TVs suffer from VRR flickering while Freesync is activated. [How] This works the same as FreeSync over PCON just without sending FreeSync info packets (we're sending standard DisplayPort info packets) + reading the VRR range from the HDMI Forum vendor specific data block. PCONs take over HDMI VRR triggering. Prefer HDMI VRR over FreeSync to reduce VRR flickering on many TVs. FreeSync over HDMI seems to be a fallback solution and not a first-class citizen. This especially helps VMM7100. Tested with VMM7100 and CH7218 based adapters on multiple HDMI 2.1 and HDMI 2.0 devices. (Samsung S95B, LG C4, Sony Bravia 8, Dell AW3423DWF) Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4805 Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index b7deff137df4..772deaa136d7 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13193,6 +13193,20 @@ static void monitor_range_from_vsdb(struct drm_con= nector *conn, range->max_vfreq =3D vsdb->max_refresh_rate_hz; } =20 +/* + * Get VRR range from HDMI VRR info in EDID. + * + * @conn: drm_connector with HDMI VRR info + */ +static void monitor_range_from_hdmi(struct drm_connector *conn) +{ + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + struct drm_hdmi_vrr_cap *caps =3D &conn->display_info.hdmi.vrr_cap; + + range->min_vfreq =3D caps->vrr_min; + range->max_vfreq =3D caps->vrr_max; +} + /** * Returns true if connector is capable of freesync * Optionally, can fetch the range from AMD vsdb @@ -13242,6 +13256,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; struct amdgpu_hdmi_vsdb_info vsdb_did =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; + struct drm_hdmi_vrr_cap *hdmi_vrr; const struct edid *edid; bool freesync_capable =3D false; bool valid_vsdb_cea =3D false; @@ -13279,6 +13294,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() valid_vsdb_cea =3D parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_in= fo) >=3D 0; vsdb_freesync =3D valid_vsdb_cea && vsdb_info.freesync_supported; + hdmi_vrr =3D &connector->display_info.hdmi.vrr_cap; =20 if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; @@ -13324,12 +13340,17 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 /* DP -> HDMI PCON */ - } else if (pcon_allowed && vsdb_freesync) { - amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; - amdgpu_dm_connector->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->vsdb_info =3D vsdb_info; + } else if (pcon_allowed) { + /* Prefer HDMI VRR */ + if (hdmi_vrr->supported && hdmi_vrr->vrr_max > 0) + monitor_range_from_hdmi(connector); + else if (vsdb_freesync) { + amdgpu_dm_connector->vsdb_info =3D vsdb_info; + monitor_range_from_vsdb(connector, &vsdb_info); + } =20 - monitor_range_from_vsdb(connector, &vsdb_info); + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 --=20 2.52.0 From nobody Sun Feb 8 15:01:56 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 CE75D1FE44B for ; Mon, 19 Jan 2026 01:12:09 +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=1768785132; cv=none; b=Na0yhXUifCjXgN8w2FlyRUrW0xAEV65sf3pmcsqpQBD74IH2tpyoGesOqwk/L1Yzbo5v7GRMzuRS/lxQLZkp2Rvn0XLVuubS64WEOdwQIuQo/yR84g78RZpiT1lvFMkw/qyX2sW83mDiDZH2syqKQUzYqZN6G5YX3oFSJDGfeF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; c=relaxed/simple; bh=tyC1IAEkAQFmsbdxjz6602Nz8czkBEgb/nRkJ79ojjM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eILTUo+1iR5YsQNWeV0qHcx56cZG+ekhp/9uVNiJ0b2JETHX98mvNVtgmsAZ/czSloCLm0fayWWlINMN0eurDmsi+R1KZcjt/pN9vQb/EDLaCfqoOe/B2HAHA0dJaL94lqnt/603n1KI8BR/8ZLwRa/iG9D24I0mXH4ctiNedbc= 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=B4sO91cV; 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="B4sO91cV" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b87677a8a96so75089166b.2 for ; Sun, 18 Jan 2026 17:12:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785125; x=1769389925; 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=9/53CE6A9/GsgJ6BVK8QZ50j6vF5XTAayna7qWQhe+s=; b=B4sO91cV8AzQnOZy6aQ9gybQvrlU9m9puVDcROmphhooGtp7bi4DpiVCE02l55WYdW xvAmjL0IX/nX0pQnPCLAKBTfOnDuEABjN/+upUPU5L/nzgAUUeswLaXOgL+OdkKup0dV r0Ld54AuOcf/Py4zWM4bvEoiYYDCzvgJ52JviNB8dTuQgBoLIzj3ACGIT9I1XlkZ8IGE +vavodh4pcxXvbV0LLu9YEuLPoUD7sgfkyJQ5dLeB9mwv1I+3M3u8UVGetoAUBiSzYkF ASn/p0Nu4fZ7/risSvC/w1bY/rV0SiaVawWog+vjl7R/x/XFEZ/YRfGtOenDNg2Twm2F ac1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785125; x=1769389925; 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=9/53CE6A9/GsgJ6BVK8QZ50j6vF5XTAayna7qWQhe+s=; b=r/DU11dnEdM151GITvF9N23Rj3TXO9HrZ9MJerOOVrOtKUDQ5jvwzT3YbXMec8tI6X c21J8dDQHosJ4KnXKAnK3D2MsurvE/d3oQ4BxaSInduH0Rq2Af12RKz2y8pXGBzoqDCU 23kprnFHE1WaJggoA+K1JUy0wAxLq1Nk8qxO1ziVf//ir4uXcv3HQ3AP5XJk1EfDt828 HG2HCvqfdtOMB336jY+2tKzkXl0YCNgbT7RdMgYJCqYeJZiWyICfEISGsXgue/qwUcvS EETQUQJRmUYjyx80se6YCLqOfRRwtCGQIScCzUO+NjWbwif3BlppHrL1d5DLokBQl2DU rltA== X-Forwarded-Encrypted: i=1; AJvYcCUQf7ABKTscEVCTmjI1bjSUJ8MUVbjXrIz1AdWjLiONOzXq/uuSBPbVhc2SRfIt+ANGR2oVJdwLdy0Bmoo=@vger.kernel.org X-Gm-Message-State: AOJu0Yyrb8DUN7TU0uk2t/ljZwNMuZnkFFxLneSzwhrGkpSTK/yTDzoW YibHBGc8pLlLfs22u/5S3ZnVOk0XvRhQfqycHu9t84GZXm5yTXtK41GW X-Gm-Gg: AY/fxX7ZtK8fI0pi7sjxlAPyyho/z9Ub1suOXxll61a8OiA0IU6n0oQbaXj77o9KMgG GuE8IMsjHRAL5exM5CasQ/M3RAsY0H/EdtJ87vweYkMhAdurnWjx9w/laNr6b10c+qYNde/hj0I 6w48gP9p8VauUppKL3LcmHzQteYfBIyehkD1Nn7/PqevZEBA6x9ZJ3oOI3oxiZpEjkWomvtRLKf 0JwznSjwmh03OGBN+HqeWpcIm00YMqB1LZr3RaBfyiUI3LqVj4Onjt6uS1F1WKOpwKt9f/uX1Mo 2bG07VvNaK1OlRzEFC6gCOWPxrLeFmwbO0udlbXECGs9wP4x4tdhpyCCMbLDrA8tu1cJy8vz6Rj VyXsPHno+nhSm0WhZCtU2OnfTn+WRI1nB+TS+yzrHxXHYokzPVv1hIa7c5UlV25zDgRpNNYLo6z orwSQgtb0jNR6lv5OFBv7RsNsDrejWskCI3OQsp0ZjwyC8AAvm1ln2Uvfm/OcBRsFu3xAmK4BTt Lo= X-Received: by 2002:a05:6402:27cf:b0:64d:4623:8475 with SMTP id 4fb4d7f45d1cf-654524cf67cmr4280917a12.2.1768785125504; Sun, 18 Jan 2026 17:12:05 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:05 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 11/17] drm/amd/display: Support HDMI VRRmax=0 Date: Mon, 19 Jan 2026 02:11:40 +0100 Message-ID: <20260119011146.62302-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 1000 Hz. Use this as the last resort VRRmax. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 22 ++++++++++++++----- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 19 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 772deaa136d7..3c535a361882 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13194,17 +13194,29 @@ static void monitor_range_from_vsdb(struct drm_co= nnector *conn, } =20 /* - * Get VRR range from HDMI VRR info in EDID. + * 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 + * @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 /** @@ -13342,8 +13354,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..67274ce129bd 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 1000 + 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 15:01:56 2026 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.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 A447E1FFC48 for ; Mon, 19 Jan 2026 01:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785135; cv=none; b=d7bQaD5iWOlTjrkhEzIf92maTw59xojY8hslMgCo4qYjlEcuvHPmpCfKRLwqOVRMRvfnkYzCPdC3B5pFoiqtXl8RqPzGDra2ff1UKlIvKetlrfgoFzNdLNuulLezx8pxEwK11JvSAbOR7wFbO9eGstSiyOzMSLaUjiwv9Bisnog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785135; c=relaxed/simple; bh=jwFnYoNqYO+YGvi58g96xzYHAWr2DZlHq923iRJmAVo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=umQJDztJ5J5VcirME+3QwDXiZ7cvKbdsQMaBvmrcPkkmbONwe8jTezUrx+DhBuJ+PI9s/SGiZMW4Uq5azMh/Jbhftd/Y4oVebVvi5eMDTLjlfr0LQraDb/ApDysEuRFoQWMo0+GNAILnChRpd8nVyzzbAzDnlTYKrH0FielYsI8= 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=cYugs88H; arc=none smtp.client-ip=209.85.218.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="cYugs88H" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-b87174fbacdso44801466b.2 for ; Sun, 18 Jan 2026 17:12:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785127; x=1769389927; 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=s0u8eLdbLCl3RDSNLAMEHYXwCr/EaTB1bb2BDCNJLyI=; b=cYugs88HEvS3e9+KGvdGJT1p6xrnqL7YIpd/FVxsOjykW5Cciyq3i1qVniKJTeHSxn ORw7A8dPtvHRVF81xr8mEGGl+ATdUde+8HQ6o6Eoj/4qnvWwIUEVcP2zZJ2Avf9UUGu8 nnAZslrR5espxEfJm7KN7b2Yd63ZPzz6X2K1iDxr31igzOqJk92l5id8dP6M06SyL31e WzswJs+HASYppMPA4Cdev2lgpsj/2hvOZvWPNau2Wx/vad25gedv/nEmjb/4Yz+I92JT bsHR8ObTJm+ev2ZCZuVoDK94PbvXdkQLqmCxwPKC1/ltBkRFkZ0CdQdZsnKiJxJY4sZy 5m4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785127; x=1769389927; 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=s0u8eLdbLCl3RDSNLAMEHYXwCr/EaTB1bb2BDCNJLyI=; b=kirH2tND4B/8Gs6pniNboFGdgstsQVsz9VbvdiwZwdu42ZdGbCZBxFhuAPfxjrEhmo VHDbmDEnXRIJ07MKZuktL6za/1VpgQOPyZ3c0FA8hAuUQehOlfKSJcH+V0kY6dSArgWc eM5eY0+LD1NiBt+gWtL/gBVEj2DR+ht/HqcMpSjErblM9tyKRFxiwBN+Hp28esoMUy3Y jK63TVR3/fmjtylDb8wF/V3q0ZlxZwUxa3rt0LtvdLcKPXhCi1jFauFevMfhzwOxTBgg 0oF/TuoOt5fhQn7wAmFeWv0g3Gq9t3KIKF/o3j2WGHD1K3VbXCHGrzIsiteR3xZ4H3Uk 13Ew== X-Forwarded-Encrypted: i=1; AJvYcCXuRfslC1DiaG1eFrK/c8pH84pGDCJNFCpUemZkaKljGgYdtySVO33IPwyQB1xR5gFmgf0/v3kdeOzvveo=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8YhRu0HNKyb36ytfp6PyuXbt8WmyZs226ibH5CboEr89UvwDM 0dvQyTjT109Ekd1R2XDV707i4Jy5TRUmwVrgLTH5N5nzxDRcD5croJZp X-Gm-Gg: AY/fxX642k9lWdX6rmGGRAL+GL0g6e6lNCd7dSaNtewEu6kUBtftDBRGczATcklGZy6 BGwevM74AA5DxeMd8oqtZe+z0vd2cTTthkGnpFfmV8TZ7TrtZ9Aol9RzfqGeBraAvWFOCnbeaBW KlH+2soOAysJerRcXPfZaEXYZubaHlNawdBRX/fnxpoA3Vm+N9sy0lznX7Jt51hDRC/Q2pRY1wh 3yBfPEzDxhL2ypvP8a9icD73Ny+rDPjBQNvVCchFULEZiUr6CyZU2fOniGJqD5ktJ12D/lb1Kqa F5fXumUZBauItenfsCEEx7b8QuTJ/JrBoawtbcvzN53DZTAxUWU01UfZsRLB1zWHmjsz2LWJTDo zcTifJ8ZN/fvf6F5l7oTSTg3dv3slFXifIHR/vzGGDeZ+myffzWHwWO/rouYLBnYVQdpLDGA4MS jXYl5vlP1o84gSRgMkEd+/tmnzAO0+jT9gbE+p7924w6XtQc+asaAaWacEdfyV04nU X-Received: by 2002:a05:6402:5216:b0:64b:3b7c:7920 with SMTP id 4fb4d7f45d1cf-65452cd36d2mr4017295a12.8.1768785126847; Sun, 18 Jan 2026 17:12:06 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:06 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 12/17] drm/amd/display: Build HDMI vsif in correct slot Date: Mon, 19 Jan 2026 02:11:41 +0100 Message-ID: <20260119011146.62302-13-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 3c535a361882..ef7e02ebda41 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 15:01:56 2026 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) (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 C3C901FBEB0 for ; Mon, 19 Jan 2026 01:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785134; cv=none; b=gX55h+A6WY+eoIGYgNM/m8BJhxrLmi01lzY+ADhSDCNGC39Lzp9Hbt1mUAhEAjidM6MvDTEf1xDK1Auaa9OKViTQe2MX3goG/mfi9Cy7cSLxJFGSfVuABjYxuY4syU3akByQ1t6ZJcutmVEkbOai7AjPtr+aY94JVZnrGYKQw74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785134; c=relaxed/simple; bh=95lJA0ZfWdWKqRQCHkqRfYU0vaqxeUTi8esIo93No9k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ZAKHj1sf0cTrDw93pKVUMah+T4hRt/V6bxzHcVB1ycydW7V5/0p8SCjVJaM0U3QOMDf9LstDNFAZdjr9kk2oRMFUNCPOEp0hVV0OyiyTRCqOOAxJhxU3e+V73VFXt9SmluCoMb3bPRWoA4y0K4cxFGys80a2IAozCnC0zunSIUc= 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=RzGeaaRd; arc=none smtp.client-ip=209.85.208.44 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="RzGeaaRd" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-64b5b68a9bdso593745a12.3 for ; Sun, 18 Jan 2026 17:12:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785128; x=1769389928; 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=JoGhByEn91FpZkY9+HAr/2lnyy1yobmuVs/gaZ80X2o=; b=RzGeaaRdtogzrJDUg1U98gsrEyQMq5016AWzDXE7yvAIxry6w8K303vQsFo+otgY1F dZF6539QI2HuNDOqyM73NYg85URzQkoh/ESBz+UBswNnOw8GdRPAhkGpXIsDNeJHxOoA Qz39H7KrUlzpAzafogLGn6YaSpVya4/j0c9QbKqpkzPT4m+VS1yPfLxqkqCfk8TVkZJM XBdkoTRN0MyE2jaJAXeqJ++fEQucRFFS0h5mVbOedw1LQi2QTT38a1JNebp6qk4X4f0T yv8mPnOGJx7BcY4x16q7qksgJjsjzB7rYRBmw5ReALJMHNTQeCqTkMybpXOAxL+J3keP znuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785128; x=1769389928; 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=JoGhByEn91FpZkY9+HAr/2lnyy1yobmuVs/gaZ80X2o=; b=oSusGBSh8LzSinhTjY/gGftVCg54sgoB28XumVGMtetZDEc1fLB6779NFW8wuEhm8u PyvxVDMXis2fTMKkTaCb/kHQXY1OMdOmuF0UNiNc+LbcrFrtjb85PMSSMeLUeLQcEHvK 1+5crfrTzVIftkGComq1CIAx4HLmbloi/qXnkgzsN88JRcWxNgO88pcEMEriKmvR+hGL WxHwizFDaoxZWzZ0LvnsQ8ZNzeaBI3SWviT7iLJMCALs6tHnV1y+Zn+H9BINm6we55m7 aZtSgiGJzI/JNBQl3exuYTLLKtttseENP9c8q949G8+zjCjIKyO/M+WKmlrztQvwYByN 8J8Q== X-Forwarded-Encrypted: i=1; AJvYcCXfSqVRsp6qAOa1ZHtGu3UQ35N3TBv2PXPX/P+sHz8rPSlZm70W4r5861CDnhOg/kR02zhV0OWSRAvbYIo=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8OS/V7Dr1OmuSxOswgGyUoJsgdMUrj+7+5zo/PFLfzN5MeiTp sjW8859JROOsLQ3vY67HfjNn5nLwVFOw65cAcuFcH1or5bJgLrWSSaG8 X-Gm-Gg: AY/fxX7bzGq7kLPdhiJT1JODmscvWo9PPLONXAu5fuTm7kUUcRRWV4XcGChwWG5n2U9 cATbn2ZhES0Uxc2rQht6hq8lB0OKF5x8JkYSCiz83mO4FmAWMLstAGQKaHodaY4CQv2FmsyIMV+ Jb7xspCX3ErCo5xGVvFHHSWbzlIwzWRApRWOniKc4WPakYczeKqDZ50nhtKnH48gC3fUh51xH3m GyIr+vJ0neRQPkjc9UZTp+tyhcJHGjZPIqAbN4ZT5SztacYZOgYPVHhp0o3uZ8Ykph2+LTrOZ0L ORSNZlM7xufa3dD8zXV+NFBIVvwyRvswj/212ky4QbqO9bK2WuIpwjVKdDU37Wz8AJbcGBv21Oo BIB72MnUpAYYl9yVPmkBhmnu75te/vpCpEA2u0/1DzUUBknENUBVEllwfAfWPapMae1rBpaw+Gq +ngJf+F/EHOjlVNhE3HsQ5p9Q/hp2KLcNSDSjIT3CyTFhvcybRKfJUVe4S7TYTo+QT X-Received: by 2002:a05:6402:2684:b0:64b:76cb:5521 with SMTP id 4fb4d7f45d1cf-654524cf81cmr4046398a12.2.1768785128060; Sun, 18 Jan 2026 17:12:08 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:07 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 13/17] drm/amd/display: Save HDMI gaming info to edid caps Date: Mon, 19 Jan 2026 02:11:42 +0100 Message-ID: <20260119011146.62302-14-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 37747f87b55a..6413f2a587d5 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 bb1387233bd8..acc6db52f5d8 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 15:01:56 2026 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 8363220E03F for ; Mon, 19 Jan 2026 01:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785149; cv=none; b=Ni4b9C4Tb+2KQrdHt7kbJxs63/UhA/Iw04Oyb17b+xif6kpA0WQpfRMZum08aphKKXcxhiL08QJnPSlDDKVGVB7Hujm6IvhpedEmC/VXqajGtOX5nbTvjzNdTkS4Fjj0UqO/grAcPgEBxdZqkGXu4iwVKdRC4ibMsQ/WR2hstkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785149; c=relaxed/simple; bh=vCeNIrpSQnHAiIFw3AElk8d1M4LVBQRi4IODP++43PM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=esOCR03FL6tPEcDctzanJFcAdowYyUqqgloNgOqjSWE50ZS7bVCqu1F9lrO5Y6aSY0A/TFowmI9o/lcHJTroddEYKAU47BST1f7JlM2AmNAP0tnIVxpiikDziJEoAPSH7/8mYhd9WPbkHffAHucrEPivsqZEbUnAvy0toElvv+g= 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=B2Tb0wV/; arc=none smtp.client-ip=209.85.208.47 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="B2Tb0wV/" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso364302a12.2 for ; Sun, 18 Jan 2026 17:12:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785130; x=1769389930; 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=B2Tb0wV/rdPtvluP2NHqPMfDfmIptdLfL7Ab3JnKh7/yRESuWc5vjf16ulIjKO7pHQ 6v9OREUeacFZHf/A5Jfql7tBN6BMZPpnOKvU/tVSqywG/CqRi+iMXqegw7Ej4G2wuFBP AFFS+hfN1U2qEzew1zi7Jkm0WGiIfSy8XpL19ezcCIrDrFKklLKgTSRTgVNkGNhL4BHr mGV+NeNwYjnj8UIk5RR+a5HqN9+GQzOFyoq4O7jEa1VofxplNky1bLIP4IVJN89O9G5+ iJILHNh7MdOGcVFFY3BQA+UOUxh2cyhoH83d1wIsp/M8iMjbdpXQTUag/CUSH1DSGLvh Lv+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785130; x=1769389930; 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=X1eqijhTEpgOdLYz61ogK1pSvQmfCVc8GtKNttTa761Q88zBrWGBJ0zNne9RXL/E5G lEbTWI3EezXN3BwEqS/xuSuELUgZuZTNQPpM1xXZ+HrSE4fH7FZfVNcM45tKHrXbSG0R aLQJJR0e8rkfBKxW/jvQ3w0xpMowYPBQYvAShhNwcMIFGQGqEc7p7u8+1uxBiMecf1t8 QP5DRUtI9N2OiPWVkzgFj3vnFYrqb6BWyJlN4oCLtIXTL+EfsK+AfqA7+ncmnh1d7yvR wRos2AMyjh/wX4Amlwx9BYKl6LApGlyDNMHuuXseAu6ELwVUBYb7brCPg0vLbm5a57PJ l7sw== X-Forwarded-Encrypted: i=1; AJvYcCW7j+U/i5DNb62oQZTyuSp/Qqkvm7Q/tqYyYmF24+G78TuHMSU2e7EdF2IclRddV3VY5euJrrWXG5PhHqI=@vger.kernel.org X-Gm-Message-State: AOJu0YymGN7oP8XsC67mPcZ3PYjcHKMhw/6WI4w2ohMDXsjh/t3+DI1P Uxy+f/5CzOZUohvESiBJL0F5nZYKH1ImtqZo1W5s22RF7zI1K3Stzs55 X-Gm-Gg: AY/fxX6qRiNWH3rvAo0Z8IkHA9GGSYfbpedJL79oWg7DWqTPqAkwZHe9HLFwJ/V9by9 8APrEN/iEb5tHOyUrKUQatEYVnCv62qlznWEyf/sFyMkXyhvApVGyQ2U4hOvtcfuC74vSK/yIkR 7GwMwjFWFOJCoef3t4EnbMAvcEtlm2Oq013nUZOZzqi6E2eN2r1iFCUtysbuO/H9wjM9/pkoU1E XQRuAolUnU22j3+VhtnEi+t83OCReSG3ab9F/42GYJ8BHMBbfhMq9drT+Dw468mlfwUtIOhJPOH c5ZM/ahoPklQgnCDkWKPO65RdyHJ4v2d4O43zzdSCQ59gz8rRYUbBkQrWM9X/J1MYpdv05mwogg RouORoM+hyhAlRmMdqen2rcpsddmSHCn2NXegH4CG/Gu+7ll36zVNdY5WAp1/mptH5rV5fApAvr /8yIYKtmhw0kd3zCuZ3bYqD+zCgfSSvI8Gj4YhRCvrHiIoeyyUu1K7WpJTltkZr2xH0WLaw8XQC MM= X-Received: by 2002:a05:6402:350f:b0:649:5709:aafc with SMTP id 4fb4d7f45d1cf-65452cdaddemr4632382a12.7.1768785129599; Sun, 18 Jan 2026 17:12:09 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:09 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 14/17] drm/amd/display: Restore ALLM support in HDMI vsif Date: Mon, 19 Jan 2026 02:11:43 +0100 Message-ID: <20260119011146.62302-15-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 15:01:56 2026 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 2E7051F4615 for ; Mon, 19 Jan 2026 01:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785143; cv=none; b=hmWhQJrfjeEc70fh/GTgnBu1YZMk7zq/XIkFrUUPNEC7JYuJmx1C2bjs0oBjAWrtBpp4yrasPHicTd8lWtz4y7Tkkr9a8f8ROcg0/wG/geDz89X3PBdo7Q8IxGYVqurrQCgria/HWUfIqnPiOOftB2pBmZOofWPUiFPCh2X7FKw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785143; c=relaxed/simple; bh=/ORgbMEp2tKkgeStJ2o1swKX6ZH8EHkyncDudc7Py8Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hoMZVrKIxOzz1SBt5Olhj0Z42fL2ExpcgjEUCqtnmmFPgZdx2e0k4tKaVMzfRK4A4s3t3qq4yF9b61vssT9iWP1tK1LGEX9jJxP5eEAikkvCkmpe5GvKs2cXPEKSP6Gcof/P7SchIhODoaWtkehCPauGv1bkoAcEEqJFKQxE2h8= 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=imUC2yzW; arc=none smtp.client-ip=209.85.218.43 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="imUC2yzW" Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-b8712506a3eso22993166b.3 for ; Sun, 18 Jan 2026 17:12:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785131; x=1769389931; 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=imUC2yzWjQFKuWnZhv6wvTw0Y1amgYBUfwz2oPbi6MDKj8TWmEm3F+i4ddVMNorgKY XB7grF4mu1+j6fCW67TFWLaf4El1EsYtL40L+L/tZi/k44G8eNKeZqmrY/oumslA8+o/ KChoSUWfEeEKttiLAUgk0TNxNQU9NdklhrsMbL9CW6sBjN17NT1/ojaTj2/D7tMz7aY9 eiGO1vkx6s3Eeo6H+7p7R9rlqpUCVVpZKgl0t1kDT63c+t+wt8dQ2FRcglnDfjLNMR0U l59VjdlUSeUDvbXhPrtSA6X0IrU7WBQLp4vgTv6sT9CwsJnd/UCv5qR6LWXdPQcs7201 67rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785131; x=1769389931; 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=R67iKkVJSOe2fd5yHDaJxuwoJjkHW6TESRbnnYqjGK5oCDyuLurk1JGYSE+cRai48i YrUHMhvw9dH1NpVpoC8l5plfnaFUG3/Dd0mNyMGHmQXK+ySWq8P4W69flL1qRqoN+Qd9 ixg83+VaLrZGReF1R3/y0QqmzmjAX145kLl8vBJOycXUX8PWyHuBmQg+76nRItacW5ns M4CM/qfV+4eozuvkHUYjxtmZ/0S1MlhjFbCkUOvV4bNlQEMXCjLsbJrGprMdBBhY6w4d Snf7txRg3AoJbkw5lRt16b4JKjH2SRTuZo66sMvQPxbbhLgNvtaTQLBcu6d+SApOmD17 tVpw== X-Forwarded-Encrypted: i=1; AJvYcCW2kCiqezSkjYppQGZzO2RQo7xD2+QJ5IjfcxzxkG1w0xLUv1oTnReFAeMjYCBxA1l5jABmYN93BVAWhGU=@vger.kernel.org X-Gm-Message-State: AOJu0YyJIEEzTnysmMSd6dKk4GSZylX1BT6gg8cLudgc1x7yEKqenLFL OwXuF6i9hNuP+3aAYFSGfko5lhsZDj/yhQrljoCQyvU/OkA4uHOKxCg+ X-Gm-Gg: AY/fxX6EGmbkUKTqzFSYLeAYP4PC1fY4OgVEulg1vJHQMzvrRJRVdbBcmmUSua8H8hQ snCSwjJ4rCBL6gnXnVk5HAVXpJHQ6rLnqYRDY31ZFUxMqhnTMC8XRQN3n/pqJlANNZjM9AiZMej YHmGdOje/G9U6HMu6AgU/aZ2IzS9E5/Q97HVlQ43AVmRaEeDQ99IAzJ8gRI/zZ7lh8JfjR95oB9 8/j4roY24r1iy6K8OhHecE5+avvoLceHKxjLmU2wdVZO3C7PiWNKzMJDYKCVt9AzC6vYjuNuNK+ gXURovUFl6NgecZEHNKKDnLSn3gvZiSGae8FMeFpwBNkIsLQMfr1Kuv2ZtxlSR1bPnw9+GxZSmu biYVTSLexVGIv4c/40imA3uQrjUojLRzJBQKw1yHBTTaVCzmrE3Xv8WwQDXBLeGASynFhaQFTA0 wl1+UkvL7Grc57rzKYCNLzn4dcSIJMkMYSGqKReNjUKI1IZxi2YxlIGeQG6/rqe7/+ X-Received: by 2002:a05:6402:348d:b0:64c:9e19:982d with SMTP id 4fb4d7f45d1cf-654523cc85bmr4269853a12.1.1768785131391; Sun, 18 Jan 2026 17:12:11 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:10 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 15/17] drm/amd/display: Trigger ALLM if it's available Date: Mon, 19 Jan 2026 02:11:44 +0100 Message-ID: <20260119011146.62302-16-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 15:01:56 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 8FF9B21C173 for ; Mon, 19 Jan 2026 01:12:16 +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=1768785143; cv=none; b=ptqdJPgDbzZLSaTn/5PnehUtr/ECVvd7A3Vuv1PjVfLvlvrUv6YeWMbwfLjfBuEvjgab/H6Lfnpaj+cycb431xc3k/9L6jFCXCL16kPPsZ/cW8/Ah3hY9GKoQpx8s0whzck3Ao5w7jDvEPjDbP7k1epPkjQZp9C63+iogRPFgvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785143; c=relaxed/simple; bh=o98wQGCwvN2U45TV4V+i5xjDjdtSYLkxczgoutQhILw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PrWGvFzF91kv9VAfClzcWEOMg3D2A/phv6gL4GDCNMHACPCzdGWQTssoSzzWxo4+J5LFh3O8YEPfOXv+v3JT67lbMfwoG9wWLgLvAmIA922py9LZi4l4RXw0Su9PjQSX8/pfH8tnaHnkZMGAIlcytoWMa4u12yYsx1cG6bv9OGM= 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=QZcyue2O; 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="QZcyue2O" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-64ce9d80429so430640a12.1 for ; Sun, 18 Jan 2026 17:12:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785133; x=1769389933; 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=1/v14AdAvKdOYKZOFFftRQMfCxKt3hfYMcPs2TGZb9c=; b=QZcyue2OxiFYIFBbDeji1uRRvvhrrOcGV+KJ1O+pwOjRRJ+pNAhDcK0e7rzumxD7be pVHMF8W+NLBzEH8X1eQaXpkDXPbFpQVtQitqXk4sjNpyosd4ytXGv0kQnQipNVVFiw4b 3uA76KjLet/3U31qZlO8gbIgtgn7qnmMKnREDc8/+kHucVlKwGabDnFI3awIZG0WYYQI dY7McxVNiqa2R+QuTfqg3UBvxnnhmoLccN1Ym4QUC5QpITuq65rTO+BKfHJV/7F9StZp 4ECYbFfEMldCxd5+gh3d7lkrKNEpwoGkzZUVOHjZqqwebv+f+fE3ixFEj86xEodmgC/5 GVDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785133; x=1769389933; 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=1/v14AdAvKdOYKZOFFftRQMfCxKt3hfYMcPs2TGZb9c=; b=H1byZMbltA8nvGPdorTOZ14ci9PKf3a0CP7OQs/sV5kqmXDwyDbvWQcH0LXt7nnPyO pr9rsge6NYzi+lhd6G1NfQknTLT+SsIJtojJwmfmas0CuvMAa0xGxgkGv+/aMoWjObWW x/72sXcBn1g1g132LpFJQrbWmeBK3VKntSD+Nmt/xsjUZu9PltPgPh1+ikXOVsrdImdY vfqYbOnLidKWcuC+Pg4c+N4ZyW6wziN6qErDUfshr5Sh3Jy3SoL+I9gKhWrRPo9HLRkK u30Jdtw/TSonYua/thDMG1Pih4GNagEijiUxAGPOdzE6raHYMwNkGSImSytSzvzKcv0T 9SOA== X-Forwarded-Encrypted: i=1; AJvYcCXszKev8bonUI81aUFaqQWf+IQ69HglkHgbLZ/jNcaVcQPF6wM4lA3hfxLfGz2+BCNXAGvTJwo2MqvVROU=@vger.kernel.org X-Gm-Message-State: AOJu0YyAFc9yJQ0Kja2HP0udwBGg08q1hun+tpeBLu2tvft2vIw8dywd mNalaJav8idwfoDbsyONhRX+fVqkEIpeTEYXgftcUX/WambAruZ1zt8Pmi3Ypg== X-Gm-Gg: AY/fxX4i8Ptr7dKX7u+Z9Yz6u5z/WEft63bh55Jybd4OTa/ZKPrDM+TT8E6LnjYLxVB D814kPRrHhdzHk0AFXl02KDm79KzUBM8Ryo3UscdEj7yblwaSKXdHncFBl4z3U5Y9B3kN8NUxdN TuPBaoPeozM0ocI1e87CX3KpuVjx07HjFGX5001hJx+WhH/aEZS3ce88OfyScV3s6TzH+Pwr1mP rLITo3nuz9Q2Qf5JcL3Faz+5BeEiVGXVzz2m9b2NT2+24zcvYoH17LPAAyrEhHmv8ZTvbDsHLoI Zq7w5FA0jYBpkL6O8nac1ZnUF0Rlv/jwqYFJ0Bz17e/i/xBAoq5qR40GTRHbBW2oshljabcEgGU w+uscLvG9/RvXv+lYkMlf2w9oMExrmeY6zXhGJ2N6cbdz3i9l1OLwxeZ4FcD0aN448kUiJNXHX5 xmVsapeYeSN2Xuj1iC+BPfFuH++fiQf7RBVYu7iqv6K8PqDZfWvzfU7ek2UKGye60th7sVicqzP 0s= X-Received: by 2002:a05:6402:510c:b0:649:b47b:2ef7 with SMTP id 4fb4d7f45d1cf-65452acc99bmr4627883a12.3.1768785132818; Sun, 18 Jan 2026 17:12:12 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:12 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 16/17] drm/amd/display: Reintroduce VTEM info frame Date: Mon, 19 Jan 2026 02:11:45 +0100 Message-ID: <20260119011146.62302-17-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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. The standards for RB and RBv2 use a fixed 160 or 80 lines for the horizontal blank period. RB v3 can use either 160 or 80. Use this to detect if the current timing mode uses reduced blankinig. It doesn't hurt that the new functions look better and cleaner Signed-off-by: Tomasz Paku=C5=82a --- .../amd/display/modules/inc/mod_info_packet.h | 4 + .../display/modules/info_packet/info_packet.c | 173 ++++++++++++------ 2 files changed, 116 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 67274ce129bd..7bca0541443c 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 @@ -49,6 +49,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 0db2db7a197f..42a736a5509a 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 @@ -48,80 +48,59 @@ 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 #define HF_VSIF_3D_BIT 0 #define HF_VSIF_ALLM_BIT 1 =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, @@ -611,6 +590,78 @@ 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 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; + /* + * Reduced Blanking standard defines a fixed value of + * 160 for hblank, further reduced to 80 in RB2 + */ + rb =3D (stream->timing.h_total - stream->timing.h_addressable) <=3D 160; + 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 15:01:56 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 907BC21C9EA for ; Mon, 19 Jan 2026 01:12:15 +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=1768785153; cv=none; b=Hryrta3ri7kxEPmhia8tpZGdCK0zChkHzJFzfOEQ8+eFYvlsE0KE39IrEPfqMmMyfqCIcA2pd5I15YzWnl/rKZxAluld4vitpzluiHMv3r6DgXeSDMhazRBQ4Gu32W9VDI6cTtjnbCzLgQXM/Mo8rl52dfBLx0MytMxQJdvMSWU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785153; c=relaxed/simple; bh=IiY4wM1QbitUjJyz9oF0qt2+x2OItyme+2zj/R8nQbE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Et0vwVRCDZOgJswPzyMO0g/GI9SLjmoseZTmko0bQ8Xec3MYCQKBEjTeMai9aClTsfpZV1RK9NpEe4UfMCvnaZ72lCdzQBYD3xz7nW2Gb1SLKhzFjrW2DAlBsg+ll4PZLyJneVgO5Ha1q38onnX4qCM4BrRjsU/+wz2VZGV+IG8= 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=hUTHmLbI; 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="hUTHmLbI" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b876b5c69baso41828666b.0 for ; Sun, 18 Jan 2026 17:12:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785134; x=1769389934; 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=LmS0ptEIRfbi9CAZ3uGo3bYbHVKnzDLVy6mHiQZnvAs=; b=hUTHmLbImxg0KQtce5hxJFQL8fGLcsUfilDKHeE/nB3Cb9s2ZV3Pf/AfKcVfoofno9 J+zo65r06rPbZC8Pm7V+NWrCDBU63op0Qeb695V50WuWJ9tQDfIddwpTyLTcdCfUzslT TaM7fl2CikILtv7CGDcDOtiXY41IzdDXtMSKmPxUh0GcE4sv4FhsuUKxU3z2heJCgi3e zjpZqYqPc8MUo0p17TE8sDJbpLXjamY8grw3HU2mnAywwOlSXZvk9qG0imG2NpJj+jV1 TlLAZS+7YMSwMsRBvg0Zi7xCwroQojJ7XodyEu3nwIffii6rKsiT4bvsAvVn74l7QcmY gIJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785134; x=1769389934; 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=LmS0ptEIRfbi9CAZ3uGo3bYbHVKnzDLVy6mHiQZnvAs=; b=vSxJTX9gsFiS7zhN2DFpI8lJXxGcuagzJhvLdX4HZ3SVv9bi0+xt8hLtUgZADUY9Fp WD8f/uyuFrzIuFZEnMBwh15pV0aeDxXOzjbMCbpi5BmYZEjSOkXwjwh0+uwgQzcpsRBe ORt8sNt7BQau5ZHFBWplsP6kvrjARyZghJGlxNd0+if3uZlxRTK+GznznRRv4o3WZX+V uOJGAQlIC+JGQThAiB7H27O2qLiVl0oWcabPAkHn1R4XxVodhis5iChLnCDwPEdBzexG q3YsBpa93jincX5L3XSpkZjgJVa6l4X00M3gxpdQy+ERQDq2lU11suHNfaavwmAd+Unj x/Eg== X-Forwarded-Encrypted: i=1; AJvYcCV6Pi2FwlnstPcK+HrHllk5WfsShF1uAlJC0F4fEbKE7bEW9BJWkteySE+sYTFXfPJC6AVOuo5WMs05IIk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzb+fnJKCqALB0PsHT6oM76+aa6QAB+BbQYdhg6JDhnxwyYFqVa +3daZlWA6gEoYt4IdaCSbnAysMbpspU32lv5lfbO5GhI8tcCoHHAuDbr X-Gm-Gg: AY/fxX6oqsOpZHeVcc9sbqbGFnKNhP+rNVVJCMZwgIK5ciy8ydyf3q+zMfrrLLdIRyX JOoDLz4c3Xht8PNKyffQ5ytqt2JOv8dTh85UamtzI60E1EIFcMPU6N6yokJ6iYRTFYoW18LXrIC iWBCP83SiaGGcEtOi8EwNI8GBm5wdCqroqrG8k52yW5lL4hvdAngzDWSMO9JSNGl2G9xBO+CJHb eowRmkh1iiBbmtopqJhcqd70xsDkUE9oE6+a04dOzn6CixReUHYjzXSD//X43qfatyKEdngwZIC tMbIXLKu1tX3qwT3s6IcwpjGVCBp/bmLsglNRp/aF/nYphabTkuC+q3e8NPbKBLyzMDat+q5v79 RkF3tZJyL3yFe521qVHnovAk2Iw1CJlzaEhyECwrxanQpaF1NK/JBy66Pju0rPs79Zj+AzPyoza VKTp4V5o7xBq5lJPYMjjUqjoiDYjdizH5Lylzp23hq4qTuS6UFYmjC7BV3kYlif+xY X-Received: by 2002:a05:6402:348d:b0:64c:9e19:982d with SMTP id 4fb4d7f45d1cf-654523cc85bmr4269887a12.1.1768785133994; Sun, 18 Jan 2026 17:12:13 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:13 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 17/17] drm/amd/display: Enable HDMI VRR Date: Mon, 19 Jan 2026 02:11:46 +0100 Message-ID: <20260119011146.62302-18-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] 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 ef7e02ebda41..75c3c8ad07e5 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9612,6 +9612,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, @@ -13347,8 +13350,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 7bca0541443c..3fef1890a3fa 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 @@ -59,6 +59,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 42a736a5509a..e6d3398046d5 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 @@ -686,6 +686,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