From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.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 9BAC22745C for ; Mon, 16 Feb 2026 16:45:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260323; cv=none; b=NPUbZGQoIp+Wsx9Kv95W0L4OYtHxHpN/madXyDVR+Pqvd4eA1i6ZKuQLqJ9UuP+7KiaTnktoQXO6TzpwHUG/1zzjwPw7W7vdkUAX6nCVEdOvsB7bZFURY8v9YKkRrPhgwjixkv99tO6wPFE0E943BVDq0QL012eZU8trr7mkQJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260323; c=relaxed/simple; bh=7BBTeGyZhz2VxHMcC7YVV+GJJTnr59TC2rhCr+PSBUg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bS5/8xNx9JvfsJeL8ThfLbqDCKV44rz8tnfdpO0110glloFafpFwdWPP3re/mQlABeOhpUBDB83c20KfDPn/UTyzJTpuvMK1p2PMlqaazwAYPiLoH8D12c5YLfXR1252MTDua7acrJWZ+eQcJNXxwz/Yn13Rcg4yGUHbD2RVyXQ= 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=ngzzyERo; arc=none smtp.client-ip=209.85.218.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="ngzzyERo" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-b8fc023934dso18310866b.3 for ; Mon, 16 Feb 2026 08:45:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260321; x=1771865121; 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=W7wlOYuiBDSWiVWpYqNMTtfR05pQbGrwxiWFvefDzRE=; b=ngzzyERo9rpX9rh260PP3wZw466ueMYM4Zhv+4249MEta0vIkM3I+5IbYdrhDmU1aG jx8EZRa/XAnPUjAgXeWS0WmHbivOMP+PH0RUbpXpWEbVg9JejcuIvXsMWaX/oRUdxXY9 QVS9ha7Uzua5j3PPhpjHRj6KT4/zVuQqNzT68iegW+VOJBVfBP5FyBsLv3xvJb1/DJqO p1nDFp9ioxScncQ81OPJOGaX16bLPBGbUY5M8mm+OjNLCJiQ7Zjme67eLnNSfB2GOd6D k9qlVShzoWyOa49TLvoiO7f7JCInk8Mn+yZyNPyomH1AT553dVLjiuqFX+6/ozteRsBF wAgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260321; x=1771865121; 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=W7wlOYuiBDSWiVWpYqNMTtfR05pQbGrwxiWFvefDzRE=; b=JroT0OCCBqFSS7yiwEXq4P+ZNjCNXDnAVCfxCyqm1Kvhb1tkjOb7oqjxsPIM+ttysM OCKCEoTcrg82GITHFXMVbJMmSX6mRr/Ht1eaEtjt8ICDexRM4bKU3Z7SV5MriXduBnbd qjr/PySV92VcpPzBtCsbYx/QOYQ8s0wIm5ka6dOno4w2Ulcj/XGaK7zVmmbL7HjTQ6Dj Rc4zxdbXb6wTGK9wV1HLih4jkZmyhRoUClsC69g6tmL4QAb5vPIf944F6zoQnY7ys149 LK+CAml+rYEg/WXesyx/fkLACZBan0vmuKlNGFYARgSwoHPilZF2pzKkOawuwmC94dzs 1Dug== X-Forwarded-Encrypted: i=1; AJvYcCXeXiQ0DVuZbkhJNhmK2qhdy2Tk/o93EtvgHrpfVTzI1REqRfAS4y9q87cc2ih7Jjn9SNzo0i9r7G1sU5I=@vger.kernel.org X-Gm-Message-State: AOJu0YzJvuAhv7prG04oAtYLi55SGq2DzLQ3rk7n7l9jxFT1PPXbpVHN oyO6rvKq2T1H7uYQBm2DwSvUmkG15UdW0640S7K2Vry8Ln3dLuZmfqzi X-Gm-Gg: AZuq6aLX+6BBGPbkBejd+2YOiFEnYqgrDWHlEMrn0IZFPGGKfRvYClKJ1xpxfFzFdgN Lv/T0OTzsFvnRmse91y/b1wJdYcgtOqSEg6lr0jWkdoNAUDj2v59NQ2aaX3IQLcZEvAobSysdqt Q9K8ETqFBvnNeR4MHbz46p5SuA1+CHxou6sk7DAR4h766JPcLNJ6JB81RM+mUZxOcuQoPoSTQni KY5RcGAyr58iNynP5Wy8ZfNpw0XugZhQSkUMK6dJURkSMbFkdkwGWR+Gz3cP/ak2ZxnRhIRh6PX ZaI5izZw5FzmTArwFSMYy3mGf/s9zXcTH6M34LFP5rlyH4pAcc2YtgzvGK8mDxaYhNu+jtJWFTe 6/jP2D27fzF3hZrFxu8NsAxykc8Q12XG3IvOlZAeCPxMgtEUFmtmPiCVx+edlX+1zQ2eePpDUdt 091OUOLC4ctvUZ73G9byT7CRFP7x7p/Y23JpAA538acL9NStTa7gEY3aTe3FAAgJMc6IWoUw88m 6fq6Ti3gAl7Omo= X-Received: by 2002:a17:906:6a24:b0:b87:3c3a:cb7e with SMTP id a640c23a62f3a-b8face00ea5mr368539266b.6.1771260320644; Mon, 16 Feb 2026 08:45:20 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:20 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 01/27] drm/amd/display: Return if DisplayID not found in parse_amd_vsdb() Date: Mon, 16 Feb 2026 17:44:50 +0100 Message-ID: <20260216164516.36803-2-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- 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 12bebdfd7fdc..2d770ed98871 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13162,6 +13162,9 @@ static int parse_amd_vsdb(struct amdgpu_dm_connecto= r *aconnector, break; } =20 + if (i =3D=3D edid->extensions) + return false; + total_ext_block_len =3D EDID_LENGTH * edid->extensions; while (j < total_ext_block_len - sizeof(struct amd_vsdb_block)) { struct amd_vsdb_block *amd_vsdb =3D (struct amd_vsdb_block *)&edid_ext[j= ]; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 F2892255F28 for ; Mon, 16 Feb 2026 16:45:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260325; cv=none; b=AdgZA5V20Q2m8LF5bix/Dpt0ulcb9UMsCDR+Uvhhgp3WfMrN4ULq+MgdymtoeUSzISfzFZss0ktNriaYM/phEpJyUDyTS7jrMtlqVSu89Gm1v2QIM3kZ4t+iYKVvsLGIn90EF/nF4vznVV1vgwTIYWfUGQhIevI4knHO5eiJ1nY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260325; c=relaxed/simple; bh=ge376fZngo0uEz8jcG4h1tFahkAHHnPtZ3dtQxp8FI8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k9r75JRhzuzz1HHiNYwCFTCztI9+otvL3BD8MUe4P8F3LtNitKxufu6FSQBgwGt0Snrt5z0827aS+9F3S59nFECDX2Xt+ibohkCCVzTIRASujDCrqFvAdS1LDWrGM47GRYujTwOOrmIBkYZR8d64in8QEJYDiWalZru30gWLDSs= 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=KsESiKk6; arc=none smtp.client-ip=209.85.218.54 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="KsESiKk6" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8f7fd33bd2so48120466b.3 for ; Mon, 16 Feb 2026 08:45:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260322; x=1771865122; 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=ZnYsqKjwkdi7cukTOBwMkwqlRWnCwHpOCDkCCBv/1xY=; b=KsESiKk6ZtlKNrQxuxN+4xjuJhEeEkvSBML6YynB8ca/FsqwlnJY9rn5tf+Zr8OR3f NBcOkVdiZpylR8omClKzfyS2zVKbF8JYDqKgn/o67oLuqAmSEV0Vij9XPJlHggiVOnGr eaPbeuehszRFE5J2w4FpWwsxwbZst12SMwvfgvkhyQSxIwmTMscrcCqBcKRWxbqQSpYJ nRedpKhp/BzJJddIN6QyybxOJgxpS6qFGluXElaAbCy/OLA+iwlRU0ykS3EYX1DkmZdg 1kHbq/7lscotnX9ye3FdmGNVGCihJMpgkJ3mDqCobXDFbVfdq6WwaUJQPT0JZtXO6ROT aK6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260322; x=1771865122; 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=ZnYsqKjwkdi7cukTOBwMkwqlRWnCwHpOCDkCCBv/1xY=; b=lR0xWLa3v33ogH04uthjPcdXzvhhRUe2BZV/o/jgAb6HycKIJJ6sLS2thHASgca4Ct fisHOynS7fAHVzkiPBdvws3KY5sV+CTbTHRYFddEt77MXO5v0M5sxXMrnJK9v839PC8Z 7nUKzmzVUwyO8qW8k0W05QauAWpLfqc2cjE01Xoo20XOyZKQHm0XSZ8JuYVmBUHLSY/d Nr+uIoyFBELzkhv+6aV1Wtwd0VySdeeFEhK6K5vA/tmHvv5QZ8dGMqldHc1rWEUYgd2y Ll1AVeS9ejRfafrphRtktJjjQjexIbvvTYa/Z9BcUqpUNxEeEhX0D+cMYuRg2NAy1wgq lmhQ== X-Forwarded-Encrypted: i=1; AJvYcCXjbz9d8rcP8mK8Ssjz3aQZWMVKpD5yJH7lK4DLmJrcoN4wNN0T0umBI0TltdtA+pJB/xWcInOgeFq+rMk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzwre4VH3PH4UOhYz9uKzWyuhlMBjTOIGN6d63gMTTv4pUTZ3qC Y72KFst1K1NRbfgJgw3z7rR8zUyE9vXDfb6nsoXjP5cpDE3z5GlHfS3y X-Gm-Gg: AZuq6aK5F/mAhb0hcwLN2FnNzLONnFtWw5twV+2MmMeRCrAE+o+qi8N0Vgh9KLaJcN2 DdPF/pYnagnMiFanxjKaQN/wF2lZJWM5jB87W8fA6uN5OYpJxtehCzRWWY8IK1j4tPc0n/HeEOG iZzq0rxvLEuV8ZZcFs9XiQOeDzbE/vuGE2+3UIy3ph1/tdqSIJhvt0CSXW+hk2ZNDLJtkpI0MvG WWIn36y3JXbTvvtZ1LN9TdN0fOCofEAcl+yjI1Hekty+H0QKXT1VYmlHO0zs78HcY6melZIt41/ c1uQ+P4USYGfubgKIjPRn78t5H58KBa3Emt2cNiHQcnM60foJZkjO3iXjv7blyVS3zdY79kbnGd sIcGFTAMfAP8piIffViVdlGyHJP6Gn5LagUG7T/YYvx5rVN4TE7TpSuh6L7rVuMLsbWonC+ENbA waRIiYfy2Wubf7qI9JnaJxJw2hAA5CacfK2aJCycI+6X8fJhSGYoaG0YIC97GDe5VpD0hgPBvKD 7Aw X-Received: by 2002:a17:907:3e88:b0:b73:59b0:34c6 with SMTP id a640c23a62f3a-b8face510e0mr348057966b.4.1771260321971; Mon, 16 Feb 2026 08:45:21 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:21 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 02/27] drm/amd/display: Refactor amdgpu_dm_update_freesync_caps() Date: Mon, 16 Feb 2026 17:44:51 +0100 Message-ID: <20260216164516.36803-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 | 110 +++++++++++------- 1 file changed, 69 insertions(+), 41 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 2d770ed98871..6218ad911fde 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13144,8 +13144,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; @@ -13199,13 +13199,13 @@ static int parse_amd_vsdb(struct amdgpu_dm_connec= tor *aconnector, return false; } =20 -static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, +static bool parse_amd_vsdb_cea(struct amdgpu_dm_connector *aconnector, const struct edid *edid, struct amdgpu_hdmi_vsdb_info *vsdb_info) { + struct amdgpu_hdmi_vsdb_info vsdb_local =3D {0}; u8 *edid_ext =3D NULL; int i; - bool valid_vsdb_found =3D false; =20 /*----- drm_find_cea_extension() -----*/ /* No EDID or EDID extensions */ @@ -13226,9 +13226,47 @@ static int parse_hdmi_amd_vsdb(struct amdgpu_dm_co= nnector *aconnector, if (edid_ext[0] !=3D CEA_EXT) return -ENODEV; =20 - valid_vsdb_found =3D parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, vs= db_info); + if (!parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, &vsdb_local)) + return -ENODEV; =20 - return valid_vsdb_found ? i : -ENODEV; + *vsdb_info =3D vsdb_local; + return false; +} + +static bool is_monitor_range_invalid(const 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(const struct drm_monitor_range_info *range) +{ + return (range->max_vfreq - range->min_vfreq) > 10; +} + +static void monitor_range_from_vsdb(struct drm_display_info *display, + const struct amdgpu_hdmi_vsdb_info *vsdb) +{ + display->monitor_range.min_vfreq =3D vsdb->min_refresh_rate_hz; + display->monitor_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); } =20 /** @@ -13245,13 +13283,14 @@ 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; enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; @@ -13284,60 +13323,49 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, =20 edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() =20 + if (amdgpu_dm_connector->dc_link) + dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; + /* 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; - } =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 */ + 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 && + drm_edid) { + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + if (vsdb_info.freesync_supported) { + monitor_range_from_vsdb(&connector->display_info, &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 && drm_edid) { + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + if (vsdb_info.freesync_supported) { amdgpu_dm_connector->pack_sdp_v1_3 =3D true; amdgpu_dm_connector->as_type =3D as_type; amdgpu_dm_connector->vsdb_info =3D vsdb_info; =20 - amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; - amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; - - 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; + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + freesync_capable =3D copy_range_to_amdgpu_connector(connector); } } =20 --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.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 359EE1FF61E for ; Mon, 16 Feb 2026 16:45:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260326; cv=none; b=b8X+BoZAMvXbn7V/QZPmF1wBwK+Sf4LegIHa+qT3R/ki7Sq9aytHV3XrFjSpp9wNPTxZyfUWxm8kBt/jXz4lHpa85bAHNbeP2qnG6eQOhQosd6MxxyrWt0T7eDMACazkudGuZu5kl5UvU7PkljHP+0Vali7pK53tNCYVSzVHSvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260326; c=relaxed/simple; bh=RB2jit2OJuLb34gSBjCz0pp35sTxAuapkpuOBwhIXk8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uxX0Lm6q7tUAgYJpYq8zxnLGI7BwWEW3rRVh5rgQcD/UaWyA2Wf9qL7zb+MTPzeJm40eK7uIRqVvhB3E+rT2IRHj7XNEPzYLu0wAIovU4OeMfceuHhJSIyFVnZdcH1f/flRWreADRW3lJmE30c2MYOo5ZujjHeNORHEXeq4RVno= 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=Z8OJv8dO; arc=none smtp.client-ip=209.85.218.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="Z8OJv8dO" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b8f8d9b2c50so27319466b.1 for ; Mon, 16 Feb 2026 08:45:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260323; x=1771865123; 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=CU4lePUCCJ3xj5OwOvFkst/VeREzzL5189XbX5ib9YU=; b=Z8OJv8dOX7+2jDtlQ0hAdhv5Aql9L6s9uGyM6KQgxK1pbhOWkjdNZP3GU6POjRi67Y W9yMnl6dVglgRKFlVuihg1xFU91/kAGv90ZNNIZlgdvB1igVRTr7ih6ZiWMnkoDYVdpA HAQeNdCO0HYrsWeDB0uDX/vvGW5D1Oa8npx+nDHDwny4NJwmTwXDcDXYyn86+vPSNtKX Arkkwvt68OyM4BsNPsCkYNPV62Ov0TNcYe0a1DnuN6I7kT5ocUEhpFEykcaRhka9JjYG APZd7w48sxNuX7T64vRKxMSr5mr63ia9cD5TPIWVm0i1DSxJUKIXPQNpvtb1fxhF9gQ6 pCeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260323; x=1771865123; 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=CU4lePUCCJ3xj5OwOvFkst/VeREzzL5189XbX5ib9YU=; b=wZW4BW4QzvZe4RDL3C1MIcEClab7j1eniO3c4PgaYhbuNZV7IL+uhEzy//TaP+UmbW Yn8gdyx1cqwwsy5fV3fEDYOShVJ1U5dQh29scIlL8Vu8JBo1GXpd9vutZlm4Uh3Cwd/q iSqam2c/NgJL5uI0cglp/96NylgP+dOAW7pedldKKO8JH+RoieAMo4XuRV3A6Jbb7fn0 xDyaw1On6E3Ej82M7qwBbTMw56EHtv4552hRlS6d5RDV5siI3AEHmdWXO24K9WSI9t+2 /D4WMi4heJ9Vdft673g3DiQBYdsVRYtJimiq1csYxvdSNDQ3OB2S7CIcoTrDUTXgsIxm E4Ew== X-Forwarded-Encrypted: i=1; AJvYcCUDfxaugUMV9UzQc+M8JH7ekGvpznxXkXVNGoNRt4Wm26NiIm4LECFBe2SvWZJWEB4g4I/sVctRwtkNqL8=@vger.kernel.org X-Gm-Message-State: AOJu0Ywy+4TLxt8Ob3Up+LBmYuKzeBEPJko6oT4hy1uLA8jyU5eXepiY Iodwq9YyPKpWBgiZ3IfXbouSDonlJRN4JDEOt0RCtGM/xePyJCsiQK4M X-Gm-Gg: AZuq6aL4omqu5t1vSEftK9l0InZh24MbrDADJIx0c9fpyWfYpadn72W62Nqq6YNHhq+ wWkd+AVa0vHl8TxcQycnpRAvyqIatQFgCuuYbhZPuQlEfpgXVD+1/EpYVcvDI+fadV5n1hfdGKw 4LrgYige/LPk8LW2WVv0a8uLR03yedeOrfpkE/yMwfR9lcA92CFtAc54Fkk8zCAhSE2VGn5gia3 MrNAzIs2U25AnAzmtF9RPvjLqhW08mwkaZCEKu6Y0beieDbBcUSoOizHWCDFSF4fKOl2XbEjW+E uncS78Z1O/dym4fRZJ9jL0hSxRqLzoq95SNg6RQq9AVZDn2Qu7x0VD9oN+7llYopQ9kGrSpVFB3 k6KLoF3Lo/Ot0IhBgg2Z15UPJfgICndEWUw8tZKBwM0h2fEjkFK34msLiKFjmaf1r3wSrxRavDo wrb2kPaxyMmA/HKY1nA3pX1RmO/HmFLCYyT7hR9qLElksvKR8ldj1HiW2oLiZmtLgfioIZujSDc BMk X-Received: by 2002:a17:906:c108:b0:b8e:9ac2:9e0d with SMTP id a640c23a62f3a-b8face3fd6fmr326171166b.8.1771260323206; Mon, 16 Feb 2026 08:45:23 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:22 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 03/27] drm/amd/display: Remove redundant edid checks Date: Mon, 16 Feb 2026 17:44:52 +0100 Message-ID: <20260216164516.36803-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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] Edid parsing functions check if edid is not null themselves. In a case where edid is not present, the structs will be left initialised to 0 so anu possible assigment won't change the detected (or undetected) functionality. [How] Remove edid pointer checks Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 ++++----- 1 file changed, 4 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 6218ad911fde..903264b26d1f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13330,8 +13330,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, 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 (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || + sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { =20 if (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); @@ -13344,8 +13344,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 - } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && - drm_edid) { + } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); if (vsdb_info.freesync_supported) { monitor_range_from_vsdb(&connector->display_info, &vsdb_info); @@ -13356,7 +13355,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, 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 && drm_edid) { + if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); if (vsdb_info.freesync_supported) { amdgpu_dm_connector->pack_sdp_v1_3 =3D true; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 8763E2C21C2 for ; Mon, 16 Feb 2026 16:45:26 +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=1771260327; cv=none; b=P6YXb/vmECFvnUwHWqd/1trSS5tPQFTG4ykghb9yGVzyjgDABud+sdW7gQOV7A4yLfaMwEZue8Fnla1wDdqVVgheAkrymtvtbFS0A+IqNfNkMR//IhilIXeolS7AW2bND/FLE3cALqoDWVNZTXx/slk5y/QZ0PHG7xzf98pW720= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260327; c=relaxed/simple; bh=pISikTMSqeIOe8LETX01n+uJzQTHLBjcCELD7cgha9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TcA3AO88bBgCSbkQfy2C2nRTrWZFCr58YQDCcOoIjvajcWkOPIk2zr0U0XEU7svA3p/DJYYzUeS7m6rOe3AegUGxIa99jun/CvFB1+qBHl4agVgEqLzO6ram/AWWS7cMfe3TSpHIJJQEH8AK6LZc6C9I+pAPwQ+q7mW/smLSdEg= 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=RwZkYxLB; 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="RwZkYxLB" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8f7f7a1b80so42151166b.2 for ; Mon, 16 Feb 2026 08:45:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260325; x=1771865125; 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=zE1wS+bzyklMWC6UGg3g+8h32nwAI9MGCOjGOVsA3s4=; b=RwZkYxLBOg3ccuNSD4IQ2TPAlpe5gv5VdbNunKPtuE+pFP2Xm4cqMjpeHGfwNs+esc L/staiLSR1yh+RHeeupaPVxM5gQ+Eoh0yrAVu1kXnNslTWhencY9PEYhFk+TZZK8WAmN q3SJGfwabi99s+6BF+roS3RJjfzJLCEJ7wye1Iy12Un8AT4CadwqcvPi8CexApStPE3z 4FPhLeVMfPdclqBt2DoXuwl6wi4gCTkWLmxAHTbmr+cADbgQ83JT141xujkxRKTGaPKH FZJQYPkxhG/mBRN6BGvXp38AyHiFlbeRyu7/U1Hygco05VnjGSCmHQWjwbuQtFqiAXUJ sbBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260325; x=1771865125; 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=zE1wS+bzyklMWC6UGg3g+8h32nwAI9MGCOjGOVsA3s4=; b=ekXfhQcQiee6mz6+RojZxsyBWUc+OmTplQjhVz2qfDgebiB0pQ8Sv+SggJ0W6E1IFO /485KZaeYbHd8WB94LiWH/mWzsmZw/WVqMg7/ZxNR9QHwlszqt3lSt14t2RIgbW0VWqK xKgagNHvNLVqVFrRF67JiBO+tV4r1OkKb3kKlxYZrb9dVAoQM8Vw9ayzjEj6bhFw3tiI HN3MJFKpL+pAHcofCWBsH8tu5psgW/OI33b1Eejk0Bl/orKBe6JenjTM/+f7pvNr/hkF JmcUpRm7bpGr55WQXla6pw1olJU6SkqKtV4qqtQ/zVFr02oUSk9wzCI03YeKtLYYH2tw uhyw== X-Forwarded-Encrypted: i=1; AJvYcCUq+NtEVy4U6x9OCpnM+guRKxE06rJoH5ZaEI/SxwPIoWli3i3h1ulOTOoD/ePM4evIJ+h4kMd+/7GBUGs=@vger.kernel.org X-Gm-Message-State: AOJu0Yz9hpmfEtbPJSPu43wNt2+h25IMahedBy3mWoiw+PlOXTGPwV4r dTPiE3y5kF+pkvvLXVsnx4T4BBwt7bkSKJDxzncv9qCyWyeAMq/s5PJg X-Gm-Gg: AZuq6aICSj1pC5ZuDfZJsFOGts43w6epkGVf9AoVRo1QO3Qzac1S91JE7VpauVQ6R7Z syOl9JGV09q26m6zWFP5XpyMFhzZ8FGv+GgLgVWF5Wn9QVfazlai2UcshQfGRGtnKiURzsR1LnZ QLByYJXXjb94zh9odK5pYVebb8qcci5/aiAc2ugLU/JS8Vp6vyk6mq4rZ5V8XH1n6/dnITmOdwF 7Rix0oLURjlI8OzbOwxYtMOlYtg9RSGnxwmszN7nlMbtB2zntgbcuSa/e2N6wNjL73lhphJJ810 /9My5oaekws/qVYXJuOn4G3l6Zm/KHKNfQEKw00V/TOCXs05eQi0BYJ1BLTdAjxiTT5AMdlfVMB 35cnvj6Ri7Q4QSylxrm0LAE2Q8jkdrkChRVaHvhlUCkI5j5SWu8GG2ndKzsooCgaBrukU+k9jZD bZdvdKUjKJi/xP/w17a9yoYYabRzEmcA9ZGwyrWRsonH7inKdpdj4ebRyngPGXiKx52EDzuLZcA 8rN X-Received: by 2002:a17:907:6eab:b0:b87:1eaf:3762 with SMTP id a640c23a62f3a-b8face929c5mr359565066b.7.1771260324718; Mon, 16 Feb 2026 08:45:24 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:24 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 04/27] drm/amd/display: Move DisplayID vrr parsing Date: Mon, 16 Feb 2026 17:44:53 +0100 Message-ID: <20260216164516.36803-5-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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] DisplayID vrr parsing was always attempted, even though it's data is only ever used in the DP/eDP path. [How] Move the parsing to where it's actually needed Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 903264b26d1f..be3bb5a86959 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13326,12 +13326,11 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, 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 (is_monitor_range_invalid(connector)) - parse_edid_displayid_vrr(connector, edid); - if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + /* 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 (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 0DFEF2C3255 for ; Mon, 16 Feb 2026 16:45:27 +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=1771260329; cv=none; b=ZhtW5WlHZ3/It8oypXgjxVzJedduoDDWhOcJKIxGh9TNBBwnYMYOfuKQnXPk7DfMxX/kV8wvxiqxWOXBf7wnlgG0lGOyWXQU4fKw7vP3kO6loN0LVZkF0q7SeSlisPIwROlILbF5WcFKURLfaZeM1GF0Qv8JA4qeWGDxvn+VVqo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260329; c=relaxed/simple; bh=nJmW8bJP7uxYKHtjHbPGq5rXU7o6arb6Gjwsjqn1wRU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FOxdTPXHXfS1ylDe2yP9OvkOw1QHrXNUxwt8u0TqVuZNniTYj6vlR0QNcv6zFnbAd4jFqouWoDUtqlqHgd3lsSHEpioB4OiVKrWPsHQi5PAMlih0pKHjuT9EVWWUBXEDhse3/xf30ZU8a04VR+sLufPcZeiIUnp7SY3ckh4nfD4= 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=gGJBjkVd; 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="gGJBjkVd" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8fa19e6186so64116566b.3 for ; Mon, 16 Feb 2026 08:45:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260326; x=1771865126; 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=1Ztq3hyjq4dBqjOVD+VwET2LGqK9hc4CUPcVZQOdgeE=; b=gGJBjkVdMYk4ZTUJmBte7JODk289nJk1mXTOACpWRoLMjT3AHt2CYaz9FqNZVcRiem CunE7xJH+O61VL8NY5ChFrBkAOhV90qHkMWN0bEh6viIofZqtmGTJ6zCPVi2dVc0wPQX vgPzjkZZGkuB3LTWK+9vLkAG0MFtY4n3l22Wg84PO7Pkhz6I/9imkfINJfMDwYb+/coG /dZffVZcFytgrF/JqCM4XrgBoix6bqbQNQa6jNkEFsMazABcsNJ8Qqm5wKKn8SJ8isM9 qkcsy1qrTdVRQR325LerwgxipLdPKM2gJi8GFi/8i4VS6E9ti6A+SHSBFRIfPxM3t7ZN jcjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260326; x=1771865126; 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=1Ztq3hyjq4dBqjOVD+VwET2LGqK9hc4CUPcVZQOdgeE=; b=QCkzC7xudj0KEp9JrBElE9QyMK52io4P0q1kZRagoZ1HgdQS4hzIC0jPgOUwHdolFU XdeIzthdg51j0zYK2fo9j+5S5aDwWPro2EeRlDcLgGCZEuEMYNRjbVTRoFFRwNig5IBi sbtVKgSirGlBUzdt7gFvz4OZ1rWWp7h8HyLDzZQtE8Ek549nA3zm5990vlMr2x6fSj4c 5l9tMbQQ1mRrUQpPVejS6ZM4j1+jwZ1SYMTcKrOIHyn0SJsqanMo7qW8QbWqJui/Nepx eXvCQ2LYGbQGr6/irDc/hbY+vJo6Vop7i6cqocUVQYHbDriWt7RUYF4ghTrald9appHc Ig2w== X-Forwarded-Encrypted: i=1; AJvYcCUSmrqwekulRUnsk7W4vk/t6DJ2Wb65gF6UVb2q4fCWtUgFk/68rPHh/w2DPoRkvB7l9eZ978dzM3XoSfA=@vger.kernel.org X-Gm-Message-State: AOJu0YyrWsJ+D9EzFamT4a66yHwHi/hZQqxAp7wzzVeNqBXe/smow+Cl bYeMxSMOaBf9B7seDGg31EjKJCnumL9PuCHvOY3KQo1SzTA3RZE7/SxL X-Gm-Gg: AZuq6aJUxrFRum7hUPVnjHRyvjRgoWJt4s1I9AY1i2qlZOXDFz6h28yjQG5BI51Bnj8 U7MpqODUc9bfpHYv8pHd8fxQvYkqxD2NvfVu5Vfu+jpOlCTklkTfP9cruA3WxV621qhk37OEldR id41obC4RGFqf/vQyObQXA2lYmLRZ10ZTgC9CxdIbOsCsJpWt8/98D/RXuEwFCXzUCBFQ6x7zzs TVHEXf4RAHWCD5fOzf9G+SSSw4jKw25GLKou2JH2lTrluSMtHGJTnNLQp6lji5UHl7jZM4/97rI yqA7EZdrC1FhLktndnXZB0xNga+YDY/qOnxfyPNvj+FBlliZLgL2ue0V/myJAmBuNUay6HXHWHq zfSzGHhS/aZtiwTeacsaAqJLo57MywirhX7Kl+BteAiclFmbH76nUtrncyAMN7JFbCcg5KgXwbT Ux+hPgrZhGG3Ajo5nh1iSB6hw4H6quInMgsf0ZvkVOAOImBQPvX+f7Ei+EqUQQ3eNLC37RPx+bx wQo X-Received: by 2002:a17:907:608c:b0:b8f:e96:7880 with SMTP id a640c23a62f3a-b8fac86c68dmr364359766b.0.1771260326136; Mon, 16 Feb 2026 08:45:26 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:25 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 05/27] drm/amd/display: Always try to parse AMD vsdb Date: Mon, 16 Feb 2026 17:44:54 +0100 Message-ID: <20260216164516.36803-6-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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] Allows us to make the code inside amdgpu_dm_update_freesync_caps() more concise and prepares for vsdb usage outside of HDMI and DP -> HDMI 2.1 dongles. [How] Move the parsing function outside of specific signal type blocks. Merge signal type checks and freesync_supported checks Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 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 be3bb5a86959..64d1dae4d214 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13322,6 +13322,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, goto update; =20 edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); =20 if (amdgpu_dm_connector->dc_link) dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; @@ -13343,28 +13344,22 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 - } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { - parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); - if (vsdb_info.freesync_supported) { - monitor_range_from_vsdb(&connector->display_info, &vsdb_info); - freesync_capable =3D copy_range_to_amdgpu_connector(connector); - } + } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_info.= freesync_supported) { + monitor_range_from_vsdb(&connector->display_info, &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) { - parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); - if (vsdb_info.freesync_supported) { - 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; + if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_info.freesync_= supported) { + 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 - parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); - monitor_range_from_vsdb(&connector->display_info, &vsdb_info); - freesync_capable =3D copy_range_to_amdgpu_connector(connector); - } + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 update: --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6307C242D84 for ; Mon, 16 Feb 2026 16:45:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260341; cv=none; b=n7XCFgcbPxzqvFhKaBgTJImEBhtCm0vMgNwHjFk+8+Gk0nks6R5dvp6UtPtreMqLPNJxjr9z2T0v/lwtS89Z2FCazGdU0KNE71tDBWA8KMcFgRa5yeVMfvHJRQJrb4c1kKvt14AXsz1pB6j3jNlRbZNFTh7lW40Ipa/F3BxVv5o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260341; c=relaxed/simple; bh=zgJlzXM3lSCgWVaeHF/1zJIygL9PJ0pjWRjPDziTpSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=g8ZWLQENiu3ROIqsApDH5J/s2CeoGE1kSt9QTDEfy6YX4XF+vT1xeTCQmGspW3c4fJZ5gh8HZlmo/dAmCBAaYzjCUc8cZEEZoE2bPw1d6SHUGjAkhcrN1AARtwNQUICHtMUJfRKB23uusdF6eklzaIjDH3o/cJ3CUwV+uvebjgM= 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=Mqxp8aF9; arc=none smtp.client-ip=209.85.218.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mqxp8aF9" Received: by mail-ej1-f65.google.com with SMTP id a640c23a62f3a-b8f8d9b2c50so27320666b.1 for ; Mon, 16 Feb 2026 08:45:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260328; x=1771865128; 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=4KSOhFxZTGl0VyB0dvJbtjxL4ii4LJZxM+Bjjm62DzE=; b=Mqxp8aF9FNz2js/l6dplEWSntypt7mGAR6AYCdZbaeR5bt8mURaREK+BE4DTI/bo0z 5rCyIO5VvtvbDIGcOkW+UyF+5CEq3NUp5ZmTjwiRWWWrOTDQVquRwjlnB8lXFoJNElBX rqRtLGEBVlh4ly6ESYbyVG/j+fifYo5Y5mDIfn59UJDhjR9fqHh86PlCxxbGXqrbwi4J Xefwj3BOppn8H4euGASRvL3vlx5YD2Dmz5Q47rHSOhxEVoy4vidObNdsPMUSNFtPVsVs gnT8GHIZR0/8ULMdsBgveF3a+kNTlmLQefe6xpXwfqAN1dwNECGcl6tBiyI5oMJhJYjQ 0IZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260328; x=1771865128; 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=4KSOhFxZTGl0VyB0dvJbtjxL4ii4LJZxM+Bjjm62DzE=; b=wSGyKxSOyxzRcde24H8XzCQ92AvFzaiI+sOlOfoMkoWIcs+vYNgSTUfBRx4zzcLozg jjE4xxgdB9MWIf70eViAV1AIUM09BX4gYFITbJmvN+8cWzjAvOaMtYCVF4SujpalWlJs aCMRaC0AhwfpPqvn040hz5ci0IH05NwiNBgYcOFzN6ox1T/DOSuNt9vSVNaDvwmghNaM vFFYj6N8NJcmMFd+SMpg1l6C96cbn5bbdUVc3RsosFr9VIGZXmGsLl3P7pUCgdf8XSX9 nNcM9zVTihO6zNgEdPEeO9LoBDEFkcAKJNkDJXIMvG2Uun6fX08E/8WP9woCoQuXBbNy ccaw== X-Forwarded-Encrypted: i=1; AJvYcCV75Im6itL/0McfV6OJP65Lx5czfwDQP1bs8gxK2E4KO7ils99UkpPsEbLEjIn7P3eUyhSUFOZPwMLpbQ0=@vger.kernel.org X-Gm-Message-State: AOJu0YxQ5zXd7xxdD1TMyz/BAI5BA1RIa9GbuJ79HhRz2MlRqaBEKxP6 8ARNRgsY29WGxpDtJJcH3VWTl5VF7ciuvs+t0cxxzWVnPhnu7QDbgJJJ X-Gm-Gg: AZuq6aIoM4iiYmpj/0MXlEihk3LcqehbhUawhH4SCHd2dg0G0Za4r1vIZIt3h/6GNSG OfzB79nlmgH9gyC/ORRgU8Bvtvt7BCpwlu6YoZCzdxfGY3tXGCS5tpGHATFCD70D7yfFshIPdHx nscqQM+BL4WeHwrrJNwxaEwCyJ5vhgz2XnYOF3tYyNRFdzSy4L1lHQ2VUhspRRh/YRov4OqphJz 6nBmEvhvVrixrWlRMr5mvHCk/x7WvB5AeJb7JqDmamcwzhq7bW1aJ9CEIkWrD9fSpsHD6ognToR 1IyfW74v2i37ReUVlIQ1/LLhnTL7tK+WhtzlKYo70xNxyDH4VA1CpK+15Cf4oZRLg5odxVVw7Tt 8BCmCu+SZDm6re94TDb5T7YQmUV1y+L358o7nM/21ZEVTrHHwjbtnKKN0zWhBbzhJ8EWE5jyFwT 8gIP7rN4ohygYgivgbFD8A6kyolgoaVmhZwO5tsxAv5goNBELSR2eLFl3mbfjs3rifwO5qRhwlA J5k X-Received: by 2002:a17:906:6a24:b0:b87:3c3a:cb7e with SMTP id a640c23a62f3a-b8face00ea5mr368555866b.6.1771260327617; Mon, 16 Feb 2026 08:45:27 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:27 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 06/27] drm/amd/display: Check for VRR range in CEA AMD vsdb Date: Mon, 16 Feb 2026 17:44:55 +0100 Message-ID: <20260216164516.36803-7-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- 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 64d1dae4d214..b3bf5e0c19a5 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13332,6 +13332,12 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, /* Some eDP panels only have the refresh rate range info in DisplayID */ if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); + /* + * Many monitors expose AMD vsdb in CAE even for DP and their + * monitor ranges do not contain Range Limits Only flag + */ + if (is_monitor_range_invalid(connector)) + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); =20 if (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 74FCC2C3257 for ; Mon, 16 Feb 2026 16:45:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260335; cv=none; b=SVeL9iSk/D0Fki6PXzkQtE7jx8blRdlbXh452H4jYtXZwLSZMg9IrFQUkHAcXrajKPtiDtuZ+BCsaMjrhJFxaBSrStOJv1fZjAEWBV0wat85Z14Ye7Ya7GmFcjJFXHarkidQi0PoGJ6dQsXehScXCNE0IluKvh5ofQCBBMu1Cao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260335; c=relaxed/simple; bh=8QXUJfQ38/ErZfuEoJsqf+y8phB0aYi2CVMxiI0O0NE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=S8Lyur9HJpoQCfIuRIUqTKWvPLw40Q5arH0XeYY+4w6gzd1ace7qfr8c002INB/NCVSgCuKDTAh7dGoXtilpj84nLXhQ9oCFxqA1aoPOgWBPfK3ykK0Vjed2Ua3SIV8XMcVsSr/oi6yEh+JmhsApgXCS5vFTChIlmAsyvcBnyLA= 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=D76iy+bi; arc=none smtp.client-ip=209.85.218.54 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="D76iy+bi" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8f7fd33bd2so48122166b.3 for ; Mon, 16 Feb 2026 08:45:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260329; x=1771865129; 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=cytjPGPVyEqSdYgwIyq0GlV8NbwaC2+24peBJ4/9eGA=; b=D76iy+bi8iQoZDSqPHzvUPkmsllcqpTmV0VbBW/1jEM7ErGNxRrHhX2xDA8/yaCVdd IZ9iLbNjvfwcT3jdcJvqa8fYRUjO71c++lOeuGQnwfqer3k7TS5sWLE5lIL5DrL3Dlv7 XjUnKYoICD/eq+CeBHUx2B7AL1v9Clfow8sKwpiSmPRa9qObyPXMtEb5fBEYC48AEqv7 7w0h90YcSaBK4NgQDT7dxG5SMqxou7+2HOP8lpjC+8nfQ24+5/ab/bs8ROXzkf5/HjEl 6eTD9Mn1TVpNoeD8KOEv6BxQGz5cJNM2+D7sAWFzlhyAW1QSyzQIArCpu/mqN+RDTH8Z 2m/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260329; x=1771865129; 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=cytjPGPVyEqSdYgwIyq0GlV8NbwaC2+24peBJ4/9eGA=; b=w7pPZaWHFRHNw48egobnACdWrKFFmMpGBzU6pJ9sy+Amj5QtH2awWuO3jtz8vPftse otpi47xMLO6E8BIst/rhaYGHKcqeK21gC1qYQ0HmZu87A8reYY2RlG0GGbOBdhTcEfE4 Y3cMm36IFYqX11ht+njXrwWM+mkwIYgnrL+DW/PYm3zr05n6gPajYuXJgt7GO9SgC9Tr ychbLR1xSWxmXp22bRa6rnJ5A18LvmwGtYquPel0ixBrDqzpoAEasnLSVWcGg48uvlYG N377JjsW+SFo16EgW5/CLl3YTLxEi1Vupm22SCNFk4wVf7xZXOdXMOqJ91tU1VBDU/sJ od0A== X-Forwarded-Encrypted: i=1; AJvYcCWAP74cJ7LyWfzDEc8FeX1lpEO0lLKigXdSMXkE/5B1Ejv/pfzPkQpALKvrU2UVN+FafZMz1vQs7iSIYwI=@vger.kernel.org X-Gm-Message-State: AOJu0YwqyR1Nx5IHRpAHA3kFOqgA6OGClYDfnqylMAEWQKSwPFXDAfMO 6cnTFhtuVTUaIxPCx/jSAiYnQq+4s+m1fH2b0G0S9b8SdCgYrxvSmOh+ X-Gm-Gg: AZuq6aKEQuTmSjG2Qc4MdWcfoODTkYJ5e4Ts+pcVDesJ9u69wDyKvrDMFsFwSWveNP9 szew5NUTIexJWW5YhK422nx8uv5mnHQ1rvM/6lkmTpsGNQi8S967Y2U6LPgg5uUFQ6sv9dixJmu 8K7qOPXTHDcwVnAXj8aD5SMCFhf0/JlxoNN0KTkp5omh5rhbHx3/A5RzD0glgZR147B1DWna14f MtSRzGXP3vQtBYmwdAJ+hK15v3i66PtFEQpSmHYs/RgXzZne9/6fLYoTkEDtFQ7KfrZJCUBKt3U hF5zF9TC4uUI5ISiXeD9UgE/ButN+BinHZmTuimgkazpF/7gT8i6UOBPt27jmhnZbtCUOI9MWQL 1AdyZueHGKL3AvkekSmkuXNqaj6YOLZYYsTomJf+2MQTKdyB3FAh+1k1+xa5iEJuIGkmNYQPad1 xPgDkmbFmGK4Md3/LepJhyoAIkOZB5RwQ7Qe3WinQim5eu3We2HDuKPvwmmzxT1MEuedIpG01YM ipx X-Received: by 2002:a17:907:7f90:b0:b8a:f2d7:9942 with SMTP id a640c23a62f3a-b8face51f34mr359995366b.3.1771260328825; Mon, 16 Feb 2026 08:45:28 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:28 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 07/27] drm/amd/display: Use bigger VRR range if found in AMD vsdb Date: Mon, 16 Feb 2026 17:44:56 +0100 Message-ID: <20260216164516.36803-8-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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. Only adjust lower limit if it doesn't support LFC 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 | 31 +++++++++++++++++++ 1 file changed, 31 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 b3bf5e0c19a5..f36059bb0324 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13269,6 +13269,34 @@ static bool copy_range_to_amdgpu_connector(struct = drm_connector *conn) return is_freesync_capable(range); } =20 +static void extend_range_from_vsdb(struct drm_display_info *display, + const struct amdgpu_hdmi_vsdb_info *vsdb) +{ + u16 vrr_min =3D display->monitor_range.min_vfreq; + u16 vrr_max =3D display->monitor_range.max_vfreq; + + /* Always extend upper limit */ + if (vsdb->max_refresh_rate_hz > vrr_max) + vrr_max =3D vsdb->max_refresh_rate_hz; + + /* + * Only extend lower limit if current one disables LFC. + + * During widespread testing, we found that some manufacturers probably + * had issues with their monitors' lower VRR boundaries and adjusted + * them up (Gigabyte X34GS with official range 48 - 180, AMD vsdb 48 - + * 180 yet Monitor Ranges 55 - 180). After setting the lower boundary + * from AMD vsdb, such monitors start having blanking issues. + * + * Work around that by not touching VRR min if it still supports LFC. + */ + if (vsdb->min_refresh_rate_hz < vrr_min && (vrr_min * 2 >=3D vrr_max)) + vrr_min =3D vsdb->min_refresh_rate_hz; + + display->monitor_range.min_vfreq =3D vrr_min; + display->monitor_range.max_vfreq =3D vrr_max; +} + /** * amdgpu_dm_update_freesync_caps - Update Freesync capabilities * @@ -13339,6 +13367,9 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, if (is_monitor_range_invalid(connector)) monitor_range_from_vsdb(&connector->display_info, &vsdb_info); =20 + /* Try extending range if found in AMD vsdb */ + extend_range_from_vsdb(&connector->display_info, &vsdb_info); + if (dpcd_caps.allow_invalid_MSA_timing_param) freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 B1A182C17B3 for ; Mon, 16 Feb 2026 16:45:31 +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=1771260336; cv=none; b=gtM+DXMEeqZZy48+ePwWyKc3vQ+4/jrMqd27cQBDIdTCaj59jXLNBnAQUJpsCwlS4Ha4NWMbL1PgyCIS8WSese6wYTOMjtZIjatfCA0mJ1i3ZTZC1frEHTMu/dcY7Cjky6hx0DBcU2Gax2R3saachqSX+EW+QYFW8wGD89Rx+is= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260336; c=relaxed/simple; bh=jRfgjXJklYf1AA2nU3PgX94RmBAF02ctBTXxoKEJskI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GIxdOmOeJQQdHKPquhOMfHAAWWy8jbOm1eGEOc7vdQ2cmARy0dh+xmwQkbXKiFsgIarI6IyvgWP6H2YcP56tHtL5BcUr6Kj/QwnPi2HfW1N0A5qKRD0t4+jCt83I3qkiGFVBJZewdQOZOyG2PKyhspF3tQaMnhn2J9LVVpIfHHo= 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=dY9Niz9o; 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="dY9Niz9o" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8fc023934dso18313966b.3 for ; Mon, 16 Feb 2026 08:45:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260330; x=1771865130; 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=JEn0R38mGrwNqYAUGw253vwfhRvgl/ooBxvHfFpzd00=; b=dY9Niz9oBMKVXTXYtmji0P3xkbTHaL9l3Sij4uszfw1zCnU5lBR43/XL97HlWtLAWK oI11ikVUznjSrdw6nbGHXkrDbAVMHsgPzbg2pTe5A+l+hi0gk9DtyXWzBs7Mr8Zv+KyR 6oNR4WHnGc0N8LyJNMmrAt6zDnCzB8gz+5pexlM11KuCcdCPlTgCI3HGqBim7EtwGD8Q ItAPrUOC69/ox7ihzUCFQe0x+SURxjVRrPVbq2C7iTlS06G5QOpmCz20nwgPW4eEDYFK ehGjbVkAJMklnDb+G9d9stBooXzBV5G6cdqYti6Nsku1H6gtvxC4LgpcdDhPpi5RB6lQ YzmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260330; x=1771865130; 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=JEn0R38mGrwNqYAUGw253vwfhRvgl/ooBxvHfFpzd00=; b=u3y78VSqHeboGBrQh3Nz70DtH2/1f8rs3a0X/A4fetMtLx93/h4izWB0JwWNZjsQtZ 4zoNYm4vRujFh7N5J24iiXSNIV/bBH9+GhKBqxKSN9+iJZzahYpn8MMKVoYuF46pPbO2 hfjF5idu0Fb3F8sATCZ9XtCjkjLD6CEMkDlyAjrzQJqy1/xotv2d/oTULzoFl8MHH3Ge tfDdEt3aXqAplo5TevfZsg0MFZE5UDmHNbi1CrSpHpqJcndYmKK+m2jS0ZUH5VcGBuFM eh6bX6w5pN4dLZORIQ0yHR8w8ZgwaRLGfvpOJNrGLAz2353xJaZY6Y0cmSav75FqzVyZ QPXg== X-Forwarded-Encrypted: i=1; AJvYcCV8jcHlrKpGAGmRzdYlCjGHZU/VUAkhq4RKv2Ds+RXWKee8i+psKGTumCDUmb1UIawnawkRFCcbC6ivsMg=@vger.kernel.org X-Gm-Message-State: AOJu0YyVbUL9gSrUnuScAUK8QMHtXsxLkdc75AbAaVLB+1nl/MSrYKVg n41BWBuvp37cbs0gFjaa054nPV/yRbcaeHCLZDN4VDaw2h+lSzGFcYhG26Idic5m X-Gm-Gg: AZuq6aK9xY62iNtCn5oZpAycvUM3L/qZ2FLwtzn0Y/cxNQjikPZXvtA05Y7c1Dmnqxh wVKfqm6uPiI90899Sboj9FpPan0m4+9Rlrq7Y5aHqlJV5LJ7YvCZzTRal/20lMS8gonOi3RsNkQ InzbpazxvvVAotNcgsEOkXe/t7VlUac+x2DGLQBmgWqOAmp0PqOViVOcAOIYgUJjSgBMkA3Q/N9 Vy5P6rEo03Yeh1RO9AEKZoaL3qEvpmsxoet81IuVu/AWgk5EVAVThNO7ZqbsygJwEvFCwu+s2jX iv5wMOKL18y5aS3BLsEur6bt113eITr//s7c/oZiAqTp/3ASN9J4t7jvHljv1Awbltzch1Z6vzh aFK3qZNHm36qpVgpovPC/LvfMXB/q0GtyA/zvv1EtpVJKIjwFD6gFbgIJsW7ju2yTdtho1NwAX2 qOkbgew/eAWL+fPlUSR/ZDVFkEbXn/f0ltOp1CXvdfZozga9WsNZfRPFI/aE0hKI0HzsA4737Fy b4S X-Received: by 2002:a17:907:3e88:b0:b87:20c2:e837 with SMTP id a640c23a62f3a-b8face05dd0mr357799766b.5.1771260330026; Mon, 16 Feb 2026 08:45:30 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:29 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 08/27] drm/amd/display: Separate DP/eDP and PCON paths completely Date: Mon, 16 Feb 2026 17:44:57 +0100 Message-ID: <20260216164516.36803-9-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 need a completely separate treatment but they did fall into DP/eDP path in amdgpu_dm_update_freesync_caps() previously. This could sometimes result in weird values assigned to the connector even though it doesn't support VRR at all and needs a bit of HDMI-like treatment. [How] Check if the connected sink is a HDMI -> DP converter earlier and gate DP/eDP path Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index f36059bb0324..2f31fe7265d9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13321,6 +13321,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; bool freesync_capable =3D false; + bool is_pcon =3D false; enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; =20 if (!connector->state) { @@ -13349,14 +13350,18 @@ 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() parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); =20 - 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; + } =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) { /* Some eDP panels only have the refresh rate range info in DisplayID */ if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); @@ -13381,14 +13386,16 @@ 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_info.= freesync_supported) { monitor_range_from_vsdb(&connector->display_info, &vsdb_info); freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 - if (amdgpu_dm_connector->dc_link) + if (amdgpu_dm_connector->dc_link && is_pcon) as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 + /* DP -> HDMI PCON */ if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_info.freesync_= supported) { amdgpu_dm_connector->pack_sdp_v1_3 =3D true; amdgpu_dm_connector->as_type =3D as_type; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 13BA42737F2 for ; Mon, 16 Feb 2026 16:45:32 +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=1771260334; cv=none; b=IcbF9wCchZhKHg55vAEQNrCyVbQZxC0R2MmKSuuHp7gNtljWqXM4RJwvnq540fCFM1H5698sQVfYn5F1F2tSiehrkG9hllR/bu7yOUnWGrEzOgaWCaecyfUbj9OyQPmQPXxjP3ji5vXqdEGxMS2OYCqzylu2aSRs4MqBsivbzrA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260334; c=relaxed/simple; bh=Y/nbbMWDFuvnBDs9qx5LKzqOkRHIWxgTaOIyKx5poOM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jDyjxLUn4JMCXF52zqRINeenilNqWfQo1rffcOoKIUfTNkDhbCdk1UeFcFaapErJ/oAlMpCaxHKd/QS7aljqhoy2gHK+BvZnGhfnhF+/AezgtUzP9qitFLUHXovEpiYD9bRJamoFgujDpZmLEq2+DCralptU5rl49tJQTO12DrQ= 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=mFOVfVt+; 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="mFOVfVt+" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8fa033d805so46891966b.1 for ; Mon, 16 Feb 2026 08:45:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260331; x=1771865131; 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=qpQ8hMace7VylP1UXnY5VctYMrzTpDvAnEUQfsbXrTg=; b=mFOVfVt+zguQi9wwq9ug4XwF+G9zKxH2BG5UTAm6bRUXH/rbG7w2QmcOLq8hiBRXV8 O8pxoNmp8e50kOgRWRl/g9TE/XOmEoTUmeoLUauiqm61cQYkXUK0vRHUtrgYRmeBElAZ LD4qFtjA2DbH6jFdUQPQnxfcP4kkNYzl48gF97ngmLfUzzfx5+lV33vDJb57pY5XCOJL pjBNcXpcsWoNBCHY2CN4rLJcyq+qsBTa97czy9Dv4ghzIYr2l8lJNIDaauNVSh1uKl/e A8oYEvgzZtm+VpcEaYmevAs/r24OkoGMJ3FRtAXqwFHSXpORh3hsvHJJZomodoRtlcpV qC6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260331; x=1771865131; 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=qpQ8hMace7VylP1UXnY5VctYMrzTpDvAnEUQfsbXrTg=; b=HDV38OgvI6H9gLSyq9JbxKqVU0YvAywIS/om7abOrUCIi2MfF3chh35o7jDcCQQL7k BkdEfyBLPKllDMjIdrX23lfC7RKZm0MmYF3ACHsDoJ+1LPltpDXMenB/k6PJefC0ZdgN UGZdqojt0OzGyXzUjldhON35roJb4sX2jf215OdsPtk/dEgChimDkPIBsStrZMm7LYSw 6+tQlRdF/Nr4couSMVSE/LE8hc2M+g1H1girFQt+QNb6z8zC2w0MRNESWJ0fZHCA1+GV /XxKMqrZ5Lc1o+//qvpqzfZAChH7O/TfZAZVCfys4QuqGqSCw5PbGUI1O5pyZWwgE1Bg C3Fg== X-Forwarded-Encrypted: i=1; AJvYcCVha+rcW1X5eBXEpq0KBq+KBE7QdRzNihtdNcunKHnkV3YpAOVQz8h/tiIScoJRKXTDrN6djUngGojRsNs=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5cKyEP6d2xp7EEbNqAXmgPpd+uUf93ciDMY7TfABhdbbT0+rP lfPeU1SUWJJmUez1Ok8aCo976K/IL+5mT2vdd3aTTg77so3Hl3l50Hmm X-Gm-Gg: AZuq6aL0ocA0aRaVBcz4rzOz/gk0/Eqtm67za1/tv3otNWLa7DbKBE7+F7WTp8BIQXU dfNHMWX8EadlLBAEHQa/xIpiRlNvuIfitIV1CLhHuBIvtqKxTP+syvF67C78yZUd9QyNyKDH8rc mAeGEEmwkoCH7GuT+4773iRgAsMcdj768rtVpCdRrlS2hz4ivaXcWJ7niQayWmLkQELHtH541vu Dz6R1wCCUVQr9l8JSdnegH2iZqk3VqFTD5+wTdqnKKiY7FBd2+X0QAvdorY08eG9Bp2GnVGfNps DcchUxhU5iQn4cJZ7vZ5VlZ9FgTTRxFxso3rv3277+RMvOdZz+3MHJ0N1JZpNGOc9FxRJsn6RxA scjLTYf3lpqLgVkEyslRBZbBSmAPMS5Ma4QLOdgNiLZXOgNzgeioWI3VQAjA+WIW2wjzv/7Pz+D bVlvc+LdAJI+xGh39wh3HcTKK/1cS3BaFSnmNpjLLMmgfsDBMVtidLEWexh4zJJHjpVguDZvbQo +3G X-Received: by 2002:a17:907:3e88:b0:b73:59b0:34c6 with SMTP id a640c23a62f3a-b8face510e0mr348070666b.4.1771260331308; Mon, 16 Feb 2026 08:45:31 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:31 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 09/27] drm/amd/display: Refactor PCON VRR compatibility check Date: Mon, 16 Feb 2026 17:44:58 +0100 Message-ID: <20260216164516.36803-10-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 | 11 ++---- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 39 ++++++------------- drivers/gpu/drm/amd/display/dc/dm_helpers.h | 2 +- 3 files changed, 17 insertions(+), 35 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 2f31fe7265d9..2603da69d772 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13321,8 +13321,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; bool freesync_capable =3D false; + bool pcon_allowed =3D false; bool is_pcon =3D false; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; =20 if (!connector->state) { drm_err(adev_to_drm(adev), "%s - Connector has no state", __func__); @@ -13357,6 +13357,7 @@ 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); } =20 /* DP & eDP excluding PCONs */ @@ -13390,15 +13391,11 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_info.= freesync_supported) { monitor_range_from_vsdb(&connector->display_info, &vsdb_info); freesync_capable =3D copy_range_to_amdgpu_connector(connector); - } - - if (amdgpu_dm_connector->dc_link && is_pcon) - as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 /* DP -> HDMI PCON */ - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_info.freesync_= supported) { + } else if (pcon_allowed && vsdb_info.freesync_supported) { + 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 parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 1f41d6540b83..45a91df619d9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,40 +1381,25 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -static bool dm_is_freesync_pcon_whitelist(const uint32_t branch_dev_id) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) { - bool ret_val =3D false; + if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) + return false; =20 - switch (branch_dev_id) { + if (!link->dpcd_caps.allow_invalid_MSA_timing_param) + return false; + + if (!link->dpcd_caps.adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_S= YNC_SDP_SUPPORT) + return false; + + switch (link->dpcd_caps.branch_dev_id) { case DP_BRANCH_DEVICE_ID_0060AD: case DP_BRANCH_DEVICE_ID_00E04C: case DP_BRANCH_DEVICE_ID_90CC24: - ret_val =3D true; - break; - default: - break; + return true; } =20 - return ret_val; -} - -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link) -{ - struct dpcd_caps *dpcd_caps =3D &link->dpcd_caps; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; - - switch (dpcd_caps->dongle_type) { - case DISPLAY_DONGLE_DP_HDMI_CONVERTER: - if (dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_S= DP_SUPPORT =3D=3D true && - dpcd_caps->allow_invalid_MSA_timing_param =3D=3D true && - dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id)) - as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; - break; - default: - break; - } - - return as_type; + return false; } =20 bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream) diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index 7014b8c2c956..e51f1e489129 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -220,10 +220,10 @@ int dm_helpers_dmub_set_config_sync(struct dc_context= *ctx, const struct dc_link *link, struct set_config_cmd_payload *payload, enum set_config_status *operation_result); -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link); =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 878FE3FCC for ; Mon, 16 Feb 2026 16:45:34 +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=1771260343; cv=none; b=JqtlXoOj+GIUw+pdLD9HkWKphoKQBlRMHSvCT6JluFPO6CgR7wq+XbsoH33kp4GbnG5at4nX3+pEY+K/pFrx/dCtaLS/CyDg8VQVwQ0XHzm/C0BV7jZ2PXg2s0g9PWg+m9+nEWm09c45qWhyGvxiu59IrsV8VQovbNQT3t3tQhA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; c=relaxed/simple; bh=F16tDJB4mI+m3aE3BtfybNEdzIkgiq8Z8HDrBYHP0EM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SBT/tlVo42Rl7nzh5JI+lXouEnpeQxoFemKSN3Dn4i5bryDAmjwTrQ9Q3IA6KkRzuZ30EvFVOHZpQ8v+p8fgME72EEgUsQvnbPXrvZSXft9+7Fsn3PfeOMkrKOn9jnjZw7qUDI9GPee3gTq1bx+oMexnF1tLseaaqOCGBIAZstw= 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=d1YJI1HJ; 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="d1YJI1HJ" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8fa19e6186so64118966b.3 for ; Mon, 16 Feb 2026 08:45:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260333; x=1771865133; 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=hyN3DnmAfywMU21NsWIFe7SPLTrpTlCuaZerH4yt4wo=; b=d1YJI1HJ06igci2lYjU1L7g5S5U8MFdfvOWIBnK7uK9yrHDU1yeQ1ZFR2e0MiIa3KJ 6KyaM6idbBRg3cZEgRHkRq5i8yG5daowcxkga0G3fRukE5SYAnu+8JXqxdBr87DbkXAf 16AXLSu64oy9/YsFZe+3+W4q2NDb4zBiQ4kVSkdtrI8si9ngLJCjqmCw7Qu2jF0WQQxZ X5UZ1q46hqk0fjgkuqxhMd4wRGL80NGsOmuuzVgV6T1ABIVFbdCl8znfnCXJTUVCKsF/ Pvpbrd4ZobGWQ+JL2svZhRZsgfNjpRLijqIMub6AYxTDLtjPRQMYwSDSxyhz8OOs7D8z TaeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260333; x=1771865133; 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=hyN3DnmAfywMU21NsWIFe7SPLTrpTlCuaZerH4yt4wo=; b=SBBsAs6P0gqvUZ4BpHWDsH6KOF0NlCfFyYk+yokNlNz49yelpuGbKdhOSw/ialp90g jTuoM/sQ2twGKN8NtS/EtmL8C6m+wg0LBFZb9KXSgLtDIMgpoOXloRIqr6Y+CLsEqzlw Mdim9N7dHQwZePz9Z81nktK7kAb/ks2eSgXlgK/FD13fwgxrzY+cdky+yaBx+iqO1YBm iqHZn9wIDpDjFycC+wkFZtmtuTeBDVltjIn0nbjxeUVX2E7d35NBTw87jcYDMOmlMb5p I3m68nceMxFcwnFEy1JabDarzL7ybCbH2PaslCCLTGUWbJpd11VYfgfA4x9Z0yAGyg6i Wa/w== X-Forwarded-Encrypted: i=1; AJvYcCUbyP6PHj8vUteVMmBJaqPwbsA1hkSE/CF7Jj/sCG+/0QVjQkgImtFyojpOyB6eeE4xx0WHcPZEcwARVqU=@vger.kernel.org X-Gm-Message-State: AOJu0YxWMM40minkoC2TnRvLxa83enb36OYlJ1PiLuQlhPqMAQu/+svf xjqxay5wXIFEYZf4Sbfuj3GkiyAOSTFrwVEQKq3lJKdXUfpXa9grmYMU X-Gm-Gg: AZuq6aLVlsiasOgu6OMBucDU49sA9OyLM73b7GifQN2bnKfwyshkQbNdtwytFBmdVD2 nR9jskTO1Hfka/zcF1Pz4TO7X+R0AQvSmo3JOfCyPqFnTRT7uy0ysSXSb0VQkA2TyLaj5QVATz5 LrLYT/X398vjBryCf9+1ONosVnf2ut49r3ohtid2atnwONm0hY5vwnPsv1nARbUkluUM63rd+51 CbC/JiyoGC8YyGAUZlFeh+QDQ2hVpTtznSBunQjqPICIM6RadKpxaZJeNzP8uaPg68Ium2QoQpF OsjR06FIS3sPN4l87WBlgEky4oBSUElpWrb5VHU7sol/eXnUGDBLbg/8mI71B+LHQEGjeLZfTAJ rnz0KEDQLNCsAt6bBMCLtnZ9/XltlGjflfL9O/ueMOEsdgYCF/URgqlTDxRqivdCXQxn8uViA5q oxmIH0qWAHgZrVireZEpwifEzkxz8BIBFKRZp4paiUDcGr/eN5PAymGny01sv7pYhHJjU/FF8gx H/5 X-Received: by 2002:a17:907:608c:b0:b8f:e96:7880 with SMTP id a640c23a62f3a-b8fac86c68dmr364370966b.0.1771260332728; Mon, 16 Feb 2026 08:45:32 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:32 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 10/27] drm/amd/display: Add PCON VRR ID check override Date: Mon, 16 Feb 2026 17:44:59 +0100 Message-ID: <20260216164516.36803-11-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- 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 2603da69d772..b6079a1ce2ac 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2060,6 +2060,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 */ @@ -13357,7 +13360,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 /* DP & eDP excluding PCONs */ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 45a91df619d9..cb8a2855ac10 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,7 +1381,7 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev) { if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) return false; @@ -1399,6 +1399,12 @@ bool dm_helpers_is_vrr_pcon_allowed(const struct dc_= link *link) return true; } =20 + if (link->dc->debug.override_pcon_vrr_id_check) { + drm_info(dev, "Overriding VRR PCON check for ID: 0x%06x\n", + link->dpcd_caps.branch_dev_id); + return true; + } + return false; } =20 diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/disp= lay/dc/dc.h index ce08477d1ccd..141d8c76d001 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -1058,6 +1058,7 @@ struct dc_debug_options { bool scl_reset_length10; bool hdmi20_disable; bool skip_detection_link_training; + bool override_pcon_vrr_id_check; uint32_t edid_read_retry_times; unsigned int force_odm_combine; //bit vector based on otg inst unsigned int seamless_boot_odm_combine; diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index e51f1e489129..5e77deb09200 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -223,7 +223,7 @@ int dm_helpers_dmub_set_config_sync(struct dc_context *= ctx, =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd= /include/amd_shared.h index ac2d3701e2bd..894e1e738ce0 100644 --- a/drivers/gpu/drm/amd/include/amd_shared.h +++ b/drivers/gpu/drm/amd/include/amd_shared.h @@ -412,6 +412,12 @@ enum DC_DEBUG_MASK { * @DC_SKIP_DETECTION_LT: (0x200000) If set, skip detection link training */ DC_SKIP_DETECTION_LT =3D 0x200000, + + /** + * @DC_OVERRIDE_PCON_VRR_ID_CHECK: (0x400000) If set, always return true = if checking for + * PCON VRR compatibility and print it's ID in kernel log. + */ + DC_OVERRIDE_PCON_VRR_ID_CHECK =3D 0x400000, }; =20 enum amd_dpm_forced_level; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 DB97D2C325C for ; Mon, 16 Feb 2026 16:45:37 +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=1771260344; cv=none; b=W9pFoKWG6Ffv3dGQNUjIeHHPgoLbf5odkPTFHhIeimB30cNefUsBZIWjzu/ajsJh8P/NXvDA4+QslYLKAPU6h6B9Vgo4GrKP1FpQ0Bo9qm2rLbXu7bsdnh0Rr2Nb66CgduPqhpS/aofvikQIhQVhniKvwm1FsymnZI6hFPkOFfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260344; c=relaxed/simple; bh=+MJWHKiYrreXuYlH9b3ZR6m200+n2j1B2TCXHRlA5YE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Bwem+f8f44Zt1qOMtQmNJ1rB8iQ4mXXMppZt7Fn7+yjrPXycwoOF939NTmBtgxQEGgvaG65QOysHUhOTH9KcYVu5GWk2Nv/GEMh1QBLG8EXKsUF1jlQqsIpmtxdeJKUetJxal7JXNsicKqmklq9g/4TCTt/oPV6xYyiZrtsPC+Y= 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=QCXqvLkn; 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="QCXqvLkn" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8de2b5a122so59440766b.0 for ; Mon, 16 Feb 2026 08:45:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260334; x=1771865134; 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=AGNe0DbosFuyf1BzABz49JKUy3I3J7cCYNl1QlycPRA=; b=QCXqvLkn0ZWK+yWierNA99qqhXy/nrWFGRq9syVqcTMUNn2T3+M4fWftzL/4ctCL4A xid0xAI8LWl1jo0hYAlge9jOpiOEExhA+Dy0gfak98KbsSzGMI7ATOIxR961PmYO8ZRn fpLXAlMV3Q8tvB8Mb6UxwJDEAPIhAt9qhQYIjFvtvBueoRy6n7qLVvuiaValClwlIuUu kvnbUp6Ew23/MttQO4ygTn19yvC7wr3dJ/3JeJTydpnOQH6WMHtr14AFltkbFjw/nLTY YRJh9XG7KWw7ZtapDvC3ACY+Y3K4uobmz8DE2KdeDxJk+6LZb5yHamoN4CSwzwcr2gOc mTfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260334; x=1771865134; 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=AGNe0DbosFuyf1BzABz49JKUy3I3J7cCYNl1QlycPRA=; b=HY47LI0JablNjUjp/hwe7NvJ9voPg3D7ZcA8d0OCy8AIuXBi1r/9mxTJkkNz3sLQ0C Iw2LR2REE2fw2PcbJTKE7nLmj6vUnlmdKS8chc6JTQDzydHr3aP232WXsl4gUdrRpw+h jU6hIUUxUxJ3sSGfNxW+O9dnu7hW2+P6E7uE6t776fNrCC0LfcUY422MXa3wyKs/hfPD dPzEd8cFvRQEPa7y0P9nzpbkZAspx65mQ+1oJZFNqQogvRn4+P7pJYVnH+jlDbgJjlys zvurLkjM2lEXTYnJqCjHyduXnnZZm47dVtypn413Os/9rrCX33Wgghcj3dUt+G7vyWIH ogBA== X-Forwarded-Encrypted: i=1; AJvYcCUXVi2HjjWHhfNO8SvDQUSeJo2Msera6z1daQgScD3zQwU8a/teQ19FqmEXe5rpUN/MiLxV1TKVdNqkkoc=@vger.kernel.org X-Gm-Message-State: AOJu0YxO469TSdxx3MzYoK9ZuHT3Ajsf5bfCmsh6PNiITarBLZipI5ja ccMG78aUbXrqWPoqUGwvnfPEojI/E8Jw8kjBNdeFUdDYikM549imHe8R X-Gm-Gg: AZuq6aK7/p9A1Djg67IbqtQnxTtobyWxsVHM3HEqWqvVU1mOOco+SJjV2uWBOYLti7N gVe7ngEQRvIg+XJAGjGeScOiYCFGaH8KvtSXC6E8nf+cWaYdX7R3ySLD24xu5GS/slagQftwhqs yAa9miEdKOT142nVhdPfw6xHGd466Q8oRgMVpuqLTSjJM33mTTVUSWbRLOPT8mWL4QV6XtossJi umTuloZ0RxMCyHMOuuxwyMNP2v8IgNi6nexuqR4woKQjv8nDfQfLi9gSAx34LQWnWoeZcKXAGPf IoimTYGiQILXc/eft2waNbN6lcOHbPNGMlHQbTCBQ9+A0nOL8JQeqCGwAT154T45XmeoDEd4ErW Nr1ZSm3hrfA1n1oTCvnjpWwa50avsoAUle+Fh4lDLj2CfgHjs15DVZ1Vwkn8TtjcuJtTdT5OzLU cyYvoyafZEpDPtqIGTMqykv8u/mfkTepvBgvOGJ85JdU7sCEFXPe5SFgMsc2Dt0U1u185rqYJkd Ji9OH4liZ3VNJI= X-Received: by 2002:a17:907:3e88:b0:b87:2099:9f6b with SMTP id a640c23a62f3a-b8face2491bmr364254366b.3.1771260334002; Mon, 16 Feb 2026 08:45:34 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:33 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 11/27] drm/amd/display: Add CH7218 PCON ID Date: Mon, 16 Feb 2026 17:45:00 +0100 Message-ID: <20260216164516.36803-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 1 + drivers/gpu/drm/amd/display/include/ddc_service_types.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index cb8a2855ac10..690558584a0f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1396,6 +1396,7 @@ bool dm_helpers_is_vrr_pcon_allowed(const struct dc_l= ink *link, const struct drm case DP_BRANCH_DEVICE_ID_0060AD: case DP_BRANCH_DEVICE_ID_00E04C: case DP_BRANCH_DEVICE_ID_90CC24: + case DP_BRANCH_DEVICE_ID_2B02F0: return true; } =20 diff --git a/drivers/gpu/drm/amd/display/include/ddc_service_types.h b/driv= ers/gpu/drm/amd/display/include/ddc_service_types.h index 1c603b12957f..e838f7c1269c 100644 --- a/drivers/gpu/drm/amd/display/include/ddc_service_types.h +++ b/drivers/gpu/drm/amd/display/include/ddc_service_types.h @@ -36,6 +36,7 @@ #define DP_BRANCH_DEVICE_ID_006037 0x006037 #define DP_BRANCH_DEVICE_ID_001CF8 0x001CF8 #define DP_BRANCH_DEVICE_ID_0060AD 0x0060AD +#define DP_BRANCH_DEVICE_ID_2B02F0 0x2B02F0 /* Chrontel CH7218 */ #define DP_BRANCH_HW_REV_10 0x10 #define DP_BRANCH_HW_REV_20 0x20 =20 --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3729D298987 for ; Mon, 16 Feb 2026 16:45:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260338; cv=none; b=QmO+0NTIDgNeaXTO96mI89qzCnWU5Uu5D3wVjo39GPfOHD6/lugK3cF7fwMbw9HYmTZKMYW1jKQHpY3z+ObbwMHHcyDmO4rjt+N0CQQYLlbLu2wha8eOl5KOtspR7M4ieIueAUp7kj3dDjyXSuBrZ8bn67R2zgfp284PIOIEfQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260338; c=relaxed/simple; bh=g33jRpOl9pFiRCnpwBG16SVNHexAxtnepNFdx7VUCdc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=j1ulZu7yDXA5Eg3u4K2r5EH3uBvfDjd7RS+qQdAysnNfi/EvH0hT4HqmDcbsqDwr3ZPp9oVSlQpoYcmdCxryRlgt0jsqpqSntlmy+ZcpirBLzul5uW4XBt+rXxdt6v+Q3Ir3k+iQ8QjpLuWrk42vfI1MfJWHXpIgv3KW9inNqUg= 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=C4qe/kR7; arc=none smtp.client-ip=209.85.218.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C4qe/kR7" Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b8fb8f14538so61296166b.1 for ; Mon, 16 Feb 2026 08:45:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260335; x=1771865135; 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=jfYWliWmx0HEAyOt3BzW9unBdR7paUp8ugYTT0bfO9c=; b=C4qe/kR7hJP8Pm0HUifydziOwlIzXE4tpuqNRISdTt98PT23rcwvhUq7xuCshJcTVd aae53bgcqMrtWa4Fdr1h//C+uzCeTjrhcasQJTgMjLW8oGPT2v7Slganu253tlhMoUPz sDvIeZ6R3tOlD8JZlanrGbwwsX6W9g6OmUEk7op7mgEPSESHOwOELT3NGy39BAC9XM18 NwkZPjRfu+U7j6VJt+iU/NvDl9jLuIC51qxU7vAG1ZqhFrbxsP9vNOQ4oM1Ve3Q0X9Ss OpZTcCQwyT2bZj8bfir/zZD0EnZZCNHDM7jgydKOb0xhRLE5GBvnEqHutdf8xQMlX2ls FNjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260335; x=1771865135; 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=jfYWliWmx0HEAyOt3BzW9unBdR7paUp8ugYTT0bfO9c=; b=Dwd0siTcm8YhbCDZaqPiNzAQJYO+1fHQJr0ZbGSog1a44Vg8NUQ1DcE899vTTpN0o5 eX3fQoS/Jy+j/XX+ei5KsngxocswzIA7rE/x3jxyj+0AZ2A3YKGB24Wob0u3aKz6AafC JoGlr8HtwQD/H8dwUeGbbtBR9L+3L+y/8VLO06FcV25YX//rq1MS/+fqz+KjNkYJ8k81 W+r2esyUj2j5ap0dLkVyWH2A8zw7T5JnyLuidk/EOPN6oJHuXT4f3TqLKqPbD6bP2GMe diI9NV50me4rJ2RP+iEMsMNozHLzlhMgH+k9BLCegiVJF55U3rw7EQ5TXIXEZZWw7TJl qeRw== X-Forwarded-Encrypted: i=1; AJvYcCX0+bTcHY5rfOqT53M1MSSCWB7liDn292q5xoqvu47G4WqaZ2qoLFdTLWpQdRynxsp51M1QeeJ/fPuCgi0=@vger.kernel.org X-Gm-Message-State: AOJu0YzkuuaCQ0FNWq+0geen7UhBFw0tel0+ygXkrpdpjrVYYc3x6mTb /XnvDMywN2PfKgHGgITN3OkcDavZ1eZwwK/w32TdpnhCU+qxSkc06c7z X-Gm-Gg: AZuq6aJvptgJbKBS58LfPdElkR40ZzmaRp5QiWrEi0iR0ZTAvQIh+XmD00Tp+VYK1O/ 1EGhKFcyKngXofjNf1iOfex32Dj8ZQhlafDVfRcJ235TRbDxoI1zvJ3ygnxgHKcCCdh6Y1MO/Ub rYmOXo20pMdNWoUCrnaTCJfXp3Aa/YzaMQUtV/tTHRINiGyFqUq4sKV0G3KEf3Mm7KpAjDJ1pA/ U8DgP/PF4e39P2aGzxVLtk8KQCfYwIJTxHh0gMPfccclYoK4kfbxqtcAxhx26UXmUiPzwfgINve hXxXwda4J7BEI4VtHPI1eWCY/pkda/NEAZHsmuQuMWzXM/U5vlJBEYEnkk0n6K3FWOqoFU6Bd4u 1sYXlW3sIFTbM+iUjBa64bGt0xcAqRfKduxnhdSFnRn4HvDVaVLHqHqv9Tl+V4Y1YPWTcVv7Neo w1sIDgD87Ee+W00QhUCM5DdlJCSNTBgY8HUlVUQee7ZD4BW6BFsA5YHIju2qktQTPDT2y9nQs4I KsI X-Received: by 2002:a17:906:c108:b0:b86:f194:9ed5 with SMTP id a640c23a62f3a-b8facc58f4bmr333385366b.1.1771260335242; Mon, 16 Feb 2026 08:45:35 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:35 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 12/27] drm/edid: Parse more info from HDMI Forum vsdb Date: Mon, 16 Feb 2026 17:45:01 +0100 Message-ID: <20260216164516.36803-13-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 26bb7710a462..056eff8cbd1a 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6152,6 +6152,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) { @@ -6277,7 +6304,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; @@ -6287,6 +6314,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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5018E2D060B for ; Mon, 16 Feb 2026 16:45:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; cv=none; b=eXwsilpeSgnDXYjmd0zcp4ksNGqvLc3FGzlfVwET2Tm0kVvdFSmJsRyUkMWoUMDa6BBQj+gR/l6QhmJSTdMGFg39zFnKNWafiyOVEZY6Hpquyf0mZ0fVe0M+7yAQ6lciQUpZUYkaXN/ywSdJ4Ko29mxT8bHXY0zTLYH44nYCJL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; c=relaxed/simple; bh=JiTXqLErv1+45cxUxj5686SdMQzozV+3pDRqX7tKKPI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=q4iQBPAD8tlxBgsLGYa6V7CmjIiPB//6hle5+rQ9jJaoqO2G3clYnjev7iX09cbBekk4xKs6KX0wUL1Tqr3e1DrWy/xtBY+9K6pBOUcCNXXU8FdGgpINZaVHH3x2BLid/VrdCn+j8YMbvv6ot0lGGvKkVHdoDeEa175AKrfd7r8= 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=WWw0nQRe; arc=none smtp.client-ip=209.85.218.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WWw0nQRe" Received: by mail-ej1-f65.google.com with SMTP id a640c23a62f3a-b8fb8f14538so61296666b.1 for ; Mon, 16 Feb 2026 08:45:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260337; x=1771865137; 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=kS7PzC/JbAdPihFpg3ya83BJ8JEcjwBMKcTZhCYl4bU=; b=WWw0nQRe91q4q3rFBmsDl03BrE1AdRF+RqoSHZ2civDlGvZncubR3n95ZOL4oOn3yo rse4pWsf82N+FG/vE/TsFEo2Z+8Y634TmzGd+E8RHT6gKLaaCFlJuP25joMNrsNwx/+I gclPaZoimGCIGB9mNmh9e93jcb0lXoQE6knQ6TLp33gN+4c8bMooUCtnJCjhyrGO/gFm s8l9+DLTB8bClc+IE6D7RtJfBkmzlOZe4McyxYVvNQWvMVUJNSU3tyeuH/1RB8EKTIyY vjhOB3Pk0CNfOh3JNfvzQ9uXDgIgNa+bIegOisNCDA62NZgQbaMxSVjbbf1oQbByhIoK FspQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260337; x=1771865137; 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=kS7PzC/JbAdPihFpg3ya83BJ8JEcjwBMKcTZhCYl4bU=; b=cfRnY+GO+EXWOD6elLHCbaeK3dXDk5eDivC6tfwCS45TtNHb/0HmH2TDmiQabIxoMb N/QQSiDM5pcF4Kx3jP1ggixQ/zSq7l2/YtqAmwzbsobsRC6KV6lfZlr9n0jrtN95gSDI 1EuRRSfq8UHbd/nGUW/g/nh9zW/3j95yiyiKuBLzVozq80BadL3l0EDYb73AS5E169gp Zm7ZZPRNK6BiLHS+LlyURPPSAvm9OaE8r1WrCzODGYX8Cg2vChr89pkvKINei0qUai33 samvAIFv6er9wluXHf2jRB77oGtaOh+udIYyGoOCeDOgn384UM3wQKJDfJqLHGzP/0RA dTmg== X-Forwarded-Encrypted: i=1; AJvYcCV+Wp/2WzrxBFKPWXFEq4kPzaY2UsadTB2/W7o2hWzAUpVF0Cg6U8TDz73hdaIVlph9hx4R7BHgQPKhQvo=@vger.kernel.org X-Gm-Message-State: AOJu0Yzy2qd5OQMQdTFlw8Zfw0zTadLiGu81AydZCMaIxt9mq/WQKnju ypOQ+65waMk863zZGKwF/SEpO8fWLuHaI+diwpvdsH4mHhMODPEIVaua X-Gm-Gg: AZuq6aKb+N+4DZrUhaJ9fjot2eJB7I+01+gZKNLxWfnlayjQaZOXSkN8DkSZl52s3Xg J2V6WW8pV0zZPyj7piuALqJP2xksahKkLToJFhPZXFcX/exLRl5gLW8QCqok0gfRx106zBpon3q 4riuNkPmqzRGIEuFtBuLX6l2mFYsABx7aWSM2Jpg6ryPkFoaan0nRXN8MKXVw4xebBIJLKZt02o gc7NED26qlWV916V2oGfHWdDTICOlrzMKjqWJmjXfkHaZfwV5/dn/VVrndtFEbnQJcki4fxRBdK xBPdNkySCpc9TDwVe2M5axIUPVGslSZym3wy5K7mDd/amPzBzZr6oTkoxSA5o222REAso/MCWgk KTBEw6/f2LeKvA13npDt0v31nyATINTPGpzGi+8bnZJknAKflgIvhWSSf5RlD9HiAyoK/krHkTk +CJZY8PkRnk4L+eK+Po1I8EKHn/x0efCNWXgNxItscRNb8DiQT2Q2/rYZWVUN8444j4ItUGuxbh uqy X-Received: by 2002:a17:907:2686:b0:b8e:fd74:f6b7 with SMTP id a640c23a62f3a-b8facdf05a6mr322183666b.5.1771260336510; Mon, 16 Feb 2026 08:45:36 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:36 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 13/27] drm/amd/display: Rename PCON adaptive sync types Date: Mon, 16 Feb 2026 17:45:02 +0100 Message-ID: <20260216164516.36803-14-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- 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 b6079a1ce2ac..e511eb5a1f7f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9629,7 +9629,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) @@ -13398,7 +13399,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, =20 /* DP -> HDMI PCON */ } else if (pcon_allowed && vsdb_info.freesync_supported) { - 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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04E8E1FF61E for ; Mon, 16 Feb 2026 16:45:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; cv=none; b=M8XyCWEcP4fYM3GuqtuNhQ23mVh/iPlcInv9aNUj3rpjJ0Xr3Q+DMZFSeXto3a8QdMHUEJaZJT2CWW+SliL1Jw6U0wB27VdOgiJsXAisgXPSkYigNfudGz33aWqk8BbSrEGe3v/VDlW/4mReRUtaklnmdBc8rzDw+u5J3lYs7yE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; c=relaxed/simple; bh=OaV7INhLDBtKO2pacItOc8inBGBdNvcL+LnxqzWxIuY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pOK5YWko+zDI2fqE/GycsIxqp6RZQ/Srtx3LJzPPB68AG9PWTAA3VLTBTttVmH9gik6v5UQQ8IRaFe5jxFI27oHYW+Q4uOeuwDmlkKL4GIjxptli/HAW7wgCFyMsMC1WEhBEj8lN+tI3Dvhjho37BDYAcBTFSi0fZJaIdYetdoY= 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=XllNFSgV; arc=none smtp.client-ip=209.85.218.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XllNFSgV" Received: by mail-ej1-f65.google.com with SMTP id a640c23a62f3a-b8f8fa9067fso37156566b.0 for ; Mon, 16 Feb 2026 08:45:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260338; x=1771865138; 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=Qp5SXJGMlbR2C2KjVkdcVn6F2JKroblos6Aoghsh/Sw=; b=XllNFSgVpmGGTapTRQgrWtHGnFOO1VYBydDvxV2YjKQ3Bi1NVmx7URf2VDCBELKnqX 836DnBy6fue3Tr6wYVszkAISZuOcTUx8jMRrdAPuhwRIsqlTL/HSyiqXvUy6UEQjJNdN J/tFiYQYHCEAFE52YXgMVfEHmnPA0fq7nleTTyXR8QVHL2t+LjrBLENx1v9tQWUHY3Jy ZwG9rx5cy/5T5AwZ2AsG+hwvGlj7RXLRxInUslhxZZEVmw+GyzSvm4GDxjeWjKYJ0x3g pRPlXeIob+bGrxt7+h4chn0CsEGi2LdGviXrV1JTD5di2s+cs05wywJYgjbAFqWTT48Z 1ZwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260338; x=1771865138; 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=Qp5SXJGMlbR2C2KjVkdcVn6F2JKroblos6Aoghsh/Sw=; b=f9EdanytY7PnziZ3dutJqymQidwYQStIgCFWaVDQuN4hUkjomKhktRria2XdeAdLE5 ON7GgHQ/Wl/ha/X++fklXpmXEsTuiftix/i3nxR+dor0TF7mbMDJ/V3at74QRvYMDSXF VwgzdMGxvvbrftQr5beOWOQB1u4KhLC2bBl5xLQxv3YLDgJ9yz/D3vvCuthWF/lQY6Dp a6Wos5MmpdRNHPmoXyJVdd/PZGHy4LWR4mLSVfsA7V84S5xH4t8u9bhiW7URo6C8ubV8 lVX5WSLwl5h3AWMMm1eLQ+KEzgdngdSZ8XIdTmnoZNSZpK/V1usJtoRbHdsqkVG26xPd ZpFg== X-Forwarded-Encrypted: i=1; AJvYcCUUv6axUzXltUffcFnf4Idywor3bSMImh7D0P2VXhZkb0XAX5BPh6BpAYqvDD3xehc9+oXSU1xFW1vSW50=@vger.kernel.org X-Gm-Message-State: AOJu0YxhmuDlaz98G/Q/ShtoBV+Dhs42JB1NyV16dPLsxtuEIUEfEag6 N1UOLAMpwDBOEQC9i9y5FglcmOs87eAXLhbU26OvnReBYzKfhvH0fAUj X-Gm-Gg: AZuq6aJ2EQ47JOwE4PGxVu8mQRqwnT43sNtLUGFyVTWSIHPNLzFhuNhp9BOw9H+mbm7 cUKuuysD5t75n/x1+qzwaBvP6iz3QD2RgFiy4yhEi9Q9G5INZCIoy6R4w/aMbVJaghno2olDw65 K03Px+Ze3lih+xRf01K7INfQyWZQ5xYj7aTCbIrNHqmeKF+Pgf5fR6ZPuloAqhjT3DTkvOfxdBF cma0QaZaQR3x6uv28ctPjffy3q6VEh2IC9wn1mPRFANXe3SsNu2KIigOPKUTPXS88AINnebCmyW UmEr8S502ChvlDIQaMZ3UZoVWCedt9xlnarf8kz1nVykgq0qL9FpXY3MwirTGChI/hIHchZrXSn 41tAXlprQvb07zJvJELf7SmkD+CcnCO6r2qQ2kRubtF+Rt28EH6JegT68BreoRcYgb2i2KWDUhu 7INMhK4i127FqGlWH6nGdpcpORvylu5cgrGefiTgxYfCFqeJiiCThv05gyWgTr7JukO5SWsE1Mf zQm X-Received: by 2002:a17:907:9628:b0:b87:6c5c:d3d4 with SMTP id a640c23a62f3a-b8facc7b4ebmr343317866b.2.1771260337873; Mon, 16 Feb 2026 08:45:37 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:37 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 14/27] drm/amd/display: Enable HDMI VRR over PCON Date: Mon, 16 Feb 2026 17:45:03 +0100 Message-ID: <20260216164516.36803-15-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 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 e511eb5a1f7f..931493433439 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13258,6 +13258,17 @@ static void monitor_range_from_vsdb(struct drm_dis= play_info *display, display->monitor_range.max_vfreq =3D vsdb->max_refresh_rate_hz; } =20 +/** + * Get VRR range from HDMI VRR info in EDID. + * + * @conn: drm_connector with HDMI VRR info + */ +static void monitor_range_from_hdmi(struct drm_display_info *display) +{ + display->monitor_range.min_vfreq =3D display->hdmi.vrr_cap.vrr_min; + display->monitor_range.max_vfreq =3D display->hdmi.vrr_cap.vrr_max; +} + /* * Returns true if connector is capable of freesync * Optionally, can fetch the range from AMD vsdb @@ -13322,6 +13333,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct amdgpu_device *adev =3D drm_to_adev(connector->dev); struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; struct amdgpu_hdmi_vsdb_info vsdb_did =3D {0}; + struct drm_hdmi_vrr_cap hdmi_vrr =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; bool freesync_capable =3D false; @@ -13357,6 +13369,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* Gather all data */ edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + hdmi_vrr =3D connector->display_info.hdmi.vrr_cap; =20 if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; @@ -13398,13 +13411,17 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 /* DP -> HDMI PCON */ - } else if (pcon_allowed && vsdb_info.freesync_supported) { - amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; - amdgpu_dm_connector->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->vsdb_info =3D vsdb_info; + } else if (pcon_allowed) { + /* Prefer HDMI VRR */ + if (hdmi_vrr.supported && hdmi_vrr.vrr_max > 0) + monitor_range_from_hdmi(&connector->display_info); + else if (vsdb_info.freesync_supported) { + amdgpu_dm_connector->vsdb_info =3D vsdb_info; + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + } =20 - parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); - monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_PCON_ALLOWED; freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 001822C3244 for ; Mon, 16 Feb 2026 16:45:40 +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=1771260343; cv=none; b=oQkzW+j1yqZWoILB9jxr0HbiajoLY2E+NDaBs+V0JPOEBl6y5FiCNKMIHzhf8pWOMXPqKj+UPceNq1cpaZjeTzana5M06EOrlk/YQBUoL3ipL4xu653nVMW4QvncmMMWMvcHm6Z0HMrKQSZb6clrSTQhQH6BsSwhWStQX5oHK/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; c=relaxed/simple; bh=Z2mZgmciwqWu+iAY6olJFOnXOdP3uRdWHbuHoH/Zqbc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=T3gjux0xxbyeq+EsMsxpAkHGOuzBSkcT24XIxVmAQ5j1Z1FHs9thZyjUZDIywT5b1AjfShhwm/wZsVBYeFYeXcnbIro7xoY/y6M4tvgo1iQLa/2/kxsjZ2za6BgovxY6tYY7iAcDT+4T3CQj1lXJt7EQf553+KRuj+t5NciQ0tA= 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=BTZmrYOO; 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="BTZmrYOO" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8f7f7a1b80so42154666b.2 for ; Mon, 16 Feb 2026 08:45:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260339; x=1771865139; 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=9OKWWD4fVuRFCLZG1mlotGGCycPT2eMUJpgDA/iY0b8=; b=BTZmrYOOZ9CpDVXtk6rbTCcry9vQGTMaOQPUQ3cOIz9DHCCL8X5GG0E4Hd29rxtLOi fx8Z6QT5QbQCl74x8OkT88fmEuSyam1rlsAeZq0gTJRmFPIUHDAzEXV5byQyqfQmRhwp QUVis1a4I3lNXaC9muNhpHXHEt5CMDnLGYO3AvLzcF2SAzOxBF9eucUZknuBnaDnihi5 MZXfbviFZSaYVB4AQypKA2DxJ2DQDgXgGG9EWFjfCCdD5gUolJO48oXtRfeAvm8vnZUN jZgXUKbWQLiQGSVC2JdZgb1v9RHeDj55t/TWmv60i0bGBhtYPDIlxT8tfGo8lxlQrgAO 3vXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260339; x=1771865139; 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=9OKWWD4fVuRFCLZG1mlotGGCycPT2eMUJpgDA/iY0b8=; b=YLdn2qgoloQ9HKlpQ4L9BQRSX/3d5u1Tgu5ZYjIjy+3+OkMS0+5IMRGUPL0+v+QV4U d7SPUEG0LdJ6yNtVLbV4tgrGDeERAK/DWWOc0VkhXET4PBYqwVRA49iL/2zADLksarD2 zrAGDEBWX+Hy7vKQ1zkfjk8Fv+nLKBVN3CdCOG22Jg2OefdzU7G3xv98znncx1CG7CCg HNvBvO+4Eh0RexahGKHCRol2uQexOuLLivC/at4UKStPe7FbtIsoJ7ec/MBdtLq4OaSM l/E7VRxmW4zGtpUgZlsOlAfIHv+M5tS63BoEo59yjSDtW4Z1zVOCeel9FVCjug8yGprL XtJA== X-Forwarded-Encrypted: i=1; AJvYcCWobMlmIdnRqtq/ecHjWATBnyeAELhlH54UBWqxQ8UDpgrX+qFAPADsgjEvYHKNIsVEjdE9FNG09Ou8Xo4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3hNNtGFpAXEpncPqklnNtC4M0y/FPGG4bBRuEWl5jcVQzFvK4 /4djcsA7JMhVDdUFpglnrYAZ9I5eZ4/IT0pnvb6d5JFJlP4VFh9Ukpua X-Gm-Gg: AZuq6aLP+tCLwAONeYkOVk/sDBNtu/IrTS+dBgRJ9Lym/03ExcnbbafmafABkZHoPQX Q8V7ljyl/bFA+UKSwq0Im28PcECFv5IU9cBhQA3QTWvtPvOMeVCTWGoYBdxfK9r2pB7lrOg9IIF Vk2uPrmuV8evLC8XKk6AwA8xNdR7UdMGcF+KjKVKeN+XAhONB1FvPc2KmaJ1d96L53Xwg+aDELC kjqQxs5I+Z8XmQqQhbPtYeORM9aB51aaueO0pIE08YhxeeLuSC23cgGGFKP/hqxnGEZ2KqFrGdr wuPUGbMIJ7jSulg3NsKGEPNvK6qiQFsPv8ub++PgIlmvbsRZFw8imajTAsDfYTEuqJ7PyeIBxtA 0EgBVvg6pvptvRicst3g/C045XsyrL2pEex2rGlHtKXb+v4jMWS+N+u76nsWzCC1YJggBSNBOXG mFTPgWnK41h49ICzAAYlg3l5XHX97k0dfU/wE+xV1iz7rrwChWs/7Ftl8XPBjyKgwXsUuSJe6Yn z2d X-Received: by 2002:a17:907:3e88:b0:b87:2099:9f6b with SMTP id a640c23a62f3a-b8face2491bmr364262166b.3.1771260339213; Mon, 16 Feb 2026 08:45:39 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:38 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 15/27] drm/amd/display: Support HDMI VRRmax=0 Date: Mon, 16 Feb 2026 17:45:04 +0100 Message-ID: <20260216164516.36803-16-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] VRRmax=3D0 is a valid value and means that the upper bound is guared by the selected video mode. [How] In this context, saved vrr max is the max possible refresh rate ever. Try getting upper VRR bound from AMD vsdbif it exists or rely on the limitations of BRR in VTEM info frames. I found through testing, that TVs seem to reject VTEM when BRR is set to over 1023 Hz. Use this as the last resort VRRmax. 1023 is the max value for a 10-bit field as well. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 +++++++++++++++---- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 20 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 931493433439..991e2262ecbc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13259,14 +13259,27 @@ static void monitor_range_from_vsdb(struct drm_di= splay_info *display, } =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. * * @conn: drm_connector with HDMI VRR info + * @vsdb: AMD vsdb from CAE */ -static void monitor_range_from_hdmi(struct drm_display_info *display) +static void monitor_range_from_hdmi(struct drm_display_info *display, + const struct amdgpu_hdmi_vsdb_info *vsdb) { + u16 vrr_max =3D display->hdmi.vrr_cap.vrr_max; + + /* Try getting upper vrr bound from AMD vsdb */ + if (vrr_max =3D=3D 0) + 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; + display->monitor_range.min_vfreq =3D display->hdmi.vrr_cap.vrr_min; - display->monitor_range.max_vfreq =3D display->hdmi.vrr_cap.vrr_max; + display->monitor_range.max_vfreq =3D vrr_max; } =20 /* @@ -13413,8 +13426,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->display_info); + if (hdmi_vrr.supported) + monitor_range_from_hdmi(&connector->display_info, &vsdb_info); else if (vsdb_info.freesync_supported) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; monitor_range_from_vsdb(&connector->display_info, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 5de8a6918e6a..306eb7355c25 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -33,6 +33,8 @@ struct dc_stream_state; struct dc_info_packet; struct mod_vrr_params; =20 +#define VTEM_BRR_MAX 1023 + void set_vsc_packet_colorimetry_data( const struct dc_stream_state *stream, struct dc_info_packet *info_packet, --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E4A32C3251 for ; Mon, 16 Feb 2026 16:45:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; cv=none; b=lXFnnDeDUcqgOzLlDQlsoNiwaT/smPwEYyYLft0kcstI9RnBkKvRmxkh7/bI+h/Ij7tabAlPav4/UGg9xpzRTQpB/1GDWmsslC6u1R1QISy9mNdPs9ykQp0ueFkPUNUXJSlpVnCkqKM8MPCP6zG55v+aWlttPgCGw0wpQxmnzoo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; c=relaxed/simple; bh=X8isDDzvWgDdYlT/u492qakocElFjT1AmlaR1xHu14A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IeJmR8V5VCCM/xkVTLB6XJzvd4bdH/hYOJRU4ubmygTrTbVzeGEamF/GZ/9EEumkFFRZB9njGI1dMrpDIoVGhrJMP6krDiqASh0mYt+vYpyxmH25mRtgEqmfnpHMvcw1uYZ+/TxlLG2P1CjLwmhBRRM8a/PyeslVT7ogy6Y/4Cw= 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=AFI9ZT3n; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AFI9ZT3n" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b8dd0168b90so55578666b.0 for ; Mon, 16 Feb 2026 08:45:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260340; x=1771865140; 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=4ejmSd8nb43tZXdHKG5XI+JEcgisrugoqcCJvx2EkNE=; b=AFI9ZT3nbTqxoHNPwV4SlI1BAho5tJfZf9FjO6xZTLbS0bIdlO3RyyVxJu40aoliHc tmfnehkdAnHUYPgxcdFnOHYFQj7B/zKu7sxY6d+hxpUDb20sROQ6zS5rOKX8EBOfcYiM KpLsM5w49lQji1LFdNgT/7xGR7vDFr99AgKdywZROnlWd85tWJvOavYv46bWdnIbOb5p cLiH3d1lxm4YQ+Q6cifuXvck3MkVRCCRtliyU38P2JzBb6uEiHyvRhp7wue0SJt8g0ST k3mv3n2h/UgrRHjobNeCgTl1V2OAJLT0W/6lp090XgE56WKwaSHK6LGUbE475F+fU7Pa Z1KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260340; x=1771865140; 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=4ejmSd8nb43tZXdHKG5XI+JEcgisrugoqcCJvx2EkNE=; b=awqt/TUJOKqgN9LisjXe5Sfp9QiWToEw4KyWL5nztdhrsQe66b7STdsxO8WCQAwYqG 8T1ihS71WaU1cfucBTh1bRJA6CwTRd3loA9xtdvaVxrWUHzAXotcE+lOEU8BbWqyiSsE aT0xV2H9yj5hDu8zliLkf0WKVRzG3eJqBCCKoLcwQ0OMLSCFz9LR9ufuvZyNM5Ohhlp4 otWZtd0lwWdpVzNEOMTEaOpRBp/OH3AGusQEElg2m4qENYczH5yu1oYHd+za3QCdkgxI we7qm5U0L1G6hoXcnshoGw4TErl2MnbjdGB+RTO0J0kjJzy6c6OmP0eSOvrKMF+jdJ+P e6TA== X-Forwarded-Encrypted: i=1; AJvYcCUa5GbTmouU5xPvdHEfa9wZLNcOaZ79SzpyzVlWNqw/ziqD7cXu3VFGNTgGNURyAUXU8CHL/kXae7D5Pdg=@vger.kernel.org X-Gm-Message-State: AOJu0Yzw7/HR0ZCF507Q6lRvKEk07iIdxajEcnQ3NwOCRAIMjZjT7ToM YU0TvqjTY4+jwb2u799uVOD+xb+kzJWjMHa3I+zLI8z9NTnx1RUUBMnw X-Gm-Gg: AZuq6aJ08Lr+JF6p8sViH1p4zeJd0Sc7lNQ0JuKQbEtOLsxnNHVMBHMfx29QIvBCRbp u2d+CAeAeaq5yHYSn6wsUe0CocsHsktNikgrG7lJLc0dQTbPTOr1t7Du/pjoxiSfrSZG9i8RJ+p 5aHgJPNxe1t9iD2fxM4LiIbDXgRdkWXUUDXc2WWXndT9057VXM2CF552aEZpYnyJPOqfA7SP5cl QCNLaFwmp7PBbQ3mnjV1rZ3aWeIEl3veWM+EA2b7oTetn3Nl1ZuC1/3/aQRrNKQwbDvN98TPKR9 XSS4hDI2T1vQzMqriSwVoy5kOHT2dLRw+TloENZ3qgn1NFsz0RQUlDoWJ416tMUX79LinWYQzsD g6VSm5+sMeKkvKzlj0C/s4nODvUf2QGwTvyTezjgffXgU6bJEn/ItxUaCWuXX8lQrsrZKYm7s+q 6UprAnNpyWANwCWJ/Xtq8nx2cgNn/sMA+0XB9AOTIRGtKzDRnx9mnwGnZDiDELRtKZ9VZ5yKNby YPtgX5dFZSkTng= X-Received: by 2002:a17:907:2da6:b0:b8d:fc50:c2f0 with SMTP id a640c23a62f3a-b8facc5a3aamr377443266b.2.1771260340409; Mon, 16 Feb 2026 08:45:40 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:40 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 16/27] drm/amd/display: Build HDMI vsif in correct slot Date: Mon, 16 Feb 2026 17:45:05 +0100 Message-ID: <20260216164516.36803-17-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- 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 991e2262ecbc..288437ada2a5 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7391,7 +7391,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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 838701EEA31 for ; Mon, 16 Feb 2026 16:45:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; cv=none; b=BYvFT1/ejB20/ggkB3O3qpBexWiHVmJhXDjoUncr9QyMcQo/IT2oJ+s5nSWcuOsXSlpVndMLBxzTUMTa/v83cUh7qqQztVqgnP2fwl+Vy99Y8XK/bTzx9Plgr/SFpT7DNRCuVXc27vzsYZgHpnYveC6hOcZ57sV3F+Vu6pUwikA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; c=relaxed/simple; bh=ko4lTod+gT8bKfFllRq6+7suRgHJP36id9Nk/XOi5lY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OVlruqW7ST2RtgqIV9/vJJ1c7mo5yPX1+2Egg45hDP97T1f4B1jFbkLZeWqChxBztWtyae7A85aPJbK3kHTzZsLAps9loZiWKHTqhMFdECuPXZTIJCOfnj82jME0KCzjB7KU8zeAUdsrgJ/cObd9RolVUbvz/V5IGeWvB8OSUts= 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=iVzLwlRU; arc=none smtp.client-ip=209.85.218.54 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="iVzLwlRU" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8f8324d2eeso40828466b.2 for ; Mon, 16 Feb 2026 08:45:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260342; x=1771865142; 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=V3FLqJPrUOmwXQvUvRLSCbWo9qs/90WV/TQwHFimOx4=; b=iVzLwlRU/aVaiBpbZAYD9B77dqed6V6r64lJfDUg2FoPcVBKB31LgtjtknJvMLMdEc ogNCBVkFaYdFjzkTiq51Jaa2jGYgKzY2JjWChTxZG25m5oSjovMRqZ6WrHg0/8UGNsen wKCgC8i96K3uMGTitKFOHCMHGSaA3quzBL/a2re9JdgbaiaNC08WUu8mU0qx4W1U66Xg maAwA4MNzzIuLjcqQW9adteiviR6REUvTrg2v3xX9lSz2LLKjGNjxGFyF00k9WCC2E2z aKWziKFb9Z61+RXyFaHojTG06JzM4TQDZ99m79KetixT4lK0rPV2z/C3WECB44XAuv/R nqdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260342; x=1771865142; 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=V3FLqJPrUOmwXQvUvRLSCbWo9qs/90WV/TQwHFimOx4=; b=dWg/OSlEXkPrAOex/S90RPXmPByv+LTP3SKrrbiU6RLK2bEebUNP2UDNdn2Y0+Ez17 xoD+mhoppa2W2hC5PubEqbPwDsowVKzSedU+zKXqNMc2aVmx9NDN99rh4It3VpFR3Kwp SyzqHQHwLSaoqt8vNomCWrJURC0Byk6w1AUFwde4I1N34bEXcZWkYQq2/bF0aVgvKfim yBV3YDZ8/JKCyAbEQeXofrnUDCfNs62oeO2lukaFd2V5eLmkLf0EIkQxlcADAEo2/IrX GqyH4GpbF88rEQNR2fg0Gm6qAyz8IXsvPOXONDK7KJH0uW/6nyakmlB0bqTLRNaLEtUP Aiiw== X-Forwarded-Encrypted: i=1; AJvYcCV/T3yZ+p4cPSZZAi7ozSCP/b6eR1WaFyGK9C7ulreEivOfefVNHLdyTfdROCP2AdqT+zZedCGyjLFlQsA=@vger.kernel.org X-Gm-Message-State: AOJu0Yww6efWWoRQqS7TgZtwMV/b2t42vcLcje9ImKEPkOuVWNyiyfKC YIm0mm0YfMPxFeyaNmy2JG+mougZCBYtcILMIh4mF1wW+SmPSvdS+Slh X-Gm-Gg: AZuq6aJX8TFrvS8ERfF8L3b4+HQPoCifIQwzfZDuRm8cq6b0vEEkLaE7urUP2OWtN/Z m/RHNJXss/JguFovK5Si/m6ULsVKbJ3ooQHjOyAb3VR2QMg+qYsLuEYWQFg3AFclxdMzSPAZfEi ZROh6z1Q3dUbZcptjXsGPFPDjQrM38Hdn0UPlJMSwFh6139H/JyCcyCwaNthMUD2o4ZTKScibLP myiHIwa+iT3XG4eSo2wy6wOARHC+ABEMC1jYLzxolbbALtic/zApQl0qiQvEMDXk4Zk6q9fR3FH DQc3ekwYmhwh0LjLuR4lXvehvqoINTL7MajXHKAKMsb7WePrguNIe1Bv4PcltsDYrRzlsKYkTRm 3lytsaARZEIGAfFEsoZF1MJaC4ml0r9llAo05cg5mEpBciLt7ir8311gjh/uG+ZTnU9WrpqL9wp RQBflXJJHJFSlMcOjhpunXCyoORfX6LONoef1hgsKn/2HPOCZL98IPBt7PMBlIILxGqactekNL4 NQf X-Received: by 2002:a17:907:72c6:b0:b8e:92e:d2ef with SMTP id a640c23a62f3a-b8facf879c6mr396937766b.5.1771260341718; Mon, 16 Feb 2026 08:45:41 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:41 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 17/27] drm/amd/display: Save HDMI gaming info to edid caps Date: Mon, 16 Feb 2026 17:45:06 +0100 Message-ID: <20260216164516.36803-18-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 7 ++++++- drivers/gpu/drm/amd/display/dc/dc_types.h | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 690558584a0f..c24476182fdf 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -137,7 +137,12 @@ enum dc_edid_status dm_helpers_parse_edid_caps( edid_caps->display_name, AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS); =20 - edid_caps->edid_hdmi =3D connector->display_info.is_hdmi; + if (connector->display_info.is_hdmi) { + edid_caps->edid_hdmi =3D true; + edid_caps->allm =3D connector->display_info.hdmi.allm; + edid_caps->fva =3D connector->display_info.hdmi.vrr_cap.fva; + edid_caps->hdmi_vrr =3D connector->display_info.hdmi.vrr_cap.supported; + } =20 if (edid_caps->edid_hdmi) populate_hdmi_info_from_connector(&connector->display_info.hdmi, edid_ca= ps); diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/am= d/display/dc/dc_types.h index bddb16bb76d4..2efca21a6561 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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.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 B0B7B2D5C74 for ; Mon, 16 Feb 2026 16:45:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260346; cv=none; b=u+2udEoHHlmVtglVTS3l5nfoYrV5ybks8XeYz2nOXAoCKCkFCR6Cn2iAj6lA6EAbv0V64AK2Xcg2YBax0xU1HzpIxf9fYXKDWX4x3yILkHGI83rwwLiF6yWzTah0zHds5SqP7H3Taua27IQ8kJxEOj3Gb0TrTp3FfcK93qnDsy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260346; c=relaxed/simple; bh=kxumuSw7a4q+GDprWi9gl9MswR1tm5iz7dctuWItdN8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kmOZEZFX4KKWLt3OA0faZ3ef8+rg/RIQ/Vphu5ha0NiKrpmVlqw/kaiUJtToCRi32zOJdsN3O6VSMRLfGjxaZGzG1/cmG2rsbnQYhCCXPhdiOdQz65pgcbHEZFalVFtY8i1522VwRM8uU3Aywz19Vmv1WvkpxPvNSXps1rQfzkY= 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=ZFIrGZM3; arc=none smtp.client-ip=209.85.218.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="ZFIrGZM3" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b8f7fd33bd2so48126166b.3 for ; Mon, 16 Feb 2026 08:45:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260343; x=1771865143; 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=64IsVCE74snW/ULFFs+5rGbGOSbjn54hzMpEOh8RMo0=; b=ZFIrGZM3EJfZifr/wDu6Z+XoneQjZNiSR8XZ2x61xzypnDvQZZQNTd3bQ7PuATaVIg zoVHfg2ftPoWt0faNnATUPWGVMIXVMM2BpSjKMluVCS4vs7a7cvd3iFpxCyeiaD726t4 CU8ALA48z7xxeyfuAfFHKwONYP7mOyBxk9vlqFOkUfp+e0NNzxq3DcWOdbUbxOMaw8+X 7xgv62zGTXiVM0uScLqOgQPtQOQ4aTEnt80+8N5w5iAKkFVPKo9pB1kqXW6IjadmTqtn mrriwkHq4CV1TbomFOH1XDp9TJWhAwoOheiY7VaNWZJvVBie8JIj7ow0PbEtk2qPJJbd /XJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260343; x=1771865143; 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=64IsVCE74snW/ULFFs+5rGbGOSbjn54hzMpEOh8RMo0=; b=bwgDOE+1FNaqIsBVFmJHzmiDRvB4cNJNBd1lVCTz0bVGlP6Y05vHfDs5yMPcArsHG4 yVuy8plVQLwlzldja4nsLNu4ZPfWBP/v4wQfwGJRajNMT+NTV0UeMhZBkohsWvNEYk9v n7fAOcfmSt7sqrwDVaZkw3IVuTYOmo1uv3soofuHPDHxYEsafeqzbfJaBPORNirrRfF1 hLmsBCILrhXN4RKKyLbCDnXmIHmZ/Q7oOv/d9+NlKDyjIdtoqvw8fcbxwz/6GqqyK4Yy KRHq75cA9UoQwfaWE7VrG40diqgSm1Ouyy0xyIi4HdnDsFa26PtPoFy+aqtpFNtEtsuy 1ZTQ== X-Forwarded-Encrypted: i=1; AJvYcCXMOlKXt9LrYa0SH88nrbzalcm7/8GUEApCTwsTyp8smLgDPOssG8egQLXzDqtvnilNBOm7xHwCY6MlOZU=@vger.kernel.org X-Gm-Message-State: AOJu0YwNj+Gas5LQjSFfYoH9Z4XAgACVRGH9/RmVE/dfZdxQX+9gY4z1 nvkczfzoSu5BVNQ2pIk12nlLjnB0lKbNxguH3q4WkTAOKX4oDkfc0hep X-Gm-Gg: AZuq6aJq6P7aHvTtOVnptYYEUQ2FoHgKOoGOEjNZPYdfQYKKkn3CziPFpXBWkUg0ytL FPycB3wgPVDeAd60yduMXHWYm16p75gYf4+RLrDndqKFkwRQ2jzTwSxjH1HLmyiupdak3nTrNzZ pds19PPgu2FCyGefNuAUEc71klWob4OpP9beUxhC3bkEuyk6rV4GbN7Pmj8dZ8Q1qhBzdhQl/g/ gfoMpJw35iA2qhpsnl9m4la2s8SDojdvkokE70ziuWKM81Vtjt1zECPOnJaWIH37fqPRIv+Ys/M cvngDYzOY9WO5Rinb6cK62lOM0cfo6+9zEa9cETOzHJcQ1VIfrQ/L3uC8NWBP5fUwGlQfjeLUT0 tMdhHZxvsfeWxz5W4g286JelBaGHLmgngUQIjn/lm75j6UxjwL5Z8Wp8lWdeiuooEcv50vTyUrH nxpYwgjci42J19torgCUQX9BGRM14lFbSgrCAH1OPqC9jM1CyK0TCUervAyenUp07LsPVi6P2gW lMI X-Received: by 2002:a17:907:7f90:b0:b8a:f2d7:9942 with SMTP id a640c23a62f3a-b8face51f34mr360017366b.3.1771260342969; Mon, 16 Feb 2026 08:45:42 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:42 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 18/27] drm/amd/display: Restore ALLM support in HDMI vsif Date: Mon, 16 Feb 2026 17:45:07 +0100 Message-ID: <20260216164516.36803-19-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 | 113 ++++++++++++------ 1 file changed, 74 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..8e110c86bdd4 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,29 @@ 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) +{ + if (stream->timing.hdmi_vic =3D=3D 0) + return false; + + if (stream->timing.h_total < 3840 || + stream->timing.v_total < 2160) + return false; + + /* 3D/ALLM forces HDMI VIC -> CTA VIC translation */ + if (stream->view_format !=3D VIEW_3D_FORMAT_NONE) + return false; + + if (stream->link->local_sink->edid_caps.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 +529,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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2440E2DC344 for ; Mon, 16 Feb 2026 16:45:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; cv=none; b=AClMkgeXkVTSABAexgk5lKIAxWLFKlWi7a11C7OMIiy1DjaN9KBzbccdJH6lTZgTg63AjZaU32TGliG3kDR/5MEURO8lVyH3vzfyHQc/xKc57auT8NInNrUWh9Ndy67fdP3nwvJahgi5cPRnmGKS7n0E4c0sCmEY6+x6A8GLdh4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260347; c=relaxed/simple; bh=/cUe8N0dme8VPWRmPfnS/Ihfkj+oy5+/nmdafg3WadY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SyrHRtXlo4KlpDSbkJAA5BtZdGvIBzUFPca/7w9Y7mqkfRB3jMKLgM7ndKyIS9TddtavMcBn/u4JXZHWBjA4cgS/dZvQMwsWpGA5CzykoLxgzjPNRV0MP80Qe8oSvZj/B42Uh+mQMSxCJg41R/Xj5VDjzKdqSLmJZIEJj488+lM= 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=Jd0QT9R8; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Jd0QT9R8" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-65c1d6c2459so156900a12.0 for ; Mon, 16 Feb 2026 08:45:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260344; x=1771865144; 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=TM/8v34pas6+agtqG0yBbCtyfKtfnXSHfIXKjiQpv5A=; b=Jd0QT9R8ke1BEuRcJnagbLjiYerhfTwFqNxIpbWpz+2T/Oi3SL+UISAqlzt++u9viG Lel3wZdA1STKt71qPlze7BvUq/5d43njciWeQApB3svx9/ICwE1dHPgAX2iL8j1+pLvn KN5dvDbmP4bcFvP1sXAhClWDr0rw6EOOT6xlAQ6xbChuqIwG/J+oeSms2wKsknWsTY9x OLJXfOzgq3iDAO9DN6ZDyQm3vXSzvK70bLXaZCSJct5PMKNckHUNH4qnJ5lBB3n0LHsa eqGM53oIpyElwXYS8v5vxaz7Xf+ViGvV8MI3c0HWxWRHlA4mkGe7J/VU6n/MP5KqFRts PNVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260344; x=1771865144; 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=TM/8v34pas6+agtqG0yBbCtyfKtfnXSHfIXKjiQpv5A=; b=a9MgFOBh032CC+qZRza99VRjzFYvA2reN7Kt6E8ckTNFSeppAJkj4iEJx72C0aAL5B kZ2hbsGIQRQLQrHOiKIy9AOqqVRpEFlYf0Cmv4IRmN49whLfqcANmjJjmlrvQVtBDV7+ 8h1yN53dfEMpiU8y4Sil6V4rT34WklYuvXuDQloOaeV/ky136B+rlEIlthJcXEOQChup sTfSgvooTVuMsOzI8kqMZeltTe85d8wMi9HGAKtNtlcjowtFLCfi+w70XDeCr0A+ZOn/ NcLR5vab0VpX2oMpsAsNppyb3y04EzeS5WW+uZL/JMhVMj8z0wfejmEu1gcWPbOcAmnQ T/tA== X-Forwarded-Encrypted: i=1; AJvYcCVebjoBnX/AXx1nGe/kItojXYiunvV+SoaATBxMo5BWYq2+9X+Lvm5UNBQqZG1tnpKwlun6iuxoGw0Ybbo=@vger.kernel.org X-Gm-Message-State: AOJu0YxVll0YA6TjOCrYN9C55pTLG0Ic5qLq+286IbdtfgraKzUi9jNj i+HRzs18NSWzIbUxxirr2NYbNru+tDMwQYpUMyxd9ireCpEUj97/9lzC X-Gm-Gg: AZuq6aKyIFtVZnmI2itDMND69FmVdLAFm8DWv5rrzzMBPWLSGFOz6hBytvlHP6hfZE3 CNh1xdBTnlGJ22iqkD8FJT1SVH3jC2uYxhkcBnsL4Fnv0JPgjHHzE1GJ8zxj4WxmN045zQARjWU ajOScW0LsQPdL/OMAh8W9m2bh9QF4uLEzy14fVftnPnYH3sPx8/qvxlAc+Yj/pXxNvha8AjbAIH 7Q3tP9PdXilIRLkzdEai2hgWIHY73FQ3VvJvz4x3VIOEpc4AGlhmM7COevxszNRu+QJBaTKXONd NYgK/5pJ9neY38NtowL7zGmVTmSuvt1lcUUX5h9zXBptyp4C052lsNavDVY9bs8V3kfrGhF9SIQ f2nCeMNyeP6mZBX/1b6P0rk/m359h1QDgCePq7IigrlFz4oHhN5LFF4SYCOq4dQKab7x5WPLX15 JjYsC0yOC558PeuIJxnBpYncZ9rmZR00qVwVtvZv+gkIwvBoQliGUGEECjNyZ7K/6w6Ot35WSam 6p3 X-Received: by 2002:a17:906:c108:b0:b8e:9ac2:9e0d with SMTP id a640c23a62f3a-b8face3fd6fmr326209466b.8.1771260344450; Mon, 16 Feb 2026 08:45:44 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:44 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 19/27] drm/amd/display: Trigger ALLM if it's available Date: Mon, 16 Feb 2026 17:45:08 +0100 Message-ID: <20260216164516.36803-20-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Reviewed-by: Harry Wentland --- .../gpu/drm/amd/display/modules/info_packet/info_packet.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 8e110c86bdd4..53e488fdb4ea 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 @@ -541,9 +541,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.53.0 From nobody Thu Mar 5 06:32:39 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 AE86A332EBE for ; Mon, 16 Feb 2026 16:45:47 +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=1771260351; cv=none; b=TS/XylpM6XwWPtRNnv07yyXPVexhRiGPW8epysS9716sYCkKVnn9QY8ye2xustcWZgUNlJhxOkAbWR21veAhT+hlUtt9VY0K4sD4wTsYjSpthxfHOAecvBLHu6hXBDK9OcxJoaQ9bGkSvYMk/wPynMzindqN/tD2Svaywq2XIAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260351; c=relaxed/simple; bh=NhCJ7orlQCXCbPzURPTLhP0UOG+3oHr5p9LXYzK4zqg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TtWrQehwlV0C1JLbwp9rMMRk12FlawRgIYvuUdsfS+7iQTYcHFN0CnKPyNbsCK8UMZ05qevv+xiB50mQAzixfxbEI/vK+ax3HTDeG8ICB5seWghiVauu2QK2CnI9uKJNx7iXoR9ljlK6gboA8cbQBlbdPzeow/hN1Js4Pj/B7WM= 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=TEoHUmtd; 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="TEoHUmtd" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-b8de2b5a122so59443866b.0 for ; Mon, 16 Feb 2026 08:45:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260346; x=1771865146; 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=a6BfGiUOVQc89YPAV055hurM0Ll6ocTXT/P7sPP0SvQ=; b=TEoHUmtdaUzgE14i+3rqbyjtJUmbh5S8UxXbfv/pCVubffWVwUkRQVV88uZ47TliIi DRyt6raKNQRHxwBHCXkx5YFT1bbExJ7X5B2/RQanbEnjiO+PMP0AvBQ9YA5+mFJA15dH qwSD2cjrTrQcz4mUP22ayg92KdodA+4LbLQbb9cCrkRYBoCd8l7gqKVpjooXYxUYUAWn u6mh3/o6HY2rIHY2Dx02XfM72O1Cuum8hTGgzHn+mWYHU+hoLyeV6oaEPPcGfq+u6cpY Cf2JBki2aSP67S2r0aJcli975Gk7qyrrVaJVQUPVwLgzsdt8NhluIJ9zbgB0j+XV1sYb w4kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260346; x=1771865146; 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=a6BfGiUOVQc89YPAV055hurM0Ll6ocTXT/P7sPP0SvQ=; b=foFRPJcMypvxpsZXEVDK02FluT14oV/YYw3xTxQsTwIa/a2tSkHR3o0K4lE4TZhc7n 3Pt51GXSQC2D8uvtaWrouNDv1OB9WhW/bV9He1YlztdE8ThBAr+daD/XlY9YYhj80O4Z +/91ulJDADCEDPmRpQpfPdl2DZ8gsDa8/1PAGGwQFIEAH9mlU05ksMsxlLISB9JqC5jM 0OVZxvx3C/7TuUkXb4/ihHNvpDR1kLB2KROFX61VYn7mxWnuxioNQo+DmFmvubvp/5NQ UcT8BEU4wIitUT6Eeu6zHNLah5KLwMy6ALYtrcNCYu0KmJlc07SP/Hcz5DCD3IzP64QM Rx7g== X-Forwarded-Encrypted: i=1; AJvYcCUwfrxDozAl3Y35znPieAPlnqUWLagVUoahkSqxAUxEdcjpvDdEmfVpbXGvkjSi6DSS+Sn9NcAN6KCz3ow=@vger.kernel.org X-Gm-Message-State: AOJu0Yxc6//VC07d+mz2hVPMrxw26Yy427sAgT6lmsiYKNu8QCE2JdKe lXoRU70MiaugbO3gNrEY4/sWgPXOF17cxrmjc9TQpu8t8N5kE+0Qw6xB X-Gm-Gg: AZuq6aJLfDFDbC1u4gDGG2RuGeXhLmUz0aNKVDPJukmqlaeQydgoFaf/dYiBiWL3ZR1 vqADPCEQy2Finz5FN7wTh84s5cOYcGC1Nuw4NwAym84IGDcmQxZAUfNjkXDb5TIeO/zIIbfXRoV GbPPfS4gVMpFCJEjpI0xA2YWkMxREBW2igcj9nk1YkalupS/bSCQwW6hnFSXZmIJdvNs9xngyN/ WDWleArAhvRbFjlh6okfg2QVyPi4cHv9n/NcM7tEcWZz6eeW1ocf9kc6Pv9XDwk8XHOzHW1dl94 wjcL4+f9lXFoR7YS3xZS8pLgZ03a8vft28vwkJMXjWXcZCwBHV23d8G/UllxbS7n8r5fw3l8P3u P/lbq+asulq9T8MwDBTUn+yrZAZeLkpDWAdA7pXENQ9qcPZ/GkbuVfh6+ZNuCjE1GrmBYFFeh5V DGJxoxKYwr1UUAuDRfIxSdh8ZZw1Nh1c4ReTa3B5UuwVNaU33IzbpiG/KhSbuCY6lKZstxYfFQa rzM X-Received: by 2002:a17:907:7b91:b0:b76:2667:7736 with SMTP id a640c23a62f3a-b8face24653mr356210866b.4.1771260345811; Mon, 16 Feb 2026 08:45:45 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:45 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 20/27] drm/amd/display: Reintroduce VTEM info frame Date: Mon, 16 Feb 2026 17:45:09 +0100 Message-ID: <20260216164516.36803-21-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] VTEM info fram building was removed back in: commit a9f54ce3c603 ("drm/amd/display: Refactoring VTEM"), but it's needed to support HDMI VRR signalling. [How] Build completely new and more robust functions to build out the VTEM infopacket. Many values are defined but could have added logic in the future, that's shy they are not static values but already value + bit position in it's byte. Reduced blanking detection was previously missing. Use possible hblank periods defined for RB1 (from CVT 1.2), RB2 and RB3 (from CVT 2.1). Signed-off-by: Tomasz Paku=C5=82a --- .../amd/display/modules/inc/mod_info_packet.h | 4 + .../display/modules/info_packet/info_packet.c | 167 ++++++++++++------ 2 files changed, 119 insertions(+), 52 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 306eb7355c25..027113ec147d 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 53e488fdb4ea..96c84f70ed44 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,6 +48,7 @@ enum vsc_packet_revision { vsc_packet_rev7 =3D 7, }; =20 +#define HDMI_INFOFRAME_TYPE_EMP 0x7F #define HDMI_INFOFRAME_TYPE_VENDOR 0x81 #define HDMI_INFOFRAME_LENGTH_MASK 0x1F #define HF_VSIF_VERSION 1 @@ -63,65 +64,52 @@ enum vsc_packet_revision { #define VTEM_PB5 5 #define VTEM_PB6 6 =20 -#define VTEM_MD0 7 -#define VTEM_MD1 8 -#define VTEM_MD2 9 -#define VTEM_MD3 10 +#define VTEM_ORG_ID 1 +#define VTEM_DATA_SET_TAG 1 +#define VTEM_DATA_SET_LENGTH 4 =20 +#define VTEM_M_CONST 0 +#define VTEM_FVA_FACTOR 0 =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 +#define VTEM_BRR_MASK_UPPER 0x03 +#define VTEM_BRR_MASK_LOWER 0xFF =20 -//PB1 -#define MASK_VTEM_PB1__RESERVED1 0xFF +/* 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 -//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 +#define VTEM_MD0 7 +#define VTEM_MD1 8 +#define VTEM_MD2 9 +#define VTEM_MD3 10 =20 +/* 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, @@ -612,6 +600,81 @@ void mod_build_hf_vsif_infopacket(const struct dc_stre= am_state *stream, info_packet->valid =3D true; } =20 +static void build_vtem_infopacket_header(struct dc_info_packet *infopacket) +{ + uint8_t pb0 =3D 0; + + /* might need logic in the future */ + pb0 |=3D 0 << EMP_SNC_BIT; + pb0 |=3D 1 << EMP_VFR_BIT; + pb0 |=3D 0 << EMP_AFR_BIT; + pb0 |=3D 0 << EMP_DST_BIT; + pb0 |=3D 0 << EMP_END_BIT; + pb0 |=3D 1 << EMP_NEW_BIT; + + infopacket->hb0 =3D HDMI_INFOFRAME_TYPE_EMP; + infopacket->hb1 =3D (1 << EMP_FIRST_BIT) | (1 << EMP_LAST_BIT); + infopacket->hb2 =3D 0; // sequence + + infopacket->sb[VTEM_PB0] =3D pb0; + infopacket->sb[VTEM_PB2] =3D VTEM_ORG_ID; + infopacket->sb[VTEM_PB4] =3D VTEM_DATA_SET_TAG; + infopacket->sb[VTEM_PB6] =3D VTEM_DATA_SET_LENGTH; +} + +static void build_vtem_infopacket_data(const struct dc_stream_state *strea= m, + const struct mod_vrr_params *vrr, + struct dc_info_packet *infopacket) +{ + unsigned int hblank =3D 0; + unsigned int brr =3D 0; + bool vrr_active =3D false; + bool rb =3D false; + + 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 (!vrr_active || is_hdmi_vic_mode(stream)) + return; + /* + * In accordance with CVT 1.2 and CVT 2.1: + * Reduced Blanking standard defines a fixed value of + * 160 for hblank, further reduced to 80 in RB2. RB3 uses + * fixed hblank of 80 pixels + up to 120 additional pixels + * in 8-pixel steps. + */ + hblank =3D stream->timing.h_total - stream->timing.h_addressable; + rb =3D (hblank >=3D 80 && hblank <=3D 200 && hblank % 8 =3D=3D 0); + brr =3D div_u64(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 >> 8) & VTEM_BRR_MASK_UPPER; + 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.53.0 From nobody Thu Mar 5 06:32:39 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 EB9CF33343A for ; Mon, 16 Feb 2026 16:45:48 +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=1771260352; cv=none; b=ZC+4hITOH457eUwebYwYlB/D9P2ngqbwfTWT0VlY+e+z+dqImr5E+hbrd++Xqc2tdVKL628IJo5TY49dY6bPUt116D2HNsfemINrlpYV8PdcsWXgKXtZ15uwH5WSd9hS0IJMaJsCnwfs8CKKj4yMxXkQssDN0tf/cuILwdjT3eo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260352; c=relaxed/simple; bh=kOcP3O5mOyOa8QiY2J/PIz0z8zX+WWCfyntHlidhUSY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RQ0apYyZ8kIZrPy8FsvwDAkOO4KVOaSAlUBM572/b01/b+pwcOtnuPfbRh19xn1Tcyx1wc6F44T2S/8vL8vRqogNGlBQWm524aAuMAZ+FFWXC2Y2c4Y0nm2v/Htzir9rB4wQjNErfw8cfp8U4i+SzcldW8F/ZeHBF0XIBvP1tLY= 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=T8WQsDJz; 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="T8WQsDJz" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8fa033d805so46898566b.1 for ; Mon, 16 Feb 2026 08:45:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260347; x=1771865147; 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=61QqaYqAJ4tBG5OXB271IehCG1TZaMd4977PuSXDslQ=; b=T8WQsDJzSPAqcjWjjyc5QNbj145/4ZKdtIYHVNhogmdp7pM5yOd5AeQ/9Yua+jmDbZ Kz8xU6SXsP2RLrKzG1h+sih1nlZdyPCIdJOv/GShLZhH0zd/kp+Se+ZIQZDYwPcwDUTL Vqs1vaHNg6zrVVpswtUK2dfOcJiW3MFWrI72/XbW7tAk7/p1sOqXW+PScyCD8VUKkK1d pMKSOjorK1wTRnEudKpt6AGLll5527rk6sx/FMXx7qrS4OShp3Ao+whFFBXAsXqyky9e LDEc/DNCspSgN7VwCbtwIfOR7kIDQ5EMp+0c1hMBQHhIwJ+tZGFKYj0uEy0WPLQE0QKO mNnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260347; x=1771865147; 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=61QqaYqAJ4tBG5OXB271IehCG1TZaMd4977PuSXDslQ=; b=sLsd/0ng+WLUk6K5GqEnWNqsXZ33JUwkbs1XWDxyzW8ThfPUuz03AhP7/k6koASFk3 cF/vmImuc4sfV7WjcIyuADBPnWMPyDqZtgUfMN+cwmsVofYmKoiPL4Ser3GUYiNo+xgZ 5OT1GzsOSKn67sHj2wTS/HInPzwOy1Pz6/emkAykCZZLzY0hXmPfB69+7PKl6rbd40Z5 7KNn1fnmER2z7v88cM/3TQMr0IemwMMqCF/YdPcT2WJcYyLgFxyP0ZHJP397x4l/U7yf 7uHw46MDXErFkW3QVAZDBvKOZRGz+Jiz/5n0RmT804EPmhghlDJ1FuPcr+s8cPTBAg04 z8ZA== X-Forwarded-Encrypted: i=1; AJvYcCVg93Y7C31J/G8DSs7F0EyI6l/YHsUefe45E9JyUu2OoygBipxy2OF1qA8lqBZMRlZig/Zff1kGsTWTvoc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9CsFzTEM0vQBxYWId7kp5SsuMZHBXJKUll6jwRDr6uMf+ilbh YDWguhFhqFg5+f3aWZ2pbdHxTh85zWY8At59lWfJirP1+5IAtK8M30qY X-Gm-Gg: AZuq6aIXe/ZQPGhGdDVEamH38EN8LNe1wIyFNhwOK6hugijXIR0hYFNlK+kCR7LhTaD aAlYPciWUPeItF/L6DpBWLdyb2JKX2nEA5fLo1L6xjCJnYa0jwt7iFVQTV6ht5qT81zL7owIhJa mbfGWw1dCcybHXU6hH6uts5MlkTr1griO5hif426omYWdz/FclkMlqldWiUbxejmfWNY/R5dgzS CS1an9C5xhprDMj1T45tnxdauw5G2crMHkFd742ZTAcD1EIiCpHaHydcWRZqc6kz2ZvYXlQCrCU Jtq8jSswK1AVwQtpjEY7GH1Rg74D/yPmXfEBUJHZqEdlc8m2qXDQY+v4KuFYKkGxT0bofHRked+ FaeG8RszSbSzEUICj20so6K1NEcEDxKv7sD3NwjR6+Lcgp3opSmJvZBfVMsONkN/P+d2qei1bIy MNdczwImy6wcW771w4XQbFgISXELTS926aiF9PP8HonGX+kJItgvjQxnQg7n7oNb55CuQu+aH0c Z4p X-Received: by 2002:a17:907:3e88:b0:b73:59b0:34c6 with SMTP id a640c23a62f3a-b8face510e0mr348090166b.4.1771260347159; Mon, 16 Feb 2026 08:45:47 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:46 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 21/27] drm/amd/display: Enable HDMI VRR Date: Mon, 16 Feb 2026 17:45:10 +0100 Message-ID: <20260216164516.36803-22-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 | 15 ++++++++++++--- .../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, 18 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 288437ada2a5..6a2806cc800a 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9629,7 +9629,10 @@ 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 ADAPTIVE_SYNC_TYPE_PCON_ALLOWED || + if (aconn && aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_HDMI) + packet_type =3D PACKET_TYPE_VTEM; + + else 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 @@ -13419,8 +13422,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_info.= freesync_supported) { - monitor_range_from_vsdb(&connector->display_info, &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->display_info, &vsdb_info); + } else if (vsdb_info.freesync_supported) + monitor_range_from_vsdb(&connector->display_info, &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 027113ec147d..03d37b6f1cd0 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 96c84f70ed44..7106b409ae54 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 @@ -699,6 +699,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.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 40E6D33374B for ; Mon, 16 Feb 2026 16:45:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260351; cv=none; b=icxTR9KVmzucHlZryND8f7b80Qccum/4WcRjWFOhqBp0eaSqoQEW3VTMGbcBG2JgrULscub8XZa0FaH5vWe2H3P8hehyE0ylsCW5fIDC0HMqLB3o0oCdTfJSXJZ6YpQtC4IhknSESPJ48QLgCw3Hk4AE1SWUnh2t61oX8We7RZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260351; c=relaxed/simple; bh=jKB9X9q8V1NcWdU0IJOjuOT9VCaoDl2bAgx2qF+cje4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dBAPZ+i53DgIKaNbEotwkpSZMecZZSJ1S+N5gqwmqDuZHYUHcYvZw3smYsr80EfkBSUUOQbu2++fdDjlnqjW9sIEmvivvoQdUXpP/S0pvM4uWvB56MeCvAhizJWgU5mDiXMvxsZI53xE9b6uTHteV0ZMk8Kvavxm5a3ByL+lVXQ= 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=IXCb6IuQ; arc=none smtp.client-ip=209.85.218.54 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="IXCb6IuQ" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8f8324d2eeso40830866b.2 for ; Mon, 16 Feb 2026 08:45:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260349; x=1771865149; 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=pvZ/+fVRqmKiJ2IIikBQGPpOWd0BdH2EkluaR3gmOLg=; b=IXCb6IuQOqZb177kTrnwqwzuVPHNnhSKPFku8pt/burTKHc1VbTjXgzENHIOBR5c5J vI4tMxGhNYtYlu/4iIWpdLEUVZSk1w8radW4429Ti9KjYO4+wjCX2lZB+WJuPYAiARNt 7AfK7UYCZKp5wMlxXRaIweZov7wqpZ2wovWF5tra+FXXhhFNUCDT47MZyEvinswLuqHs XFUAzqjzukVKEbu5L94uD1GOzJhs/dgiiXh8kWe9xlvUs2cGONNBjaYAbN6CK5SnaBwF BRLS4vuv2yLEiOcvrZAZTKqqgkYgnl3P/7KF3hmwn/IaJjuSEBEZghRTQDTNZFYFrAG9 +O3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260349; x=1771865149; 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=pvZ/+fVRqmKiJ2IIikBQGPpOWd0BdH2EkluaR3gmOLg=; b=pdeu0TLmMjwIzayfCZb+q4u9p+hAb9qpifrY9kHcO0keZN+BpnaWxSJtKUvH31pTMr hFXgtIs6dDV7Dqgv7uy9GHDl+3AodphYiCNl57b3U2XdPMzcBjS7CsD+zUQLHh0DAFsL 9TD/OY7EBX9yAEfZfy3V5w3Z0OG9pVXijqdTCYCMeLNzAMnBEQU5ZLzaZga+WrCdwmjb kQV+WKcKdG54hvBIB0/RhW0KHSWQs6lqgs+o76aPmCdbRgkomAtKjc124yrlyk5utIzD Zckd1Ha/8L9cdr4ZERyRJ6Vj1PzeklSPXKNzoES6HYUdFSQb5AsKqEVwhdBILc7kyEK2 CW0A== X-Forwarded-Encrypted: i=1; AJvYcCUJAkvbhkd5BF8abi7Em6LQAkMVm3uuM/eYx7pUiqHfuy6wYIv31Hd/Mo04+fWgJOL/9aGUwa7TVzCow6w=@vger.kernel.org X-Gm-Message-State: AOJu0YxBjZ9z1iHhkv3SPQs/MSPJM9l+pneE40tPSm5NXSKSATyvOyEA kx+TXx33+DJ8Go+hRCpoGEchzIvGzk5OiMWglsYz8dt0zMUo4HICXAnR X-Gm-Gg: AZuq6aKQEpNE/ZmiaFPMKS8LJh/VJrBepSpKeEw0wNZT97fiqiQJGYSptCXub9NQS/U KiYDIrtLdQxfUympYM9feUyixJo30LJowN+iCJVOY2cUkgLro/Fb1EuiAAyeEtWVF2qk4E/zBnR Cm9ly0gFdZV/d987wt7nFUM9ToIv5Z3g8A/GGwQShNToaGCEm8lm4wYynTDfLjwh1fBpZCYIHqi r6IuErl8Z4WN3l22juAW/ZUApi2j87Tcl9o+anghM5MMY8WL24y6fxBIrf9Km+iEs6CvVM0ZzZ8 zARWqGN36TcfPFu3F7XVgvIhBc8ND4HIoDzhTHPaZjEWvIxcgW1nRbNqs8yycPAi0zZ7zUvXhkV i5eOzixeX3jeB8v7rw2zbCA7z4SAnCOvAmZOu6IWvMrMnAUPelT9BDeieZ220SgxoUWidvZOE31 GcnX7ot6ACYK6ignmPhQgnzEJK29CWH9YpP7TMsBdo640UBmkzuNbhqIzEBXYlgctMMhJBrr1gM cpJ X-Received: by 2002:a17:907:3e88:b0:b73:59b0:34c6 with SMTP id a640c23a62f3a-b8face510e0mr348092966b.4.1771260348524; Mon, 16 Feb 2026 08:45:48 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:48 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 22/27] drm/amd/display: freesync_on_desktop support for HDMI VRR Date: Mon, 16 Feb 2026 17:45:11 +0100 Message-ID: <20260216164516.36803-23-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] Many TVs and other HDMI sinks suffer from blanking and possibly other glitches when VRR is toggled. With FreeSync present on such sinks, they behave like the signal is always variable, even in fixed refresh rate situations. DisplayPort and eDP enforce seamless VRR transitions but HDMI unfortunately doesn't. [How] Keep HDMI VRR toggled if it's supported and not explicitly disabled. Add logic that control this behavior and use this mode by default until it can be controlled by connector KMS property. Functionally, for an end user, this is the same as normal, fixed refresh rate mode. The only difference is that sink is kept in VRR state which enables seamless transitions into/out of variable refresh rate. Uses the already established freesync_on_desktop field and logic. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/modules/info_packet/info_packet.c | 8 ++++++++ 1 file changed, 8 insertions(+) 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 7106b409ae54..7e0adb90af39 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 @@ -633,6 +633,14 @@ static void build_vtem_infopacket_data(const struct dc= _stream_state *stream, =20 vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + /* + * Enables FreeSync-like behavior by keeping HDMI VRR signalling active + * in fixed refresh rate conditions like normal desktop work/web browsing. + * Functinally behaves like non-VRR mode by keeping the actual refresh + * rate fixed. + */ + if (stream->freesync_on_desktop) + vrr_active |=3D vrr->state =3D=3D VRR_STATE_INACTIVE; =20 infopacket->sb[VTEM_MD0] =3D VTEM_M_CONST << VTEM_M_CONST_BIT; infopacket->sb[VTEM_MD0] |=3D VTEM_FVA_FACTOR << VTEM_FVA_BIT; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f65.google.com (mail-ej1-f65.google.com [209.85.218.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DA441FF61E for ; Mon, 16 Feb 2026 16:45:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260353; cv=none; b=tjPQKZyY7k9BP7Hbs7REMZwKn/SQYp2ZNm/zw8iWbNoX46UFSsLjVqK84BYIPsJTfjc3WcApoU5SOaIzM0eCoZDk19X/JNA3g/4fcNFlPqiKLn0FgDYOsoXcHPOo8op4eQ505RxlotBGL3+G8R7Wnymm/PECMivS67vnbOfAAak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260353; c=relaxed/simple; bh=8JKSbN+ojDSOaSy4mJMfewsIHZ4i0Uszstnts+9HmmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W2GHoUJLpZSjkSqXDNnMXh8sA2FXSBtUbMNOUnGcJf0mKqW5ychrSzzXED/SAdWLAvx770hh5cUOHcPL1+flcOc0NbIqUtfrcjRVIFG1UOxCNWYWGUE4XTu2tyesdic5drxXr90lVRCZ/R2fUnMfXzoZwuksxjupSDXoEVbxpMU= 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=GM4z8Qp7; arc=none smtp.client-ip=209.85.218.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GM4z8Qp7" Received: by mail-ej1-f65.google.com with SMTP id a640c23a62f3a-b8de2b5a122so59444966b.0 for ; Mon, 16 Feb 2026 08:45:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260350; x=1771865150; 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=8GHywGhoa9nMFX4SKcKZGp9++GBGqwr6bmHnyfGvrOs=; b=GM4z8Qp7BcWYYOHD0z97bINUTUuBWDNEkToUfuHB85BFNQu2nBLtAi1LE9uecwq8H8 Wu2hQRnceXV/RwCz9E1AYm/4F0c4RF2DSJ+wr1vD1brBbH64is1Y32Cmiu7skL8nRJr1 c5khwjyKDppmMsLZ+2EQ+YBLQKB1NJChWnVs8OlGPVqvpS6LnVQ4d/JaDfBQblONPYrt mSS69P/k6wyCm4/+gFVRQ56zZnraA7s3IpwKVAGbIr8WaGLZ03GTG3WS4b2T2dQnEYqk bxzRhTx3lLUQ2HhHpcIJGmUoG1D9YGAOYIC++NCwuc6E8mCxV4nlAafAxgqEaiMGX4rx k4GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260350; x=1771865150; 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=8GHywGhoa9nMFX4SKcKZGp9++GBGqwr6bmHnyfGvrOs=; b=SqTNUDSgZh92Xg9ExWuP7WJy+3sYjV3vyMQ/oKUmldpJyC2aHWLNirpHOyvemRjQO4 Wf/O+GVx7zMBfuAAswgSVE0WfywG/6DKti/8bYwSTJnj1PF106W7nN/Yv+R9ZHZ58iZn PB30IEimsXrPYFXjZq8iGGkMt/wVMTgJnZYI4SU9GOtsypi9rhBaFzCeaJwsdFTbdLN0 x3xAet4d4MGehN3MJWAqq4SK7khb1jXc02AI0GlZptTmCJTIEavuEkbILppXPDyfLJsd mW+8HOIgLUuXg1Mdc2rj9HYi6gRqABqxXiZHNknOQ9jJu3LrJ6AhPH5rmwP7pSeEfjRN 9QCw== X-Forwarded-Encrypted: i=1; AJvYcCV1ndJ1Ro4yIwsdFC4P6DyEWKD88tmgIwI17WRU0mDYVncxfRi5TbtxSH6SF0ImQ7ShQYFo98DfD3VzFn8=@vger.kernel.org X-Gm-Message-State: AOJu0YzyrIkY6XlNi/QXyUogMwHG33vLe7f8yop3a3AjLKkt1U6l1BXE taFS7VZHHY88v7kaLsmajguPAZ1+Ihby2lLg8h7QBH8d8oP4nGBKHzj3 X-Gm-Gg: AZuq6aI5caY0XBVzv9yxt7MOBI3MilcbqV+GvD5zRc1Cl9XB5oiKmpS2aPqwdAtyrGp mIZ1UT9j+REjNlTb5Dq19YvPGZ22INCDdEaQvwa4yyquJlYKDXbJ7SAygX6g8M1iaqthLzqh4Xz qlE7nOKPD1E7Firf490oLvCcnltU3jFA9T0vG4n0t7g6MHQmNDTp1WIUFtwIy2qC8HKHM/dCuRO Tn4LhEbMVIGyVVREFHhaelKYjOPIstLHzWq/VivJYrnKkNQu7t9BTYBLtBYARWW0rXntVTxd1Ey 3z5Y0x5hcJ7z1GMAS5PH2Nd0v+o4EWVPDz7LI6lyn2tGLJQ8ysCJagQI3qnEmmhQCflI2PYb/N/ BwbJysQKkEM2UPgBkUhrvGyHlni6P05E3PFuRy+MngFx/mqjSWvNq0Uxv8i8ZXxV5swZVaK2Q97 Pu+GDET3RxoZ3dtbkh03CBfa0fW0ygJxewJETRH9oSBKOI/jLKFzOCMvTatFsn8bc7n4ELLmHPm 44EUX8gi3eExZ8= X-Received: by 2002:a17:906:6a0f:b0:b8e:7dcb:7f23 with SMTP id a640c23a62f3a-b8facc9d34dmr363796266b.2.1771260349806; Mon, 16 Feb 2026 08:45: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 a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45: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, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 23/27] drm: Add passive_vrr_disabled property to crtc Date: Mon, 16 Feb 2026 17:45:12 +0100 Message-ID: <20260216164516.36803-24-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Many TVs and other HDMI sinks suffer from blanking and possibly other glitches when VRR is toggled. With VRR present on such sinks and vrr_on_desktop enabled, they behave like the signal is always variable, even in fixed refresh rate situations. DisplayPort and eDP enforce seamless VRR transitions but HDMI unfortunately doesn't. Keep VRR toggled if it's supported and not explicitly disabled. It can be used for any VRR sinks, but this is mainly targeted for HDMI. Functionally, for an end user, this is the same as normal, fixed refresh rate mode. The only difference is that sink is kept in VRR state which enables seamless transitions into/out of variable refresh rate. Basically, the driver shouldn't change it's behavior around VRR_ENABLED set to false, jut keep sending info packets/frames with VRR/FreeSync/ G-Sync/HDMI VRR active. Enabled by default for sinks that claim it's support Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++ drivers/gpu/drm/drm_crtc.c | 2 ++ drivers/gpu/drm/drm_mode_config.c | 6 ++++++ include/drm/drm_crtc.h | 9 +++++++++ include/drm/drm_mode_config.h | 6 ++++++ 5 files changed, 27 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic= _uapi.c index b2cb5ae5a139..a3ad2fe3306b 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -383,6 +383,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc= *crtc, return ret; } else if (property =3D=3D config->prop_vrr_enabled) { state->vrr_enabled =3D val; + } else if (property =3D=3D config->prop_passive_vrr_disabled) { + state->passive_vrr_disabled =3D val; } else if (property =3D=3D config->degamma_lut_property) { ret =3D drm_property_replace_blob_from_id(dev, &state->degamma_lut, @@ -448,6 +450,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc, *val =3D (state->mode_blob) ? state->mode_blob->base.id : 0; else if (property =3D=3D config->prop_vrr_enabled) *val =3D state->vrr_enabled; + else if (property =3D=3D config->prop_passive_vrr_disabled) + *val =3D state->passive_vrr_disabled; else if (property =3D=3D config->degamma_lut_property) *val =3D (state->degamma_lut) ? state->degamma_lut->base.id : 0; else if (property =3D=3D config->ctm_property) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index a7797d260f1e..4f2c871552e5 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -322,6 +322,8 @@ static int __drm_crtc_init_with_planes(struct drm_devic= e *dev, struct drm_crtc * config->prop_out_fence_ptr, 0); drm_object_attach_property(&crtc->base, config->prop_vrr_enabled, 0); + drm_object_attach_property(&crtc->base, + config->prop_passive_vrr_disabled, 0); } =20 return 0; diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_c= onfig.c index 25f376869b3a..542d21d7ca36 100644 --- a/drivers/gpu/drm/drm_mode_config.c +++ b/drivers/gpu/drm/drm_mode_config.c @@ -340,6 +340,12 @@ static int drm_mode_create_standard_properties(struct = drm_device *dev) return -ENOMEM; dev->mode_config.prop_vrr_enabled =3D prop; =20 + prop =3D drm_property_create_bool(dev, 0, + "PASSIVE_VRR_DISABLED"); + if (!prop) + return -ENOMEM; + dev->mode_config.prop_passive_vrr_disabled =3D prop; + prop =3D drm_property_create(dev, DRM_MODE_PROP_BLOB, "DEGAMMA_LUT", 0); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 66278ffeebd6..59dbb7ce1358 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -299,6 +299,15 @@ struct drm_crtc_state { */ bool vrr_enabled; =20 + /** + * @passive_vrr_disabled: + * + * Indicates if variable refresh rate on desktop should be enabled for + * the CRTC. Support for the requested state will depend on driver and + * hardware capabiltiy - lacking support is not treated as failure. + */ + bool passive_vrr_disabled; + /** * @self_refresh_active: * diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 2e848b816218..541cfaba67a2 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -679,6 +679,12 @@ struct drm_mode_config { * whether variable refresh rate should be enabled on the CRTC. */ struct drm_property *prop_vrr_enabled; + /** + * @prop_passive_vrr_disabled: Default atomic CRTC property to indicate + * whether passive variable refresh rate should be disabled + * on the CRTC. + */ + struct drm_property *prop_passive_vrr_disabled; =20 /** * @dvi_i_subconnector_property: Optional DVI-I property to --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 DDA5B2D0C9D for ; Mon, 16 Feb 2026 16:45:52 +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=1771260354; cv=none; b=Go68nI3SeNWBkQV/v7muL+VfxtZiesc66jZ/xr5CdcDKSE1xytZY3KFKas0ujdxDXyT8019JZcshX+ZA+eGexprNSynHJB1Azc72QRLDAH/4w270bQmmhANdJjzMBQmJSMUbZ9beiQIy1NoF6N+7FhqmjmCQjuzPIuS8Qugnr/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260354; c=relaxed/simple; bh=i1XejaUvFJ0YAaujKNbUEx1X8Wxs7QoHR08OZmN6awQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=jh5dMD1CMqTxsivxnvVAMG3twgx86egEUxx33aiceu6I2maFpKCOVfqMbIp2XX5VD8rRE6jyILU6ISskKb8U/RA9FGBOPT4ixigG64Uv1/qLVdWtvjb5Pp6B9NaYAdEh6kZmmpcsIskb4rA/Fmp517CyRNBAGVRcNPQ0n7w7nx0= 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=hrPFtqUL; 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="hrPFtqUL" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8f8d9b2c50so27325366b.1 for ; Mon, 16 Feb 2026 08:45:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260351; x=1771865151; 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=il27DEcymwLna7hK1ELrrYkujYqTcKdi5syqhicz4KY=; b=hrPFtqULzXXsytQvngddRIIqOfZUhhYfzRj9gmbQFrJj8IGI51cfd/ca4R8nj33QZZ zGaYy2arvbMBPcF221GueXnk3Z+qAB/diK1NC/EmrrVr/o+F+a9XOUH3lEXpca9u15qa DABu3NN6wHHBwV8GKfSId9mh9LsNql/dXranyZngFRM3fj468mRfjD0OCjhx1LGMD/OU /bEX1pIFDW3vXjhtZj4hp8YOPMtdX9Tfli3jaAcjDoV8Zccz4ktWbwy5AxISHT63ETwx pqzuOcKFHDwCY7suLX5aiWi9nj7TmPRrxRoRUimvgNHriMqcfOGwh76xIYKXFYLf8H0A nTdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260351; x=1771865151; 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=il27DEcymwLna7hK1ELrrYkujYqTcKdi5syqhicz4KY=; b=o3kUyZilBh3oCe7pEf5Kh37Cafx/wnIBsDyQ1u24xYwkdA2aO+1LfiJIPhB3PtIPH4 29HDW8G1Jpcnl0lCsFmjTUa+wXuxDOnjyLwzDBlZEyDQbw3/PwLx1vpKpXY6R905t7jx 3ewY8w1QZIctNN0kIbZJQlH4HSzshplgRED2QWDnMir6nges7FPRKhYXZQpeXT7U87w2 +KS948cwFw7leIGf6c0BLRtLzeVve6K5pIEqYKukbUp2ca6y/4Pk/oyWgilNk4bmIh9q Jx0FdSDqHNbpLadaFeTu7zFF8JnyvXKzxagB5IXeqTJJ2Z7X6v304pQdoLa/j1wBcju9 g9mQ== X-Forwarded-Encrypted: i=1; AJvYcCVMoEP1Le51KwUpNxMk2yzI8KhFUy4l30vZBlCfT/nIS11KXEk/kP4DdIpnuW2ajBzm6dscf/GWh9SkNxA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1wZTk1T5uRVHNA1FF2xuuu8mjyoSQWvDKL04sLXEu0XwlRm/W JjbrbRyg36BIqg0Md7VeL5dVXSNUXnUMxB+8spWAofa6Ol7ZuBFWXV2D X-Gm-Gg: AZuq6aJnP+TFcXTm13xSf87MieP4jVS9KJSGQjkOGoDXdkpDh+zGZ5s03BkA7Q92q4T QzgBScOK/1rqar5PVt+2mNK3zsbOIx644bKkocAAJFCC3oTU0UOxHcj32CUM47EDnZCtXfqR2m8 uRL40hDgrbeTHoadJHsKZDDI53Qc+QCU6XceL2Lg/bgn77A5sJLMqVfZn808ZASKe2T6DDAIChb l9gtRa+v5raReMqdct6Rx24/TFBGGoZdMUtuE2f91sOOWyIzZB1EYUmfBLCr/0wD+7gYQGcvldH 4LERJYb0F0DnrXC7rrHlhBXoG/mBP7PJdxRfeG6tycHz5bDVaxdbJsI+Ffm1Hl84/iYsqzYWN3/ QcpFzh02L8A25oS/F2o0PJGUUugFvLnTAWzKNnLnOQXgLLMAsleSrFWuqu3oxGkSZvv/ggepq29 4/3Hem11PEpKsjvTPYv+lB6EyGRJzdDbPkzzSJRN3MCQ//+phZ5uldxPDXoPCWioi9v39jieoZV AJp X-Received: by 2002:a17:906:6a24:b0:b87:3c3a:cb7e with SMTP id a640c23a62f3a-b8face00ea5mr368595266b.6.1771260351124; Mon, 16 Feb 2026 08:45:51 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45: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, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 24/27] drm: Add passive_vrr_capable property to connector Date: Mon, 16 Feb 2026 17:45:13 +0100 Message-ID: <20260216164516.36803-25-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Supplement to the passive_vrr_disabled crtc property Drivers can add the property to a connector with drm_connector_attach_passive_vrr_capable_property(). The value should be updated based on driver and hardware capability by using drm_connector_set_passive_vrr_capable_property(). Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/drm_connector.c | 73 +++++++++++++++++++++++++++++++++ include/drm/drm_connector.h | 15 +++++++ 2 files changed, 88 insertions(+) diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 272d6254ea47..5bb38b80e214 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -2346,6 +2346,16 @@ EXPORT_SYMBOL(drm_mode_create_scaling_mode_property); * * Absence of the property should indicate absence of support. * + * "passive_vrr_capable": + * Optional &drm_connector boolean property that drivers should attach + * with drm_connector_attach_passive_vrr_capable_property() on + * connectors that could support keeping variable refresh rate signalling + * in fixed-refresh rate scenarios like desktop work. Drivers should update + * the property value by calling + * drm_connector_set_passive_vrr_capable_property(). + * + * Absence of the property should indicate absence of support. + * * "VRR_ENABLED": * Default &drm_crtc boolean property that notifies the driver that the * content on the CRTC is suitable for variable refresh rate presentation. @@ -2364,6 +2374,17 @@ EXPORT_SYMBOL(drm_mode_create_scaling_mode_property); * * The driver may place further restrictions within these minimum * and maximum bounds. + * + * "PASSIVE_VRR_DISABLED": + * Default &drm_crtc boolean property that notifies the driver that the + * VRR singalling should be disabled in fixed refresh rate scenarios. + * Functionally, psssive vrr works the same as VRR_ENABLED =3D=3D false + * but works around displays blanking (mainly HDMI) that do not support + * seamless VRR transitions. Also helps with brightness flickering during + * VRR transitions. + * + * Passive VRR mode is not that useful for DP/eDP sinks where seamless VRR + * transitions are enforced by the standard. */ =20 /** @@ -2397,6 +2418,37 @@ int drm_connector_attach_vrr_capable_property( } EXPORT_SYMBOL(drm_connector_attach_vrr_capable_property); =20 +/** + * drm_connector_attach_passive_vrr_capable_property - creates the + * passive_vrr_capable property + * @connector: connector to create the passive_vrr_capable property on. + * + * This is used by atomic drivers to add support for querying + * variable refresh rate on desktop capability for a connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_attach_passive_vrr_capable_property( + struct drm_connector *connector) +{ + struct drm_device *dev =3D connector->dev; + struct drm_property *prop; + + if (!connector->passive_vrr_capable_property) { + prop =3D drm_property_create_bool(dev, DRM_MODE_PROP_IMMUTABLE, + "passive_vrr_capable"); + if (!prop) + return -ENOMEM; + + connector->passive_vrr_capable_property =3D prop; + drm_object_attach_property(&connector->base, prop, 0); + } + + return 0; +} +EXPORT_SYMBOL(drm_connector_attach_passive_vrr_capable_property); + /** * drm_connector_attach_scaling_mode_property - attach atomic scaling mode= property * @connector: connector to attach scaling mode property on. @@ -2968,6 +3020,27 @@ void drm_connector_set_vrr_capable_property( } EXPORT_SYMBOL(drm_connector_set_vrr_capable_property); =20 +/** + * drm_connector_set_passive_vrr_disabled_capable_property - sets the vari= able refresh + * rate on desktop capable property for a connector + * @connector: drm connector + * @capable: True if the connector is variable refresh rate on desktop cap= able + * + * Should be used by atomic drivers to update the indicated support for + * variable refresh rate on desktop over a connector. + */ +void drm_connector_set_passive_vrr_capable_property( + struct drm_connector *connector, bool capable) +{ + if (!connector->passive_vrr_capable_property) + return; + + drm_object_property_set_value(&connector->base, + connector->passive_vrr_capable_property, + capable); +} +EXPORT_SYMBOL(drm_connector_set_passive_vrr_capable_property); + /** * drm_connector_set_panel_orientation - sets the connector's panel_orient= ation * @connector: connector for which to set the panel-orientation property. diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index dab9d5521f41..30dd9737bfe0 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -2101,6 +2101,17 @@ struct drm_connector { */ struct drm_property *vrr_capable_property; =20 + /** + * @passive_vrr_capable_property: Optional property to help userspace + * query hardware support for passive variable refresh rate on a + * connector. Drivers can add the property to a connector by + * calling drm_connector_attach_passive_vrr_capable_property(). + * + * This should be updated only by calling + * drm_connector_set_passive_vrr_capable_property(). + */ + struct drm_property *passive_vrr_capable_property; + /** * @colorspace_property: Connector property to set the suitable * colorspace supported by the sink. @@ -2495,6 +2506,8 @@ int drm_connector_attach_scaling_mode_property(struct= drm_connector *connector, u32 scaling_mode_mask); int drm_connector_attach_vrr_capable_property( struct drm_connector *connector); +int drm_connector_attach_passive_vrr_capable_property( + struct drm_connector *connector); int drm_connector_attach_broadcast_rgb_property(struct drm_connector *conn= ector); int drm_connector_attach_colorspace_property(struct drm_connector *connect= or); int drm_connector_attach_hdr_output_metadata_property(struct drm_connector= *connector); @@ -2517,6 +2530,8 @@ void drm_connector_set_link_status_property(struct dr= m_connector *connector, uint64_t link_status); void drm_connector_set_vrr_capable_property( struct drm_connector *connector, bool capable); +void drm_connector_set_passive_vrr_capable_property( + struct drm_connector *connector, bool capable); int drm_connector_set_panel_orientation( struct drm_connector *connector, enum drm_panel_orientation panel_orientation); --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.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 710DD3346BB for ; Mon, 16 Feb 2026 16:45:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260356; cv=none; b=rV/GK+fHZYfWNKBNvhnNgvu3k0tExylE/SER6pquq2MSGb2890c26lLS0DXZNsjMR9Efpg4PF0nLuN8Cx3TtQsd22JjjWt/NgdOnDryjhJE6ppDv0ltEfKFDqSAThpx2YrtqGSfYGHPUQcqhMtz7XGkgtfMw3sHACkA+lQYy51A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260356; c=relaxed/simple; bh=KHA3BO4VSX5IZuH6JCAwdpfT/KK/sYqiICV2ZAk88X0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QHOxTJjEq4um/DsQeUCvT6fl3CYhb/ajW5gf1EdRzsSU9wCIqNL+9d/ClTO+yBf8+OzNfOzOFbjJc/qNhA6sNFwbuIIxHFuv441t+iAbTe5ZPouIEz7oPIIyHfNLUsbJlP1uh8vyyXqHjqYw5lTD9smIScZUwMMLG1uBiqpIiq4= 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=Nqt3nyBU; arc=none smtp.client-ip=209.85.218.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="Nqt3nyBU" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b8fa19e6186so64126766b.3 for ; Mon, 16 Feb 2026 08:45:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260353; x=1771865153; 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=OELXgTEKNOln1QbMyB2O7aWm6BMQADWB4ffEkfUoOx4=; b=Nqt3nyBUli7xjTibaO7TVUyzNG5UyRDr96kXTxQEH6Wn6/ta1e7TGvmH/M5sTzgezE ojLXe/LbvGuFFl7RBsxNdfzWnYjvzRDkLwCf8ZaT3GWoKyi5fg8QPdyyOmAE21SUnjZ8 Foz5jslFhsUQYKtHGukcfqqJ6CmveCXkPOSL5yq82AyuByMFPAjRiaEX5ps8OU9hD1Tk S9sasxjEiDGi0eOxb3vBJLpeXPjyQHXzz51n6XDvwNhO/N9mwbnU3O/11MiF00rI6fcT zIbbtJgRrpTiFdYL/f0O3NBwhLWdMBXbuzdtNYZiiGqrayZ+jdvcsiO6kuwMtci8Be6D 3HwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260353; x=1771865153; 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=OELXgTEKNOln1QbMyB2O7aWm6BMQADWB4ffEkfUoOx4=; b=OHsF1kvYGyx2KGckBjWovmEo7skClwia/qJME3wTNsWJPireWH9e/FBQyaFNzC2uFc YbEAq7qgIWtsjiU++GMJFyHk5FZSejI+7abbcGNDadfZvL9w4yaSmDhd4Nsi9BDWTvfl 8FUvApX2w9/ErWEuTYv1DD65XMz6FUMYF67N7Ud8lwx1NLdeOc73ZJ+ZdoHr4oFuIYQ7 EIFLwpCpmCHLK/EAqNsJH4u1jyz4uLhyk6RyYl32Jy38tRq3/tyUx4RAytfSeTj5rBwv CSZDM8PrNZA2vvRnaOaG1Xm14xFcqt3AmNSUOJG+nSSbdZ50/IsiyYoj+TXofvx+TJnC 10Yg== X-Forwarded-Encrypted: i=1; AJvYcCXdK1K5sOlUKxe2m2Nq3HRkknVNRifZDvXmN9JN9A9Tz/UelIimnlNIAWyCa+SqshSoU74E0sd8lYrfCg4=@vger.kernel.org X-Gm-Message-State: AOJu0YzMtwpRSjguXA5iP5rxgRAqv1fIGLFvTTpk/rrMh1KpqyFMGBYt clkkuegZwXZcMM5GeNJsWfWSDmGjxC59yfm3EGgL/V2jXtPazPvHDm4g X-Gm-Gg: AZuq6aI23l/kvcK7QZWTypwCmsL/1g+hNkbtAaW98kxFs6olg3hGCfr1wEqLFlH/cM2 q4lSX+c/zJjmsfrQKfexmn0yIeNJptc6AaZWxALH6gTuuJ9s3RZCKhOPiusZ+YCwrDnCo3PxZqf Fj072HFzSnERx7ySYzZgLZCBRD3e9KgT/zrXg1RQacwdByb6/7wk33KxKvWKcWuKsFoRmbLTDM5 i7m26dWhb/HmfcvNEBcjHFM1sfm9Fbr1sC9DhOrq2eoDpjzIc0H7LYoKnTwvrNW7bCSMsVexP/k QktuHMbo++ywMnxDZXkpcY0EJcKsYwPywVXbXJ21UBDcaTqTtdeI/s9J10THnI11P9LmIYexn8k ojcoLNVfrGrK5blggBB1+63ZRzbsFteRMSqBch4cpX916pU9vSEEEbIhW7Y29sRB4OO8ObRUvMn SEyl7KECc4vq9hPNnSO+Rg/HPYGUFPTusmpgaJMsJNXnahel8ZA0Vx5UoDvMyvPxpZznWIEtpS3 /XH X-Received: by 2002:a17:907:2686:b0:b8e:fd74:f6b7 with SMTP id a640c23a62f3a-b8facdf05a6mr322216666b.5.1771260352482; Mon, 16 Feb 2026 08:45: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 a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45: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, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 25/27] drm: Add ALLM properties to connector Date: Mon, 16 Feb 2026 17:45:14 +0100 Message-ID: <20260216164516.36803-26-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 Adds HDMI Auto Low Latency Mode optional connector properties allm_mode and allm_mode_capable. ALLM automatically puts TVs into low latency modes (gaming modes) and it's part of the HDMI Gaming Features introduced in HDMI 2.1. allm_mode_capable indicates whether connector (sink) supports ALLM allm_mode tells the driver which triggering mode to use. Off, dynamic and always on. Dynamic mode should consider the content type and the state of the crtc to discern whether ALLM should be activated. Recommendation is Content Type Hint =3D=3D Game || VRR_ENABLED based on testing behaviors on other operating systems and multiple GPU vendors + how TVs behave. Signed-off-by: Tomasz Paku=C5=82a --- drivers/gpu/drm/drm_atomic_uapi.c | 4 ++ drivers/gpu/drm/drm_connector.c | 115 ++++++++++++++++++++++++++++++ include/drm/drm_connector.h | 37 ++++++++++ 3 files changed, 156 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic= _uapi.c index a3ad2fe3306b..cfb50a3d617d 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -758,6 +758,8 @@ static int drm_atomic_connector_set_property(struct drm= _connector *connector, state->content_type =3D val; } else if (property =3D=3D connector->scaling_mode_property) { state->scaling_mode =3D val; + } else if (property =3D=3D connector->allm_mode_property) { + state->allm_mode =3D val; } else if (property =3D=3D config->content_protection_property) { if (val =3D=3D DRM_MODE_CONTENT_PROTECTION_ENABLED) { drm_dbg_kms(dev, "only drivers can set CP Enabled\n"); @@ -855,6 +857,8 @@ drm_atomic_connector_get_property(struct drm_connector = *connector, *val =3D state->colorspace; } else if (property =3D=3D connector->scaling_mode_property) { *val =3D state->scaling_mode; + } else if (property =3D=3D connector->allm_mode_property) { + *val =3D state->allm_mode; } else if (property =3D=3D config->hdr_output_metadata_property) { *val =3D state->hdr_output_metadata ? state->hdr_output_metadata->base.id : 0; diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 5bb38b80e214..14d504ca73f4 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -1226,6 +1226,12 @@ static const struct drm_prop_enum_list drm_content_t= ype_enum_list[] =3D { { DRM_MODE_CONTENT_TYPE_GAME, "Game" }, }; =20 +static const struct drm_prop_enum_list drm_allm_mode_enum_list[] =3D { + { DRM_ALLM_MODE_DISABLED, "Disabled" }, + { DRM_ALLM_MODE_ENABLED_DYNAMIC, "Dynamic" }, + { DRM_ALLM_MODE_ENABLED_FORCED, "Always On" }, +}; + static const struct drm_prop_enum_list drm_panel_orientation_enum_list[] = =3D { { DRM_MODE_PANEL_ORIENTATION_NORMAL, "Normal" }, { DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP, "Upside Down" }, @@ -2449,6 +2455,94 @@ int drm_connector_attach_passive_vrr_capable_propert= y( } EXPORT_SYMBOL(drm_connector_attach_passive_vrr_capable_property); =20 +/** + * DOC: Auto Low Latency Mode properties + * + * Auto Low Latency capable HDMI displays (be it PC monitors or TVs) + * can automatically enter a "low latency" mode, usually named "Game Mode"= by + * receiving specific data in HDMI Forum vendor-specific info frame. + * + * This usually is the best mode for PC usage but disables as much process= ing as + * possible which might not be desireable on lower end devices casing them= to + * produce an image that's unsatisfactory to some users. + * + * "allm_capable": + * Optional &drm_connector boolean property that drivers should attach + * with drm_connector_attach_allm_capable_property() on connectors that + * could support Auto Low Latency Mode. Drivers should update the + * property value by calling drm_connector_set_allm_capable_property(). + * + * Absence of the property should indicate absence of support. + * + * "ALLM_MODE": + * Optional &drm_connector enum property enables compositors to control and + * expose ALLM triggering behavior modes to the end user where: + * + * - ALLM_MODE_DISABLED: completely disabled ALLM signalling. + * - ALLM_MODE_ENABLED_DYNAMIC: triggers ALLM based on current needs. + * preferrably display content type hint being set to Game by compositor + * or VRR being enabled and active. + * - ALLM_MODE_ENABLED_FORCED: always-on ALLM triggering. + * + * ALLM_MODE_ENABLED_DYNAMIC should behave like gaming devices such as + * consoles where ALLM is only triggered when needed. It's main purpose is + * gaming (part of so-called HDMI gaming features). + * + * If compositors wish to control ALLM completely on their own, they can + * switch between disabled and enabled_forced modes. + */ + +/** + * drm_connector_attach_allm_capable_property - creates the + * allm_capable property + * @connector: connector to create the allm_capable property on. + * + * This is used by atomic drivers to add support for querying + * Auto Low Latency Mode capability for a connector. + * + * Returns: + * Zero on success, negative errno on failure. + */ +int drm_connector_attach_allm_capable_property(struct drm_connector *conne= ctor) +{ + struct drm_device *dev =3D connector->dev; + struct drm_property *prop; + + if (!connector->allm_capable_property) { + prop =3D drm_property_create_bool(dev, DRM_MODE_PROP_IMMUTABLE, + "allm_capable"); + if (!prop) + return -ENOMEM; + + connector->allm_capable_property =3D prop; + drm_object_attach_property(&connector->base, prop, 0); + } + + return 0; +} +EXPORT_SYMBOL(drm_connector_attach_allm_capable_property); + +int drm_connector_attach_allm_mode_property(struct drm_connector *connecto= r) +{ + struct drm_property *prop; + + if (connector->allm_mode_property) + return 0; + + prop =3D drm_property_create_enum(connector->dev, 0, "allm_mode", + drm_allm_mode_enum_list, + ARRAY_SIZE(drm_allm_mode_enum_list)); + if (!prop) + return -ENOMEM; + + connector->allm_mode_property =3D prop; + drm_object_attach_property(&connector->base, prop, + DRM_ALLM_MODE_DISABLED); + + return 0; +} +EXPORT_SYMBOL(drm_connector_attach_allm_mode_property); + /** * drm_connector_attach_scaling_mode_property - attach atomic scaling mode= property * @connector: connector to attach scaling mode property on. @@ -3041,6 +3135,27 @@ void drm_connector_set_passive_vrr_capable_property( } EXPORT_SYMBOL(drm_connector_set_passive_vrr_capable_property); =20 +/** + * drm_connector_set_allm_capable_property - sets Auto Low Latency Mode + * capable property for a connector + * @connector: drm connector + * @capable: True if the connector is ALLM capable + * + * Should be used by atomic drivers to update the indicated support for + * Auto Low Latency Mode over a connector. + */ +void drm_connector_set_allm_capable_property( + struct drm_connector *connector, bool capable) +{ + if (!connector->allm_capable_property) + return; + + drm_object_property_set_value(&connector->base, + connector->allm_capable_property, + capable); +} +EXPORT_SYMBOL(drm_connector_set_allm_capable_property); + /** * drm_connector_set_panel_orientation - sets the connector's panel_orient= ation * @connector: connector for which to set the panel-orientation property. diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 30dd9737bfe0..fa4abfe8971e 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -58,6 +58,12 @@ enum drm_connector_force { DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */ }; =20 +enum drm_allm_mode { + DRM_ALLM_MODE_DISABLED, + DRM_ALLM_MODE_ENABLED_DYNAMIC, + DRM_ALLM_MODE_ENABLED_FORCED, +}; + /** * enum drm_connector_status - status for a &drm_connector * @@ -1147,6 +1153,13 @@ struct drm_connector_state { */ unsigned int content_protection; =20 + /** + * @allm_mode: Connector property to control the + * HDMI Auto Low Latency Mode trigger setting. + * The %DRM_ALLM_MODE_\* values must match the values. + */ + enum drm_allm_mode allm_mode; + /** * @colorspace: State variable for Connector property to request * colorspace change on Sink. This is most commonly used to switch @@ -2112,6 +2125,26 @@ struct drm_connector { */ struct drm_property *passive_vrr_capable_property; =20 + /** + * @allm_capable_property: Optional property to help userspace + * query hardware support for HDMI Auto Low Latency Mode on a connector. + * Drivers can add the property to a connector by calling + * drm_connector_attach_allm_capable_property(). + * + * This should be updated only by calling + * drm_connector_set_allm_capable_property(). + */ + struct drm_property *allm_capable_property; + + /** + * @allm_mode_property: + * + * Indicates HDMI Auto Low Latency Mode triggering mode for connector. + * Support for the requested state will depend on driver and hardware + * capabiltiy - lacking support is not treated as failure. + */ + struct drm_property *allm_mode_property; + /** * @colorspace_property: Connector property to set the suitable * colorspace supported by the sink. @@ -2508,6 +2541,8 @@ int drm_connector_attach_vrr_capable_property( struct drm_connector *connector); int drm_connector_attach_passive_vrr_capable_property( struct drm_connector *connector); +int drm_connector_attach_allm_capable_property(struct drm_connector *conne= ctor); +int drm_connector_attach_allm_mode_property(struct drm_connector *connecto= r); int drm_connector_attach_broadcast_rgb_property(struct drm_connector *conn= ector); int drm_connector_attach_colorspace_property(struct drm_connector *connect= or); int drm_connector_attach_hdr_output_metadata_property(struct drm_connector= *connector); @@ -2532,6 +2567,8 @@ void drm_connector_set_vrr_capable_property( struct drm_connector *connector, bool capable); void drm_connector_set_passive_vrr_capable_property( struct drm_connector *connector, bool capable); +void drm_connector_set_allm_capable_property( + struct drm_connector *connector, bool capable); int drm_connector_set_panel_orientation( struct drm_connector *connector, enum drm_panel_orientation panel_orientation); --=20 2.53.0 From nobody Thu Mar 5 06:32:39 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 8D10A2DAFB5 for ; Mon, 16 Feb 2026 16:45:55 +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=1771260357; cv=none; b=Qw7wX77m+c0ATvj8nlUApT4Pz1oeS0GQZbqO5T2OjLb/kd6Q9ii8y/ipOi2XWhiswX/oWGLbuycpngH3e4/QfbjYHmKHsX6FItpzouaqdJvb1tqiOhdvZwST7mL7fsDgP3UkB/SHuDkjWKBiCNbitgamyhrEYORy2ULq2N9jjjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260357; c=relaxed/simple; bh=U/El+ZRl2DFM9k6KD4CjsgsCG7MARUgA2s1yAKMd3J0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=U+mjDYZIzeffQlAbwCG1hjjr/hBq06SW8rlfQTb92UDx5XckWqETGNEW4coD44onHlJ2pjkZ1RL0fXw/bvR+8ztcAKBG/k1TC01A43RH8DkWdl4+AnrQN3MN+GzUtZzxfIWafhCYxUv5y1XNs/3vJEeGN4EwYoWoPl7hiJa7dVI= 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=YZYqM5XU; 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="YZYqM5XU" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8de2b5a122so59446066b.0 for ; Mon, 16 Feb 2026 08:45:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260354; x=1771865154; 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=7aD3otBgcxZjv1qvxWCjHurqs+NRqtEYA6dA7W84qVQ=; b=YZYqM5XUUW1A9e7YzXJ24A2TYdoVpIwjeNMgigH/iZaTeQbRPzru0C60q1274RcCx9 2/4um1fVXW7yeUxOS6yUtksbktqcM0RvLEw2P17eiqkbCjx8gECl6AhdvLItFM9hVo4q vPcoAaChq8Lc/9+tbkuWhLZFZclSUHq46J3MRgxcrecaNaO9MKh7p1PnRm4xdcPy4lp2 jmPmj+ysb214fQOBJfPQFBJ0qDRFpalsLlO0yJasIyqfyqLMyzhzMa+GXNw+XAVDc/ck oiOeejat4LABsRAbNcDH8VDyp3h9ZgefW8jYM6G3slIpLiwrI+7Tj0YTSRgWFOb9WbQp sBxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260354; x=1771865154; 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=7aD3otBgcxZjv1qvxWCjHurqs+NRqtEYA6dA7W84qVQ=; b=Mf+O5nPvosgE3pWK2Ypr9uGKs7/EJT7BUQB2Dbt1R3IhFC5awpB49zA99UQ1Bo4Hqu 1/nbbgEorBUzRJ+lmRpdPsYJYHaZHaq2XmuP+QAFBk5q+yNXpxTx3lbUjM38bgJ4uki4 qfnM98R6KpZ+rFKMK7SJA+UrPhJRFKudvGJFlsvZGTgiYJ/z0pUP+FeQTwa4lFhL24/Q wDJnEkx7pDhV8Rzyt9lJtigLpBXjUZ+IBCvPp2TW1x/63abEKVaPTsY/J/ySbZt9j65s JUJmS+dq9oo5igvW5o9PHSulnT4vFx0SjhNTy63AEFuwql18XljLtH3u6boe5jzyy2Mv 7l3w== X-Forwarded-Encrypted: i=1; AJvYcCUcht9eIDQ38bXRy3GO1HLnLgWpAj6L7KK8Njg+CCCYxIdLmtbpumN3IlqX2yW22862VcIHD9+Z7nmiXbk=@vger.kernel.org X-Gm-Message-State: AOJu0YxRaKJCbkMKuXkr09AH+YrVfUFZXsXIkIX8+I4M10UHQOZea1pW dej5kP7WKK3wYOaB5gT2NOZCwLnPVtS3RsVa+4iOIG4ZHFI0+sn0Bbv4 X-Gm-Gg: AZuq6aJmis0PnUOAS/fkzMO6oTKK4yG5erWVAvJEmzXdOytDZ1HD+wPklhEmxzHkdqw WCDpkfcf60LSFTO/390hEficf5joqnsauH/5uK0J0tigEyqvg7Puajw3VmUVXz9bI6usMpdk1wj +oEGDts+jqVFRifaEujA2MFeMuf5xGmfrf6/Q0nYIWXg5PuZoFr+ktpcXFlZ59kpxUIf7dtj4rS HQqwhTqnCmUJxrmP6NKeiBhAjksAMyOhBlP6MUB1FH5yBNHqkkGGksFXEqW9zkda0cEf/RtxccX CUyrK6/0lqbM7uGpXbm+TKEwOwZui+URqHV+BCzGDurndy85zxVoSX3bMQNmea1bKhDZ1L1WaoS c9bbw5xkaK+HCT5OYzPKxj+eo+CJSw4BBFRtDdJwkVLURLtTwbKUNFZGj9jXXZ4+Fzw1WmtA1gg 1jGrEA6SXgJbrIg4BxDkdZOK/vwpmNTUKj39MgCPdG/ftAP9Tx0dr2Bs1PLAQ529gHk2mDdETg8 NB3 X-Received: by 2002:a17:907:98d:b0:b8f:bf8:e04a with SMTP id a640c23a62f3a-b8fac8b3924mr328939466b.0.1771260353828; Mon, 16 Feb 2026 08:45:53 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:53 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 26/27] drm/amd/display: Use passive_vrr properties in amdgpu Date: Mon, 16 Feb 2026 17:45:15 +0100 Message-ID: <20260216164516.36803-27-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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 [How] Attach and use this properties for HDMI sinks which are troublesome with their VRR state transitions. Hook into already-established freesync_on_desktop logic. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 ++++++++++++++++--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 1 + 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 6a2806cc800a..41677c50b3d2 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7850,6 +7850,8 @@ amdgpu_dm_connector_atomic_duplicate_state(struct drm= _connector *connector) __drm_atomic_helper_connector_duplicate_state(connector, &new_state->base= ); =20 new_state->freesync_capable =3D state->freesync_capable; + new_state->freesync_on_desktop_capable =3D + state->freesync_on_desktop_capable; new_state->abm_level =3D state->abm_level; new_state->scaling =3D state->scaling; new_state->underscan_enable =3D state->underscan_enable; @@ -9057,8 +9059,10 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_d= isplay_manager *dm, connector_type =3D=3D DRM_MODE_CONNECTOR_eDP) { drm_connector_attach_hdr_output_metadata_property(&aconnector->base); =20 - if (!aconnector->mst_root) + if (!aconnector->mst_root) { drm_connector_attach_vrr_capable_property(&aconnector->base); + drm_connector_attach_passive_vrr_capable_property(&aconnector->base); + } =20 if (adev->dm.hdcp_workqueue) drm_connector_attach_content_protection_property(&aconnector->base, tru= e); @@ -11338,6 +11342,12 @@ static void get_freesync_config_for_crtc( config.vsif_supported =3D true; config.btr =3D true; =20 + if (new_con_state->freesync_on_desktop_capable) + new_crtc_state->stream->freesync_on_desktop =3D + !new_crtc_state->base.passive_vrr_disabled; + else + new_crtc_state->stream->freesync_on_desktop =3D false; + if (fs_vid_mode) { config.state =3D VRR_STATE_ACTIVE_FIXED; config.fixed_refresh_in_uhz =3D new_crtc_state->freesync_config.fixed_r= efresh_in_uhz; @@ -11349,6 +11359,7 @@ static void get_freesync_config_for_crtc( } } else { config.state =3D VRR_STATE_UNSUPPORTED; + new_crtc_state->stream->freesync_on_desktop =3D false; } out: new_crtc_state->freesync_config =3D config; @@ -13352,6 +13363,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct drm_hdmi_vrr_cap hdmi_vrr =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; + bool freesync_on_desktop =3D false; bool freesync_capable =3D false; bool pcon_allowed =3D false; bool is_pcon =3D false; @@ -13431,6 +13443,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, monitor_range_from_vsdb(&connector->display_info, &vsdb_info); =20 freesync_capable =3D copy_range_to_amdgpu_connector(connector); + freesync_on_desktop =3D freesync_capable; =20 /* DP -> HDMI PCON */ } else if (pcon_allowed) { @@ -13445,11 +13458,14 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, 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); + freesync_on_desktop =3D freesync_capable; } =20 update: - if (dm_con_state) + if (dm_con_state) { dm_con_state->freesync_capable =3D freesync_capable; + dm_con_state->freesync_on_desktop_capable =3D freesync_on_desktop; + } =20 if (connector->state && amdgpu_dm_connector->dc_link && !freesync_capable= && amdgpu_dm_connector->dc_link->replay_settings.config.replay_supported= ) { @@ -13458,8 +13474,10 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, } =20 if (connector->vrr_capable_property) - drm_connector_set_vrr_capable_property(connector, - freesync_capable); + drm_connector_set_vrr_capable_property(connector, freesync_capable); + + if (connector->passive_vrr_capable_property) + drm_connector_set_passive_vrr_capable_property(connector, freesync_on_de= sktop); } =20 void amdgpu_dm_trigger_timing_sync(struct drm_device *dev) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 800813671748..88ec2b88dcaf 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -1020,6 +1020,7 @@ struct dm_connector_state { uint8_t underscan_hborder; bool underscan_enable; bool freesync_capable; + bool freesync_on_desktop_capable; bool update_hdcp; bool abm_sysfs_forbidden; uint8_t abm_level; --=20 2.53.0 From nobody Thu Mar 5 06:32:39 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 EF8EF334C03 for ; Mon, 16 Feb 2026 16:45:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260358; cv=none; b=lCxwPnoKi7YkTlryxLWpa+1rLP8UONLJF4QWSnSmBsCOOQoyoTWAbd9z7x1hhN57gSBj+ydd8jMHRw16aWdmoDrhEujjdZxBJ+cjK4Q8yJDRGzLF2qFS/VYopX4fce6JWUxsGYBlW6BM/Ko7azKg8czwLGXSwuX63AljfbbRTo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260358; c=relaxed/simple; bh=3/hTJf8B/GZVVIGzNYpfySG4vAHHz53D+FyUAy3pv+A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ILTgz8FEbZZqFAwAM3S3yGaO/Ua2kwi+XHDJ9bDZhvaGSm5pNbjD9TjChY+fZPAcAiN1RfoENPUslKs1UmRZcS7AuIz+DLJOsQaLiwEZTaPXOZWUbgvQxzR2HjresoQzrNoSkjbkXZtdzkYIIQKyFkXay+ArHpFESTc0bdP5WcU= 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=caSUqUwk; arc=none smtp.client-ip=209.85.218.54 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="caSUqUwk" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b8f94bf6ef2so54440866b.2 for ; Mon, 16 Feb 2026 08:45:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260355; x=1771865155; 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=0Q1lJwLmcWJWoDUb++cAchh6MvBOjQlKFX7ixOTz8S8=; b=caSUqUwkK+XIv3Zq7FuTHzH9cEYFtCU8kVlwMQ1hniB5QB9RH9VBeYFdx0p5eSSUEk KbrOOt1YMGu6EpgvQdI93Hdee2+QwcYfPWq3p2qOTAV6dWApriy056mzhYU8N0+LtDPz agredakLgRZiZVxsIMwPXKTzRfpb60Rv4nh9ryGBMOLvS6Hkzjj30w6A5dMw5s8qOq2O FLTCHljV4PKsxfdYyXaNWVMUgBWpQ8bQMcV6EHbQGyI3mHgQ5CPOxwDZg1apjfSeWQlW YaVAVxFM1tbGZ0EPQE7bgwVvY+VHRUT9Dd8lpr8cgL7lWjFAspXyvxNRUCo1O4LzFoJ1 ukhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260355; x=1771865155; 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=0Q1lJwLmcWJWoDUb++cAchh6MvBOjQlKFX7ixOTz8S8=; b=iGV6ojO5q3aFuEetyIwMqbgWhj2LAGVjK9yjI0dvfGndRhxDTKg4V8O3z60XfD4ymw nyoM7sSjeRn8TMl/2oTgPqkfNOvJgS925tQNNk/zTwMUOQCU/VeO/J/UHeSNKnZh397X 0JRRVUellf32FMtRhh8U5Fq+O9ai2v9WWk3tASv98hO1ZN/vujpXj1/bRaNP8/ZqSzWf yHvkRsbu6OUpiQMZev5ESrlwuuO2TSsoV5sxHa7bkL5V5kjUzJ3xHQCOXItmr/Ql5/nO V673XUbzmcmIq1tsNXo2LUWBkY50+bV03q8hvYgRqLJGsfTbpYj/pOXxcDMZewhjEKdQ 1CCw== X-Forwarded-Encrypted: i=1; AJvYcCVeyb1gWqVUmwM6w5m5cpdQLJI4BqumUw/2Rh17uWVWL8bxhMCGPzHQ+5gbNi8FULZBFcn0/AD6GbaJ3w4=@vger.kernel.org X-Gm-Message-State: AOJu0YzoBwtNhPod0Wzsb2vAheiyEHb3W5e/EUWZ+04prHMmH28S/NJA ifaeUdfH14ejkgbcX4IFBgmMfNjGzWjhACD6//IIsDqr+fVXmHfEZjVz X-Gm-Gg: AZuq6aKQxY2BaHFZXFlKyuCKUt3SkS9ZXkgcY1QxM2bXH3frgreiLL6Bs9vUuXYb3d4 mcUahzuCwFc9rCF8f7cjwnZCRS8GIVFx7l9PeVgjRSrketBFBR5fV4pmsQA3K1Z1eaB/fA3ZR8k BBEWCKQhpXCAOEd+F9SnpPJ1M9v+g3Kw8KLDzvX2P749GCUHXgyjw4KNxo7N/hzIAZR/4HMyk7P 00KOW/coVmeoNVUVwwZxcABO2QlZ/1fY8WmJ7iKPn3SHhSAnYHqREqh056zXm5HQ/+FLkcHb5Ci gd6Em1/UJDdDbT6iqPwr1MHo0YFh/7x8oLO71aOVSHC8qANKr9+hN/arrBm4Cy50utRridnrK1R fg0D+GCD8QhaKkOST2NqbsUzcEG/RECQ+QlW/uJb47qUdABHPQWHSgBs9Cx46PTEUvodfKStRIy 7RDtYJsktMTLacVl7ElS9t/DjNLK5TJ4BIYTcJAa2G81Ex6BW73oWLaW5CqsLCE2tvWLQMHUAkE Kdr X-Received: by 2002:a17:907:3da0:b0:b87:2780:1b2b with SMTP id a640c23a62f3a-b8facd9eeb2mr384160566b.4.1771260355157; Mon, 16 Feb 2026 08:45:55 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45: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, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 27/27] drm/amd/display: Use ALLM properties in amdgpu Date: Mon, 16 Feb 2026 17:45:16 +0100 Message-ID: <20260216164516.36803-28-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-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] To enable ALLM when asked for by compositor [How] Attach properties to HDMI sinks, detect support and set allm_capable property, set allm_capable property for amdgpu_dm_connector Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 54 ++++++++++++++++++- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 3 ++ drivers/gpu/drm/amd/display/dc/core/dc.c | 3 ++ .../gpu/drm/amd/display/dc/core/dc_resource.c | 2 +- drivers/gpu/drm/amd/display/dc/dc_stream.h | 2 + .../display/modules/info_packet/info_packet.c | 4 +- 6 files changed, 64 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 41677c50b3d2..695100c78314 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -8969,6 +8969,7 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_di= splay_manager *dm, aconnector->audio_inst =3D -1; aconnector->pack_sdp_v1_3 =3D false; aconnector->as_type =3D ADAPTIVE_SYNC_TYPE_NONE; + aconnector->hdmi_allm_capable =3D false; memset(&aconnector->vsdb_info, 0, sizeof(aconnector->vsdb_info)); mutex_init(&aconnector->hpd_lock); mutex_init(&aconnector->handle_mst_msg_ready); @@ -9166,6 +9167,10 @@ int amdgpu_dm_initialize_hdmi_connector(struct amdgp= u_dm_connector *aconnector) struct drm_device *ddev =3D aconnector->base.dev; struct device *hdmi_dev =3D ddev->dev; =20 + /* ALLM */ + drm_connector_attach_allm_capable_property(&aconnector->base); + drm_connector_attach_allm_mode_property(&aconnector->base); + if (amdgpu_dc_debug_mask & DC_DISABLE_HDMI_CEC) { drm_info(ddev, "HDMI-CEC feature masked\n"); return -EINVAL; @@ -10856,6 +10861,31 @@ static int amdgpu_dm_atomic_setup_commit(struct dr= m_atomic_state *state) return 0; } =20 +static void update_allm_state_on_crtc_stream(struct dm_crtc_state *new_crt= c_state, + const struct drm_connector_state *new_conn) +{ + struct mod_freesync_config *config =3D &new_crtc_state->freesync_config; + struct dc_stream_state *new_stream =3D new_crtc_state->stream; + bool allm_active =3D false; + + switch (new_conn->allm_mode) { + case DRM_ALLM_MODE_ENABLED_DYNAMIC: + allm_active =3D config->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || + new_stream->content_type =3D=3D DISPLAY_CONTENT_TYPE_GAME; + break; + + case DRM_ALLM_MODE_ENABLED_FORCED: + allm_active =3D true; + break; + + case DRM_ALLM_MODE_DISABLED: + default: + allm_active =3D false; + } + + new_stream->hdmi_allm_active =3D allm_active; +} + /** * amdgpu_dm_atomic_commit_tail() - AMDgpu DM's commit tail implementation. * @state: The atomic state to commit @@ -10898,12 +10928,14 @@ static void amdgpu_dm_atomic_commit_tail(struct d= rm_atomic_state *state) for_each_oldnew_connector_in_state(state, connector, old_con_state, new_c= on_state, i) { struct dm_connector_state *dm_new_con_state =3D to_dm_connector_state(ne= w_con_state); struct dm_connector_state *dm_old_con_state =3D to_dm_connector_state(ol= d_con_state); + struct amdgpu_dm_connector *dm_conn =3D to_amdgpu_dm_connector(connector= ); struct amdgpu_crtc *acrtc =3D to_amdgpu_crtc(dm_new_con_state->base.crtc= ); struct dc_surface_update *dummy_updates; struct dc_stream_update stream_update; struct dc_info_packet hdr_packet; struct dc_stream_status *status =3D NULL; bool abm_changed, hdr_changed, scaling_changed, output_color_space_chang= ed =3D false; + bool allm_changed =3D false; =20 memset(&stream_update, 0, sizeof(stream_update)); =20 @@ -10933,7 +10965,11 @@ static void amdgpu_dm_atomic_commit_tail(struct dr= m_atomic_state *state) hdr_changed =3D !drm_connector_atomic_hdr_metadata_equal(old_con_state, new_con_state); =20 - if (!scaling_changed && !abm_changed && !hdr_changed && !output_color_sp= ace_changed) + allm_changed =3D dm_conn->hdmi_allm_capable && + (new_con_state->allm_mode !=3D old_con_state->allm_mode); + + if (!scaling_changed && !abm_changed && !hdr_changed && + !output_color_space_changed && !allm_changed) continue; =20 stream_update.stream =3D dm_new_crtc_state->stream; @@ -10963,6 +10999,17 @@ static void amdgpu_dm_atomic_commit_tail(struct dr= m_atomic_state *state) stream_update.hdr_static_metadata =3D &hdr_packet; } =20 + if (allm_changed) { + update_allm_state_on_crtc_stream(dm_new_crtc_state, new_con_state); + mod_build_hf_vsif_infopacket(dm_new_crtc_state->stream, + &dm_new_crtc_state->stream->hfvsif_infopacket); + + stream_update.hdmi_allm_active =3D + &dm_new_crtc_state->stream->hdmi_allm_active; + stream_update.hfvsif_infopacket =3D + &dm_new_crtc_state->stream->hfvsif_infopacket; + } + status =3D dc_stream_get_status(dm_new_crtc_state->stream); =20 if (WARN_ON(!status)) @@ -13478,6 +13525,11 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, =20 if (connector->passive_vrr_capable_property) drm_connector_set_passive_vrr_capable_property(connector, freesync_on_de= sktop); + + amdgpu_dm_connector->hdmi_allm_capable =3D connector->display_info.hdmi.a= llm; + if (connector->allm_capable_property) + drm_connector_set_allm_capable_property( + connector, connector->display_info.hdmi.allm); } =20 void amdgpu_dm_trigger_timing_sync(struct drm_device *dev) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 88ec2b88dcaf..b9d27a483b1e 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -847,6 +847,9 @@ struct amdgpu_dm_connector { unsigned int hdmi_hpd_debounce_delay_ms; struct delayed_work hdmi_hpd_debounce_work; struct dc_sink *hdmi_prev_sink; + + /* HDMI ALLM */ + bool hdmi_allm_capable; }; =20 static inline void amdgpu_dm_set_mst_status(uint8_t *status, diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd= /display/dc/core/dc.c index 17ba7af0ddcd..bfaa2fb0cba8 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -3295,6 +3295,9 @@ static void copy_stream_update_to_stream(struct dc *d= c, if (update->vrr_active_fixed) stream->vrr_active_fixed =3D *update->vrr_active_fixed; =20 + if (update->hdmi_allm_active) + stream->hdmi_allm_active =3D *update->hdmi_allm_active; + if (update->crtc_timing_adjust) { if (stream->adjust.v_total_min !=3D update->crtc_timing_adjust->v_total_= min || stream->adjust.v_total_max !=3D update->crtc_timing_adjust->v_total_max= || 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 639831295b21..078ca4a7258f 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -4660,7 +4660,7 @@ static void set_avi_info_frame( vic =3D 0; format =3D stream->timing.timing_3d_format; /*todo, add 3DStereo support*/ - if (format !=3D TIMING_3D_FORMAT_NONE) { + if (format !=3D TIMING_3D_FORMAT_NONE || stream->hdmi_allm_active) { // 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/dc/dc_stream.h b/drivers/gpu/drm/a= md/display/dc/dc_stream.h index 9960494007ff..17f891b03416 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_stream.h +++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h @@ -242,6 +242,7 @@ struct dc_stream_state { bool vrr_active_variable; bool freesync_on_desktop; bool vrr_active_fixed; + bool hdmi_allm_active; =20 bool converter_disable_audio; uint8_t qs_bit; @@ -345,6 +346,7 @@ struct dc_stream_update { bool *allow_freesync; bool *vrr_active_variable; bool *vrr_active_fixed; + bool *hdmi_allm_active; =20 struct colorspace_transform *gamut_remap; enum dc_color_space *output_color_space; 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 7e0adb90af39..fcfab7b9e0e2 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 @@ -500,7 +500,7 @@ static bool is_hdmi_vic_mode(const struct dc_stream_sta= te *stream) if (stream->view_format !=3D VIEW_3D_FORMAT_NONE) return false; =20 - if (stream->link->local_sink->edid_caps.allm) + if (stream->hdmi_allm_active) return false; =20 return true; @@ -529,7 +529,7 @@ void mod_build_hf_vsif_infopacket(const struct dc_strea= m_state *stream, =20 info_packet->valid =3D false; =20 - allm =3D stream->link->local_sink->edid_caps.allm; + allm =3D stream->hdmi_allm_active; format =3D stream->view_format =3D=3D VIEW_3D_FORMAT_NONE ? TIMING_3D_FORMAT_NONE : stream->timing.timing_3d_format; --=20 2.53.0