From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 53C191A9F91 for ; Tue, 3 Feb 2026 18:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144993; cv=none; b=oDjgU1jLMxTYOInqxhL7QO4au3EyLvn+/c5cn1w5GoEt4fmMT8qUpWcC5wLUyna1796KODATreo5zbhlYnR9ykoZHlfCaVlVXheRhBF0cp3kX6dDF1ruR0J1s4j+T3xBIuuQGpZwTo3CBFw+CA3jtJVOhmvSTog3SDgZ6NktWjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144993; c=relaxed/simple; bh=UUpm83/W5hDgmhEH9nIhdDFT5CxeGHLtIhEZxVLwCeI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kTD4jPlPnOzWEz/w5jRHhhHSIwGPsN+aSeQbtQWsh8gkb53jcueQnETaPqTFjD4RR25IP/8tjDYP9eWM7bXoWxaSLaSRx37y2vaiAnIIvr31hnKGxvfMId87t+kOIh1zwoF+e4Mka98cFcEvICcSYjb2KhYjB1T94OJQjACFuk0= 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=KStTfHE8; arc=none smtp.client-ip=209.85.218.46 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="KStTfHE8" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b8719f5a2b5so69359566b.3 for ; Tue, 03 Feb 2026 10:56:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144991; x=1770749791; 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=hFFQv92IMIK5Ovyc69Ri5XGSLTL2jrRhS/990idFLW0=; b=KStTfHE89CdiaGZGgTRNkEQXMDvhSxWJrESl5ktBaXjXZq9p9UpnuoGh09z1sQ7cY4 JK2c1LN10quFbw8BsNEzQakZhgl2JAd/grkL7ahqAzPwOp5yoNlUyONzJqpLpCekvLpK Yt+uFdSSPNbXAPvxYx4/ShMHF7l8GVDgSBKKsKhmlWsnhoPm8nTqP+h7MdHi86pYbvV+ xUCiGh0nYyBIyeO/v5qHfqxLpuF06XcfkmlfakhpzzbHQM/BgKVfx8UPykNR2Qec9USH oD8kA20NRxgTIgsyDDVJ9VX5kJimo0+fNoaJmyZyqKbur+tabyJXl7J/lps0Gmh1qgy4 YjlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144991; x=1770749791; 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=hFFQv92IMIK5Ovyc69Ri5XGSLTL2jrRhS/990idFLW0=; b=BGV2xKLw1DUWkvQ08aFZgywrTtyqqCmkApXmqpqC4nNl4eeeEfC3zkWkAMkk8rIHPn WQcsEZ9/CMt7vrrVlQA/9s4yHh8sPDcsqG7p2VbYiZjYvL7wS8sz6218F2OTSoBN/1pR OB5Ur8FTmMWCeSg7YRmkTuauGIRRKDMmf4PSRO/dkynyjaFGziR09Gtgmv7gWB3zuPtN Z31AQW6L2deMAoAxK4tpc/Mx40g6hEK091Fd8h8hiF9fysbPACJYC2Fs77xtOjdI7+t5 eP+J/nhu/Kwa4Ly+0OJvpuJK0RuTXQoaEK2SQ08drxzFMUaqQIrP/LqWdJSKo1IfD57R gEQQ== X-Forwarded-Encrypted: i=1; AJvYcCWFIZOF8Sf1kNReafnod6wkBYLQ+yoYvQGPw78GQyeG7eitc4j1+m9CY/bvzEUmimkCTGXBl2ObenOBmTU=@vger.kernel.org X-Gm-Message-State: AOJu0YzlKW1VPxqhj6BQ4jLzVIj41bT/bT5uXJTW/BVlZvLxLoSY/Y8o gwrML3LBVM0mIh6fMac8nAETJo4Y6llU7N9MOEL9N571Zb+Ez0ceKj4j X-Gm-Gg: AZuq6aK/Y0uvWOrrExg9+PPujOwCn2+pGN0vz03xbgo/wWhgbnNhrd9J2KwMIj6y35L fZfQ9VS6Os3uxXMURxBCsc4e2vbNpH8dvuM1bnFuQsosNSeHQV2A6owBvWqATBbsz8mQiW1vjCe q4Ch255IL3LEL95EvLLZaq/fh/n0uWsmnkr8+fyc3vJIKx3GuBBIYOuTGQBQHYarn98rlbZ9ust /0poXMSA8ypEnkXCQYyEeO8YMO5/5I+KFWXg6PjyS/RLiYmiGyb3brDRnI50KkR4UdrhELtuwtR vYuKUJMdZQU243dVHGlFTgrWA0VWDx8ajRa0WB9e5/PMaaoypbOOKsyfixUFIdYQG+OGzBW9rJ5 qVovLCu3WUWVoYceGrBRqgiNIpjr/TJkeouzSdWedfnJ6Vjd3e/YJQ97/nM3ioQL9rgB7TTH9j2 CSeXbfpjsRUZT40+tBfBxL7ey6uiPjSCbjhPYuzrbE1fOjPPmtv2h+HO/D9UdyprTz X-Received: by 2002:a17:907:1c90:b0:b87:106c:88eb with SMTP id a640c23a62f3a-b8e9ec16b5cmr23148266b.0.1770144990354; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:30 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org, admin@ptr1337.dev Subject: [PATCH v3 01/19] drm/amd/display: Return if DisplayID not found in parse_amd_vsdb() Date: Tue, 3 Feb 2026 19:56:08 +0100 Message-ID: <20260203185626.55428-2-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 d8fac7e69181..29e4a047b455 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13136,6 +13136,9 @@ static int parse_amd_vsdb(struct amdgpu_dm_connecto= r *aconnector, break; } =20 + if (i =3D=3D edid->extensions) + return false; + while (j < EDID_LENGTH - sizeof(struct amd_vsdb_block)) { struct amd_vsdb_block *amd_vsdb =3D (struct amd_vsdb_block *)&edid_ext[j= ]; unsigned int ieeeId =3D (amd_vsdb->ieee_id[2] << 16) | (amd_vsdb->ieee_i= d[1] << 8) | (amd_vsdb->ieee_id[0]); --=20 2.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A8E03242BC for ; Tue, 3 Feb 2026 18:56:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144995; cv=none; b=IYM0sqOqt4CZCQLboi1ktgnbutEIFguZaINTCs37+cvlK4Gjyini7QKCKlTxCuqEGmMF5kHJ0QrwRvB9YMWdPcv0wRG+ig+d1oprUoC4zwUf2FjlMHn0a+jsDVp1tR3xRHcuTbSKbSU1A7U/dUst6fTvOcjSEJdO5AnacX/J9vg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144995; c=relaxed/simple; bh=K4AnTH27PLzuCw+grx3N3blbP+yYBihQeuN/dXpSQ0Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H53FGYCpJy2JWqiTxgKlQ9CU6TR/IVXnWeCTurn+G+YxFmAiO/ZoHQkOwFj1+/z32ZBrqqkTcztSvE1qFUp2ce4kO5GrmVMcoTrJlUwMi1nhH0n9UbvuG/lDI7uM2dTQ0DfkF6ABX9t1qtgE0vwcQ1X+IyheeqIYr6YztMai2rw= 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=mdfgr+Wa; arc=none smtp.client-ip=209.85.218.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mdfgr+Wa" Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-b8e9f2d24c5so3368666b.3 for ; Tue, 03 Feb 2026 10:56:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144992; x=1770749792; 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=p2t7zmxZ0V/ra2TNj4y1ls2+nk6Mu20D0VPdmpFC7/A=; b=mdfgr+WaPFaBH0TS1fxgQaOL6pHIvKj07uP87shy8eUHtWntwNoEGjeNzCoCV9c9oD hIs/iKvpyq/35oKwBAkveIg/AfTDDl+YRRELSFeULrCSdLqVKrBu47VfoY8+d29tEnTW ordJYT+JF9ni7wdNCIlk6ooy4rhO+zCUx7o0xlR265iboLXJeRvL83yg7IXh4mJTppoQ lnIAzn7/ikzbP+m/i8TNbwCPJSY9NFpmTZXBfr68hi2T+WYU6dLepFFj9UPhcxw2rz1U BDvHcSgmtf75qG6hdhjzW1OBKRENkLk875v/ftsu4i4sIJVDWkSyCW/5Ksp5UV5tpeUJ DCzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144992; x=1770749792; 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=p2t7zmxZ0V/ra2TNj4y1ls2+nk6Mu20D0VPdmpFC7/A=; b=SuDlyVCpk9hYgZ3jWm4HHtkmdJWXHOANx/xqB/sgaGNLPcEMAegVN411zzl6Vj9Aem V8T0O/aDD+NEa8oYX8JL/7BfuYjovlewQQk2lH1syB6QCtXI+tfjW6MPHu5xmrRcFaQQ Su6Yyd4po0P1w5nhg85rA3MGtFNzBM5hC0gutKZHpTxK8ty3iQimdjTawZdBW1rf/ykb ZUmck09Cs7J1+cJJZcdTjhLURqUhe2b3CkYvzlczntiB+qXRjRl8aDeVfYXZsRZeWlVU 3oVO+laiSqRKk2A7xhZDV4iVE2U3DJQB54APEPGb10apPgyuXEyHjoF82UozCPxgZJSb dGvg== X-Forwarded-Encrypted: i=1; AJvYcCU01lD3dhwk3wICtHoMBYfFb/fxRzrtsdzseLT9AUphYEQkCaxdXj9wGbRtO8l6yDGaMihvBNTRmwuyWOo=@vger.kernel.org X-Gm-Message-State: AOJu0YwrxdvwV2Jsv3m8LpKXP0133hKfuUWZZIVhovDcZg9wD6Y+wczk Ho8cPtLto5dJX2+8tZWyt0DGtb9MuM1eYPmXBcJsyImX4bsPs/yWeRNp X-Gm-Gg: AZuq6aLJSgPQfwtda8TCdq9t5Ehl7ybkoXogEvItN6IdUmTFGjEin5dc3u4nFvW/iq7 3EcCxyYp9DZX2S5JQwssQUaOuD3KAcn29E1Kv15gEiRgY6p1jLnMh8oJyNvI5pqMVpDlaEGufv8 7l3qCoPhyuWj5wXGF2Qsy5y5J0NuuWk03iC0ulm0XVGuLcmkRuvWOMbHR1KS3h1kjeJCVZte8Ub YKf92z/6750PWWAhHDRa217Vx9y4qH3IX3uTB4PhhEN/Ll50dnQA70jQGsGEuuYEivmhPNZ7WiA xPQvm3Tsu1i5HtT113FbYjH3kVz8B68i3htvXMb2smz7iGxZjRDBi1VArlH55vqyvncF3VSg9i0 4munFk9aOfT3qD8ErOL0qXOr+j2ODTyhagMlqZnkY80MzfihcWsGrEwx8XefM7JpIcI5Hov475Z lOCknHFh5Q9eKatdj0N3ePiq+LrRKZ8QKl9dp/vTB7cgiLVQ/KcQxDbQFB4vQAZcat X-Received: by 2002:a17:906:9f85:b0:b87:2681:f608 with SMTP id a640c23a62f3a-b8e9f644b9bmr16634366b.8.1770144991764; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 02/19] drm/amd/display: Refactor amdgpu_dm_update_freesync_caps() Date: Tue, 3 Feb 2026 19:56:09 +0100 Message-ID: <20260203185626.55428-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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. Changes in v3: - Less struct traversal in helper functions Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 123 +++++++++++------- 1 file changed, 73 insertions(+), 50 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 29e4a047b455..2c5877ed5f32 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13119,8 +13119,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; @@ -13172,13 +13172,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, - const struct edid *edid, - struct amdgpu_hdmi_vsdb_info *vsdb_info) +static int parse_amd_vsdb_cea(struct amdgpu_dm_connector *aconnector, + const struct edid *edid, + struct amdgpu_hdmi_vsdb_info *vsdb_info) { + 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 */ @@ -13199,9 +13199,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 i; +} + +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 /** @@ -13218,13 +13256,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; @@ -13256,62 +13295,46 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, goto update; =20 edid =3D drm_edid_raw(drm_edid); // FIXME: Get rid of drm_edid_raw() + parse_amd_vsdb_cea(amdgpu_dm_connector, edid, &vsdb_info); + + if (amdgpu_dm_connector->dc_link) + dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ - if ((connector->display_info.monitor_range.min_vfreq =3D=3D 0 || - connector->display_info.monitor_range.max_vfreq =3D=3D 0)) + if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); =20 - if (edid && (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || - sink->sink_signal =3D=3D SIGNAL_TYPE_EDP)) { - if (amdgpu_dm_connector->dc_link && - amdgpu_dm_connector->dc_link->dpcd_caps.allow_invalid_MSA_timing_par= am) { - amdgpu_dm_connector->min_vfreq =3D connector->display_info.monitor_rang= e.min_vfreq; - amdgpu_dm_connector->max_vfreq =3D connector->display_info.monitor_rang= e.max_vfreq; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; - } + if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || + sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { =20 - parse_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); + if (dpcd_caps.allow_invalid_MSA_timing_param) + freesync_capable =3D copy_range_to_amdgpu_connector(connector); =20 - if (vsdb_info.replay_mode) { - amdgpu_dm_connector->vsdb_info.replay_mode =3D vsdb_info.replay_mode; - amdgpu_dm_connector->vsdb_info.amd_vsdb_version =3D vsdb_info.amd_vsdb_= version; + /* eDP */ + if (edid) + parse_amd_vsdb_did(amdgpu_dm_connector, edid, &vsdb_did); + + if (vsdb_did.replay_mode) { + amdgpu_dm_connector->vsdb_info.replay_mode =3D vsdb_did.replay_mode; + amdgpu_dm_connector->vsdb_info.amd_vsdb_version =3D vsdb_did.amd_vsdb_v= ersion; amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 - } else if (drm_edid && sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) { - i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0 && vsdb_info.freesync_supported) { - amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; - amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; - - connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refre= sh_rate_hz; - connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refre= sh_rate_hz; - } + } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_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 && 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->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->as_type =3D as_type; - amdgpu_dm_connector->vsdb_info =3D vsdb_info; - - amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; - amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; - - connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refre= sh_rate_hz; - connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refre= sh_rate_hz; - } + monitor_range_from_vsdb(&connector->display_info, &vsdb_info); + freesync_capable =3D copy_range_to_amdgpu_connector(connector); } =20 update: --=20 2.52.0 From nobody Sun Feb 8 13:27:35 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 E92E13644CF for ; Tue, 3 Feb 2026 18:56: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=1770144996; cv=none; b=N89OxbW0exJY2sdRQzq1BA9Stnx2vLM2WT4W22cz5AInVMUXtlbhL8TI9h7g9BRhQlhJUZqlNNTSJjlP+jdZ3R//IGnZTf9xGxRcC2l5wYiUT3si+pf8i1/mKwVKrU71f0eGpcY5dSf2husWA9idfho0EPrUDjDxYijCT1YsP9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144996; c=relaxed/simple; bh=gt4wbdWKKOnzI4U1yGGCcTo138VqMva/B3OiKkGSckY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oonP8+1NjmSxdd14pTBfnjPkIB9UAhL7RfyZaMNu85nDh240o8gSGME8PaBrejXW+kcneVzKJQQbyjW5t1z3ps8y3A1t7XVgdAst/L5M1KWab4AUzpO2Xz0ggdMyL3H2RZqKcBeVkjzHTJFldQg8eNjAGQ1Myu8ROU8oSMW8GtU= 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=gsjE11fE; 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="gsjE11fE" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8e0e812c27so59076766b.3 for ; Tue, 03 Feb 2026 10:56:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144993; x=1770749793; 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=vnHVkr75tm1Yp6ZOCu5HkXcq6YZSjcDNrXJkhT+PUDY=; b=gsjE11fEmTiMzRzxmFlonJcStj3WxkgUUyjMAZpos7/ieleWUAzAd6Qx0bakNt8ErT hy/tq0PqqConPo0SLN6UIV7AawMtf1ay6YO6gmSqm28hG+Lz8vqo1xd1vRrh+L7YW53y JA22oJFiFast33Kmy4UM/ZZ+otKfAgZeo0+iBHZbP8vfGoErrnsiR1iySVjnGorGnmin xbRPo7/tRMTd0TuU0ikyhaS9GvKFjod6IRchL9fj+YhCgkXlsZeYccojWNvNzvg1w8JG DiIiYrmNYXm4BUMgf2sr9GU3CeR786DoqenmYd5+ErKyEkZXYsWu9IP+BeTI9NtMjPQw iqWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144993; x=1770749793; 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=vnHVkr75tm1Yp6ZOCu5HkXcq6YZSjcDNrXJkhT+PUDY=; b=FFszuWsMb52ABeDGNmvXPHhK9bQt17/kWxQpmYHDxuMTJHfR3oUQftccMG0q/o6p+l jWVEbu+DDRA+zGbdZ5ASfyHzuuq2PqOqVtwTXBi5W3VERIALhQ/eHDxHcPhdcxcsUtG/ sURhtxup6HjvdiSsDq2XnxMQUmdOMuDOQNyIjI14/c+yR0oQ56UQ/2VqEKJPASSh5Ttj AuuZT1PlsgBFNBacssIu0HAChIsltbfUrGlPrQzQG+MC3mYuklK1IT++JgiQmJJlTiUO 4wG4jIKUNF+rFnT3ETWjpX1SrlvOhZUugvrLPEk10Q7Kah8zVssTqKTWLDUaaaNV7iFo Wg/g== X-Forwarded-Encrypted: i=1; AJvYcCVPu/yBOgr4jR0RhHlZaHCgDvM3vYU/Vuax3MUiHnzSvKDgLDlHJD7GZ9gqw4qej9XckLJwX2FNqmDWsaI=@vger.kernel.org X-Gm-Message-State: AOJu0YzsRS/IMGdmQHSfUBTPZ1U6o6lluCG35Zv+131rifgt9Sxv9qIn NH5MviSxk8SJAeO4eOEp3HH+Mudy6xAOGNcLCkydM3vZ6pvYMamtoUeG X-Gm-Gg: AZuq6aIyJEHl36aDZVKoOCM0uBbHYUlayukaMdx5BBJlr+n2XzNbpczpCtkxpEmTyVW Jk08vdEMm0wu3yzAxFRmgCiYrSxk0dbkllfqo0+ObgXuiKX9dyZoVWGoIQime8bXXvr+LnmL/qM UTCdhq96+qlzBY8Ybb4vbFCX8QN/C5VsGBsSDyuqGRzQAOJZBzYXU55E40AsIFwC24NpxoWU+Jp zusniWv+OlNVMdKFs4lxSGdUdevZqWI2Luo0ccR1HTCyVprv81+HTPo5i20n9bNF6SfZadQJW5o 0YAH52hIssFDr4PyoQj/UehwC+/Nf40IyqQNhjJyIU59XFDhC9p0l0Wp6SP4fvR7zT41+kqzyBy 1FLmGGNDX9DEsjpR6eW2COowD0x2rmjZ+RcOLYzsJduHqsDlfeMCqcNLSItDCCHIWk6+ZTw2/OQ bnh0xKScs2GMcJvN/zFU7BiSeYNNPB7RgiDTRvczCk5EwFmvGjcwmVNSsluqgm92k5 X-Received: by 2002:a17:907:728f:b0:b87:73c9:36b5 with SMTP id a640c23a62f3a-b8e9f6bf9e1mr17489166b.7.1770144993098; Tue, 03 Feb 2026 10:56:33 -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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 03/19] drm/amd/display: Check for VRR range in CEA AMD vsdb Date: Tue, 3 Feb 2026 19:56:10 +0100 Message-ID: <20260203185626.55428-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 2c5877ed5f32..856007bba4d9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13306,6 +13306,12 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, =20 if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + /* + * Many monitors expose AMD vsdb in CAE even for DP and their + * monitor ranges do not contain Range Limits Only flag + */ + if (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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C609E31A810 for ; Tue, 3 Feb 2026 18:56:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144998; cv=none; b=iCVH2TZsZQYRMOXJbksGTveUdzwyPJcaEvSrt4HzSHR0Saz2ybNVZFM3pWxY5fnmQdfwpoOoBK8pyfpcyqnhbGngLy1ysyYr7IqZHoz1mppsYcq6XQCwc/pw84HfAhXtXKj5rfVy3JVDJWoHzYknnkSOBmYuoYVMr0FVLHbWOtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144998; c=relaxed/simple; bh=EXXhW+vY+on8irImlwrQF5evF6ufFZSN+OzlAK0OVB0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=M9a+avxiTpcDl3ZgZmeLa9GNd5CUGTDeoFUtnsknc/irGtTTTOCJqt7AXSPJXSQjBMpKxyk9k3DcYs2QJbHEERvwKNytVu0nPuIXA/FOwGcOO0KoUxNvlggs2R0mal6AUCw6fStYfDVeCmqWALrwcOKOXUYluVQg0udPyNJV4w4= 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=JLgRf8/Z; arc=none smtp.client-ip=209.85.218.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JLgRf8/Z" Received: by mail-ej1-f42.google.com with SMTP id a640c23a62f3a-b8862767cf2so70986566b.1 for ; Tue, 03 Feb 2026 10:56:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144995; x=1770749795; 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=3Vvinyd/bDfTMBX7NZU90g5DKWFs8k0OH4aETYAERXs=; b=JLgRf8/Z15PbxkxSkdnNk8QuC+n7NS7mURzDKBql6AFav/o0McsWJNl+8A52UTjuZW qeSVCqsnzcsWWdNe/1jP+dhyWG3pLwDBIRllqaUiZ5KxLq6qh56FrHkx9c9VMS/93DIi SaPiLPMlwaBvOeC6h5nGQOhKyjS5iZmxlzxeSqt/NwzasfqIxoRdWLjTFQztq9uazs32 OIwGMazrpBDUiAtZWuxhzCVCHTUchb2aZu0jLxT0Wew75fxKvcDEWzjEQ5phEOt2SOZ3 2CjN7d4PdNzj5xtbSm/i2WP/dSY34Qf4JlM85Z7P/RrjOpcCioiwuODVh8JprHi/xRx1 osTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144995; x=1770749795; 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=3Vvinyd/bDfTMBX7NZU90g5DKWFs8k0OH4aETYAERXs=; b=kwRGD6DgskHCVA8A3C8P4t69aPIEerstuAcbWzXFPvW15bFOoQcBEg4xq4eFJb6AVn 7Qk0dKfK3JHktk2+s7SEHAdSSVEgZxZEL+Rvsh0RX6IxFg4bRaUyizDufLWUHdeqTGxk 5+IpOiWm3m0039JvSGz5xHIhf56gA8484cAOgfwgLtyxuw2Uw3QrxzBhy28+RFo5hGsG FWfh5Kuz3BhDPss1VbJDNI/j/lrelqlkg3keXNvrri5M/AwFR0gRXaJ/agGQy6W+6n6O QoIbax85QAT9O1zUgAN8/oD9KlV2gfAkgan40ljWGh3/Dr68VKR2Jhiz0PaqgL96iELa SM1g== X-Forwarded-Encrypted: i=1; AJvYcCXuUCFNxTDlsvi2Wn9AWxTQpgXQzPOqsv38pAuf8Ox5aRdlkjhdYrFyE0uRWgZgVTFUPnscaUvVfVAeiiw=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3V11Lb2p+qgf39W+96QEyVlgkorw8vV2A0EGFS8ctayHEgINr 2dwFAaKHe3+E8j0Spnyq5R6fQpEPm8iLVoeRmzKqeFou3l/czUd3j2Q/ X-Gm-Gg: AZuq6aKqCOmoOkLe0OQ3uENubZqH9+9Y8LUeSpUgO1Qm/ZIvfuIzbSPSboZFH0Z2vpZ y23HptnJTsgNijGuWOM/tc2/9W7kGtIti8wA1jzjXxhXZYQpyRKAyaycXW0AIFngA+8H44yMdeR fxvQAXRiVqN4jKp3GKNoBAQCbkxjsckRR/vkq6MZr2Z/aXIWVvFngH+CC2B+HQCCIiDGi3YJzTv 4koSJbOMvmixyHq6Hy1KAmFhi5WouY1wukf7HghlEUNdURcCxd6iWSFs9csYfV6jR87LgIs9Zle XLs5pK0npycxCUDaqnLXXnCvCr7sMVrOpKEm9A667MNCbEqHEM0zffYWXe9EGppgXh9i9KO9+v2 zE1/W3FFQaY6ICs0jeqoaxx8ziGT54RxFGBNgAdX+1hkCqgOB6i1CMJ/tZCozlN7ah8Q/gAaPA5 8MrLOv7WQaUftxuWX4ziQSWeuW1upnOg4A/dTldDgXP19f/e7b7df2n2fQt97K4wSw X-Received: by 2002:a17:907:3f08:b0:b8e:7dcb:7f23 with SMTP id a640c23a62f3a-b8e9ef22f6amr20457566b.2.1770144995003; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:34 -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, admin@ptr1337.dev Subject: [PATCH v3 04/19] drm/amd/display: Use bigger VRR range if found in AMD vsdb Date: Tue, 3 Feb 2026 19:56:11 +0100 Message-ID: <20260203185626.55428-5-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] Some monitors only expose their full VRR range in AMD vsdb for some reason. [How] Compare exposed ranges and use the bigger one. This check could be merged with the previous one but it's better to keep them separate to easily convey their meaning. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4177 Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 856007bba4d9..284f5b326c18 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13242,6 +13242,18 @@ static bool copy_range_to_amdgpu_connector(struct = drm_connector *conn) return is_freesync_capable(range); } =20 +/* + * Returns true if range from AMD vsdb is bigger + */ +static bool compare_ranges(struct drm_connector *conn, + struct amdgpu_hdmi_vsdb_info *vsdb) +{ + struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; + + return (vsdb->max_refresh_rate_hz - vsdb->min_refresh_rate_hz) > + (range->max_vfreq - range->min_vfreq); +} + /** * amdgpu_dm_update_freesync_caps - Update Freesync capabilities * @@ -13313,6 +13325,10 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, if (is_monitor_range_invalid(connector)) monitor_range_from_vsdb(&connector->display_info, &vsdb_info); =20 + /* Use bigger range if found in AMD vsdb */ + if (compare_ranges(connector, &vsdb_info)) + monitor_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.52.0 From nobody Sun Feb 8 13:27:35 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 2D35536A002 for ; Tue, 3 Feb 2026 18:56:38 +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=1770144999; cv=none; b=ErfF+XZLBN1AwOo+G7/9U9rrlX2se1prUBZ4Q2nzGcaPpoqgHqvSzu3HjV5YR01ThHR7rOUGf9CiDtUpbgjRyhCxtp9XP7hmjQbi4Gw4isSjtxccMB5HGDLcjZ/HGBig5UcdBXGoMm716L/kczUcLFQWPGjkYrq7E+DZdYeNM6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770144999; c=relaxed/simple; bh=snyIT7Y9dtbMQlPtwSsAcf08PH13JqsIx5nbdEVK//o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cojJL9Mf44lDPkxROkAlzWY59RJ2asGi7bmXNKa0rWK9fMSADD69Jvji7adUu7G5pSHW2cW2IXqlfbofJP474Eq20k6fMEjOPYq4NICcfnUy8a+Oj+idTBI21zfJFIqTMNwmBjCezB+s+Amko96aNkvY9qzjTi65tpMPRwEU64k= 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=GY9vwU3o; 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="GY9vwU3o" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b86ff9ff9feso66073666b.1 for ; Tue, 03 Feb 2026 10:56:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144996; x=1770749796; 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=q+ZB2qoFB/Khv3mGyMG5d46tlWok9FKjAcvbDsJRp/U=; b=GY9vwU3orm73hjMaQ4Q5HPppWqfvAF9XEKT+B+WjQ189DryzHeYDwDG3fAu/Ygxz6B kMM6wG1wbE1HuUAOKgPmoJ4V6aF4JSHzoI9wjjiAoRlNfTiTXJZSJD17qK3cBRjRrAMz VohCjXvuNcHLxoBFro93JOdK38lW1Zo06nYGo6wg4bH5ejkuhd9PXfdus5cETDE51TQy gc3n60OHMiPRDPJJHdKvsMWapdrZuZkA37lUWmSxJxjyg4Tk1EXvfm8EOg1GxF/da60u sN3chmZFbtUnIiwnj4dMvG8MP0yj3KlDC1LloIDjQ5o1KL50EPn2xJqGfbUhYYTa4H2q KmaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144996; x=1770749796; 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=q+ZB2qoFB/Khv3mGyMG5d46tlWok9FKjAcvbDsJRp/U=; b=muou2zpgn7jT1CqHj8PnL7kvirsH0g2ACf7Sv4ATUIA2V8hwMEgGS0jFd5cnPuPorJ pY1ndLl8YnEa6iTB4ovC13YdA7einZ4UXvRCgpwpRt9F3zhECDUBOgHBKeST3BdlbpW+ g0Q8VblQfs+wa1xJQh5hTmF8KiXa1E0zzJZ4cPi8cNWcRQrTCVz5aCqTLhDhhI3+ja3/ cJMKkSK1BontVpO5R5SdcGk8sfo9thG907d++uNcrlIogO9CNR2A6exgsxL7Lx1aC8mB rBGXUVAYyNxn6NVLAm0EVqru8tN5iFGcNcPUyeuLua5Iztx5gpd03ElRjIyILx4arslX SYQA== X-Forwarded-Encrypted: i=1; AJvYcCU4klM2HFOBhxjKdRCXbafxerMTVnV+gvmLitbYfsgM2774OlZgwhl8XIm8LIPkf2/k0M/PGB9g2kW4DrM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzn2Ok9oJox20+nsFNIV+45vzb2iS9lBZPV/1yIOZmGXQacUpMW YPU8xRo4ZYkZ7FjsPer83+QoXLrLAfXppjd4/3OrEzGYbx3xyVpgrho0 X-Gm-Gg: AZuq6aKgEP17JIKseyT+PRPL2pxTuS57N6cGFDbZ3k+skjeDcaw2qhSFnSk4uyf35OE qr4WI2lXxB/cdFsL5AKxxEmetjHHXpxvB/3qILANZbiUR4YLOTRny6341FaCladvIL/GvZBzxFf dvhPpsaNudVjDjHuLzXf1Vq5Gp9suukb1zATHXBeg8Z8+fXg5Yn10Fk7UpaaPpA7+v5VbvB2u3p NeumnFs6FKG1n+DLC3Xwg3a4eEo5vA8QA6RkrS6P/UfLu6J4H1LFGwIgJi5OszxRzJBYNCJm5pU N9XzHGKbQBW8e9gKinSWbu+DRLehfSVp4TD+YPa4v3fzlH8ciWrLvl4SP9fsz/dijvZLaZfMs9f VNDEWKRbf4U/Aej+/OagJHo8ur3oB75Uceof6pgdMLIluiHB9eOF+sv3xtMZQ+LjuBr7qbCuJVE +CHFGWsqF9BN9XiXrGk4TrsW73j1WB8+PCX0xDe+M6KOGAmF081sI7qKrAVX+RcH43 X-Received: by 2002:a17:907:d78b:b0:b8d:e6d2:6440 with SMTP id a640c23a62f3a-b8e9f176cb7mr24148866b.2.1770144996415; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 05/19] drm/amd/display: Refactor PCON VRR compatibility check Date: Tue, 3 Feb 2026 19:56:12 +0100 Message-ID: <20260203185626.55428-6-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 Reviewed-by: Harry Wentland --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 24 +++++++----- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 39 ++++++------------- drivers/gpu/drm/amd/display/dc/dm_helpers.h | 2 +- 3 files changed, 27 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 284f5b326c18..9346b62d981b 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13278,7 +13278,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; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; + bool pcon_allowed =3D false; + bool is_pcon =3D false; =20 if (!connector->state) { drm_err(adev_to_drm(adev), "%s - Connector has no state", __func__); @@ -13306,18 +13307,23 @@ 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; + pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed(amdgpu_dm_connector->dc_= link); + } =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ if (is_monitor_range_invalid(connector)) parse_edid_displayid_vrr(connector, edid); =20 - if (sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || - sink->sink_signal =3D=3D SIGNAL_TYPE_EDP) { + /* DP & eDP excluding PCONs */ + if ((sink->sink_signal =3D=3D SIGNAL_TYPE_EDP || + sink->sink_signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT) && !is_pcon) { /* * Many monitors expose AMD vsdb in CAE even for DP and their * monitor ranges do not contain Range Limits Only flag @@ -13342,17 +13348,15 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, amdgpu_dm_connector->as_type =3D ADAPTIVE_SYNC_TYPE_EDP; } =20 + /* HDMI */ } else if (sink->sink_signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A && vsdb_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); - - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST && vsdb_info.freesync_= supported) { + /* 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->pack_sdp_v1_3 =3D true; - amdgpu_dm_connector->as_type =3D as_type; amdgpu_dm_connector->vsdb_info =3D vsdb_info; =20 monitor_range_from_vsdb(&connector->display_info, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 1f41d6540b83..45a91df619d9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,40 +1381,25 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -static bool dm_is_freesync_pcon_whitelist(const uint32_t branch_dev_id) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) { - bool ret_val =3D false; + if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) + return false; =20 - switch (branch_dev_id) { + if (!link->dpcd_caps.allow_invalid_MSA_timing_param) + return false; + + if (!link->dpcd_caps.adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_S= YNC_SDP_SUPPORT) + return false; + + switch (link->dpcd_caps.branch_dev_id) { case DP_BRANCH_DEVICE_ID_0060AD: case DP_BRANCH_DEVICE_ID_00E04C: case DP_BRANCH_DEVICE_ID_90CC24: - ret_val =3D true; - break; - default: - break; + return true; } =20 - return ret_val; -} - -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link) -{ - struct dpcd_caps *dpcd_caps =3D &link->dpcd_caps; - enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; - - switch (dpcd_caps->dongle_type) { - case DISPLAY_DONGLE_DP_HDMI_CONVERTER: - if (dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_S= DP_SUPPORT =3D=3D true && - dpcd_caps->allow_invalid_MSA_timing_param =3D=3D true && - dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id)) - as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; - break; - default: - break; - } - - return as_type; + return false; } =20 bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream) diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index 7014b8c2c956..e51f1e489129 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -220,10 +220,10 @@ int dm_helpers_dmub_set_config_sync(struct dc_context= *ctx, const struct dc_link *link, struct set_config_cmd_payload *payload, enum set_config_status *operation_result); -enum adaptive_sync_type dm_get_adaptive_sync_support_type(struct dc_link *= link); =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 --=20 2.52.0 From nobody Sun Feb 8 13:27:35 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 A5F6F35EDAA for ; Tue, 3 Feb 2026 18:56:39 +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=1770145001; cv=none; b=XcinDS1cnoPrf9LIPZZddab4QC6PKBHIKvl7GyJTKxnYFlAkJfXO9HB9nOmqQgcdKtWhn/Z1uWvhIOYZxWwtt5tRraYZHjICvfrzhlDZb9sW6cqXLXDU2r0MaOqvHMONm6lOj/Y8TRKvseX7o0n09y9JaOBQ0Ti8w3FcABySq3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145001; c=relaxed/simple; bh=yrTmEw7PKWJs1PXo/0QKGtLAcZCrZl7eqjvtXEdudwg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SU1Scj7YMJdnWG8XeoDp80lRtEdi7HOoI9AkfvNZmtfYBzG5NG/Eo0/1TEhYdwLCbGqV8NpEgpCU4I3eSH3ddJ1qhQDixo+fu4mWLIfTp31E4swHperWj2k6K3aAP9jBpEhJbd6RnL4rPmRwX12AjOMy2AAHHwPSDyRNJT7gquY= 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=HWqJqcgc; 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="HWqJqcgc" Received: by mail-ej1-f68.google.com with SMTP id a640c23a62f3a-b8715908e58so58239866b.2 for ; Tue, 03 Feb 2026 10:56:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144998; x=1770749798; 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=5yKg3D/9dFo9DlQ2bs5wqdmVuHtjRMfS9ivthm1FMvY=; b=HWqJqcgcF4HnR9/us8he5uype+mLzGnoDtrbomhMbtgFMi2AHupuy3OzAv5M7zcX4c DTBkzP3UOX0kR7NnBZgRUmX/pJcNRDqvLBhEeeAo6WpDDPXm5FIPJ8Vbm9AKnzPBcJ8A zbthA9JRIbeQLcg5ZWCAhlvsc2Ah+GkmfTrpARxwo38yvn2GwqmXzWUAim0hKdfQGaHD hZQmb+ExEUn/OI7AWPXTto9On4cA93TrSniWW83jDmbIYjpypFHqqe2pLTaDyBcbP9sj t8k8smvU/gKNmwTExoP9cIqXbBDuanZm7tmfKAAbhZJeSD9Mtq8lh8MtQgvL9nXZLqnL 53tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144998; x=1770749798; 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=5yKg3D/9dFo9DlQ2bs5wqdmVuHtjRMfS9ivthm1FMvY=; b=kj6kwT7xVqlNgzgjL8PNyoteE2HiXyEQeE8l1RxqVQo7/reqRxIWMl3vE0A0idN9Ls 6ahmWvrXN4V/IJEdnNEWw0ehENDI6VV0Ion+QuAtIWdShiz/G2qPqkib5UXVPWhvSwue KzdonZivlOTsbqnPM4bA9SonpdZK+AfqeXatW3o6f3NNngvuI5eUy6SWN84ZJ2iP0KNW il4+1p0eMn5OfGz9KVq5h55x+bGlBf2t2zXfCi0vAX1L/QVx+nmWf7DUJeUi6YSf40Qk Cx3IO8mzqutARR32gjE3MwRKhHKU4F6yK/0j/YyNkRmeE7/uUFG8zJ7s4HkciVBHg0OY L3tw== X-Forwarded-Encrypted: i=1; AJvYcCX+BV7KFO2hUBmGC5Nrw4C0q0KIbCHsVo6WIiWxMZs5inalRRlXnqunwcaSCKiJ76O4895KUEUFH0MkMOE=@vger.kernel.org X-Gm-Message-State: AOJu0YwQ0vsjM15aGR6gcSyWtxdmZRtEe1kCseo2vBpbTOzviSHbVKqH 8dd9rjB9E8490EUyLhm6DDt8D+gCn3f6lwjaemyfI55HKnB3lZFgFgbW X-Gm-Gg: AZuq6aJk2SXMUfYYfu8SR/2+eXyKb5Nk4g+7//K0u8saO6abyhh61Lmgn+RQz7930p5 6ZlhwYZcbR54r6hiMTRg2KUyCnwSl2M+CnSTs/1NIv/Iuqd1mKBjsQoa3ODaV6Qdxqu1x2AI9g/ Xen83KzsbmlDxJkpkFHWjxXJN2UhDhjlRjBG97gDeLEF37MZElRBUVaiihsd/mEf2tugK5HxxCZ ZL5pgH0xSU1QWFlm2WiaJWbhFnelIzHEtaLnIlpXHhkmC7dZwxIV+WKIi2d81j0zBJSrHJKT5fz EBinqMAmZUwRS8VmZpc9ck58LhgLMTOa1ySYWUZFMvMiLkPEBcw7rnGw5rAWuHg6mEQgBZRH390 kKVcd1CD0T+Yr5UpFyaCDU0LyaWp7AwF7YlsM5jv3B6JuFQMtFqARE/lRLgz7klMaEBO0ioBJ/X pmGX7+Us/kBIPMpSx/p3IF43v7NKy+WPpjIA8BfOHAbWSK+BtLUrk7k06Y1r43m/IW X-Received: by 2002:a17:906:99c5:b0:b8e:92e:d2ef with SMTP id a640c23a62f3a-b8e9f3f70famr17566866b.5.1770144997814; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 06/19] drm/amd/display: Add PCON VRR ID check override Date: Tue, 3 Feb 2026 19:56:13 +0100 Message-ID: <20260203185626.55428-7-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 9346b62d981b..306c29ff38f0 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -2062,6 +2062,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev) if (amdgpu_dc_debug_mask & DC_SKIP_DETECTION_LT) adev->dm.dc->debug.skip_detection_link_training =3D true; =20 + if (amdgpu_dc_debug_mask & DC_OVERRIDE_PCON_VRR_ID_CHECK) + adev->dm.dc->debug.override_pcon_vrr_id_check =3D true; + adev->dm.dc->debug.visual_confirm =3D amdgpu_dc_visual_confirm; =20 /* TODO: Remove after DP2 receiver gets proper support of Cable ID featur= e */ @@ -13314,7 +13317,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, if (amdgpu_dm_connector->dc_link) { dpcd_caps =3D amdgpu_dm_connector->dc_link->dpcd_caps; is_pcon =3D dpcd_caps.dongle_type =3D=3D DISPLAY_DONGLE_DP_HDMI_CONVERTE= R; - pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed(amdgpu_dm_connector->dc_= link); + pcon_allowed =3D dm_helpers_is_vrr_pcon_allowed( + amdgpu_dm_connector->dc_link, connector->dev); } =20 /* Some eDP panels only have the refresh rate range info in DisplayID */ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index 45a91df619d9..cb8a2855ac10 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1381,7 +1381,7 @@ void dm_helpers_dp_mst_update_branch_bandwidth( // TODO } =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link) +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev) { if (link->dpcd_caps.dongle_type !=3D DISPLAY_DONGLE_DP_HDMI_CONVERTER) return false; @@ -1399,6 +1399,12 @@ bool dm_helpers_is_vrr_pcon_allowed(const struct dc_= link *link) return true; } =20 + if (link->dc->debug.override_pcon_vrr_id_check) { + drm_info(dev, "Overriding VRR PCON check for ID: 0x%06x\n", + link->dpcd_caps.branch_dev_id); + return true; + } + return false; } =20 diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/disp= lay/dc/dc.h index ab19b6230945..7b22575ff638 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -1057,6 +1057,7 @@ struct dc_debug_options { bool scl_reset_length10; bool hdmi20_disable; bool skip_detection_link_training; + bool override_pcon_vrr_id_check; uint32_t edid_read_retry_times; unsigned int force_odm_combine; //bit vector based on otg inst unsigned int seamless_boot_odm_combine; diff --git a/drivers/gpu/drm/amd/display/dc/dm_helpers.h b/drivers/gpu/drm/= amd/display/dc/dm_helpers.h index e51f1e489129..5e77deb09200 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_helpers.h +++ b/drivers/gpu/drm/amd/display/dc/dm_helpers.h @@ -223,7 +223,7 @@ int dm_helpers_dmub_set_config_sync(struct dc_context *= ctx, =20 enum dc_edid_status dm_helpers_get_sbios_edid(struct dc_link *link, struct= dc_edid *edid); =20 -bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link); +bool dm_helpers_is_vrr_pcon_allowed(const struct dc_link *link, const stru= ct drm_device *dev); bool dm_helpers_is_fullscreen(struct dc_context *ctx, struct dc_stream_sta= te *stream); bool dm_helpers_is_hdr_on(struct dc_context *ctx, struct dc_stream_state *= stream); =20 diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd= /include/amd_shared.h index ac2d3701e2bd..894e1e738ce0 100644 --- a/drivers/gpu/drm/amd/include/amd_shared.h +++ b/drivers/gpu/drm/amd/include/amd_shared.h @@ -412,6 +412,12 @@ enum DC_DEBUG_MASK { * @DC_SKIP_DETECTION_LT: (0x200000) If set, skip detection link training */ DC_SKIP_DETECTION_LT =3D 0x200000, + + /** + * @DC_OVERRIDE_PCON_VRR_ID_CHECK: (0x400000) If set, always return true = if checking for + * PCON VRR compatibility and print it's ID in kernel log. + */ + DC_OVERRIDE_PCON_VRR_ID_CHECK =3D 0x400000, }; =20 enum amd_dpm_forced_level; --=20 2.52.0 From nobody Sun Feb 8 13:27:35 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 CBCD236BCD4 for ; Tue, 3 Feb 2026 18:56: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=1770145002; cv=none; b=XvphNCsiCPdgCXNOqUUfnFc0uG7AtbSSopKXAAGeIrz3SBoMcH31E3VQMwn5PVwRSI5xcjbyrBXd8HAn+TT8hx5Gt0GEES8v8HoD/bcQJUtDGcjfETVVztm46Crdvir6En1kBovODUIJEAXXthe5wqnf+rEd3fkE47mEadDHG7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145002; c=relaxed/simple; bh=3gLoNjBt78fz/0qHqYjcn5htLcSoVCIoZ1Gk8CC/AZU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BN6LUA4jdun8vsKWnbMoI1bnejaXxZaOCeD1xhEnQBuC+fDXtrqkxi8+/cWiRY20fcEQZaM5E3wmXMgl17W080rG0RW7VpE9xK2qCEEa+PQkhJmr79tazhBo0vQAQluKNDYB8fYDhvll3Q/3QZT+flARBTDPUOczpN+7BoEnhw8= 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=RQDPHKXQ; 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="RQDPHKXQ" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8864618c99so61960466b.2 for ; Tue, 03 Feb 2026 10:56:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770144999; x=1770749799; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WUEpNBWo+nSLTU4UotiQVijk+9VhpRak/nFSgqx/fMg=; b=RQDPHKXQm77MlLONMqbqK21UJLHBD7bHt7We3KtrVPRIGCuwsqZGgp24MRBhgyU3Ez TEiUuYBCRvZ52JLY97jfCfAiKQtSnLBbW1a4xU9NnAyrw+7dEZLHdxQemTbmlOf9KwKi KFspiXRgmUegOaWyKru2QWuYHcpohUAw0A39EGt/TwmNkeil35ktxiHA8vwWXQHy5hiu SmSuvZKIpXrz/UQrF30+Lq22cs90EVokCh45V4drMyEZ/v6cDNWO6J21I/c67DxO8xHQ CFxl++I2J3zRtzAsw/G9IHEHk3u1puCX7uh/Ob9yDKWDX65Ch8xovJ4mnW2nkCpoHtG6 blYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770144999; x=1770749799; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WUEpNBWo+nSLTU4UotiQVijk+9VhpRak/nFSgqx/fMg=; b=HQT1AWAMl9Ddwr3YQhPZW6eiGqQfAa8BIRJyMz+GQaDjvoH1PUXbO/jHTSvLynQ3di QpKlCBhdoEuh5TQsdytTWX73pUcLr4CQPRLOG4okwjZG5c1ErO8RY/jOwnGKDaNUMInn eu0VH9L2f1gslTXpAsMKxeNVe1kA1mkoO2FkhbGutjEDfqxs5AcN7qhSIhySFRn6ER/a HFSDj8+mumJExBnNp8nXvqdikh8BaEnxBsohKp+jCAstdfEm+mIsrXIcbmW5YV/6lAtR igOU9qf1uZgltdYzV3e6MxYXngOfwx8MIGQIGKRgG+jguBUSuWZ0vUn2RRSaM8K72FNk AJVA== X-Forwarded-Encrypted: i=1; AJvYcCXuoN8Lu+NwzexHN5HWXJ7Scy5BxZO/2nHjPTRNAWIyE46wZQ9krOkU0YYYJ6KO4QjEpu8PQDhddkXfB7w=@vger.kernel.org X-Gm-Message-State: AOJu0YyXXp+BOBcq2TDeCs5zCt77KX5WNvL6A30yFC4FsmXhMjAXQluO pQPStCG1kn4g8+jPG6fBi2VrOrd6EtgHoFQLNcQJgr7AW8dygfK48qxcKsEqOspG X-Gm-Gg: AZuq6aLvm4cy4u3OlVe149z0DtWmeodL1Psx42Wj4B3x/Kp9oBQv9wO8zV8+B8P0DTw WCnUd9Ae00KhG52bfj1+sAJ2yzcN2ZxAA4bgvUXdtXSUUdGhdagadMY1thGOh9Q6s1VlQm0hojb ezesilrZ2g9IXHiLDC1F7esTLbBF4ImY6Q4ERWEgd5KS3MDtonF6wzbfRHcIrBcNJH/wdBaR0+k GzP97vi+GZhn2eV/Vx2iHjK+6TX8s7BAT6AWTkSKbrJ/bgPpAPtjyhxbbxCcfnY/jQ5Mxf4Wb7C Oq98jT3j6ah0ixI2RNmcD+RdiAEf0iu+FnhtUDMHczeVQEi0gyWMHMXI8cNiuURPwIPRrz3E7bL YJ/7ofmZ7I9Jsio/1ChXne/sEYCQOoml1mYrTM+1Ca1NZLM/ip4Ys7CSfyT0goMPpo0k2a+Uv/0 duCZcNH0iSt/9j8uu6MT3Nmku+xLOREDZJVv9HdQwtaHGLh1U12phcl43GKZ6rKb8k X-Received: by 2002:a17:907:960d:b0:b87:3087:54f0 with SMTP id a640c23a62f3a-b8e9f2f310fmr21821166b.3.1770144999082; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 07/19] drm/amd/display: Add CH7218 PCON ID Date: Tue, 3 Feb 2026 19:56:14 +0100 Message-ID: <20260203185626.55428-8-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22CFA366573 for ; Tue, 3 Feb 2026 18:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145003; cv=none; b=UyJKmpXxHD8ILfVlidjWe6s2AFHRhYHQGG55NT3tKUI16q26Y4Q/LbNQ8RrJ/99FViEiRi410RLUfDyGZ22AfkfHjxI67nIr8K4DZaLY+hA7l7CqfZgBIIZBtijuS39F49Y1W1s8efV523gnwMQz+ARrsZdxOUWJjqlzGOmMCw8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145003; c=relaxed/simple; bh=cx52QJlft1bM4n6vi9SSW+hvMdKIvzkY+L+RvwRsLMg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sB/gGIWyF7d5CqJo51Qlih5fmnCs5R/T+1FuPITTsp/SFVck17Kd34wvl/VE0/V3123kvh0GIebiF78pLm3t4XWxGtDChqEYZhM+E5ospsPnuqphB+BQMD2niD/a09nqMnlfiOzuVZWgGMMbEdb2kHNAHY02agBy9EMVtR8ZvLc= 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=h2wZVixF; arc=none smtp.client-ip=209.85.208.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="h2wZVixF" Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-6505d1420daso706090a12.0 for ; Tue, 03 Feb 2026 10:56:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145000; x=1770749800; 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=2mAB3KDw5GOUIKIF2o4N4gSZWkxRRmgXSHPln09h9Vw=; b=h2wZVixFYc+HF+pgrj8TkD526j7FqdjyI+4u1xloaNV3dG0w90wMCGQkf6VzYxbfJd sI4I+jE+g/EwKKUvSotp17/1WBxlCuE1gRtgTWw+vou82q+ANBRBGbfY+rzJNOV9CEIO Ptvc/DF3MFrYATKFHni+k+CDzDqAhGf1wwD1ZNc89SPnVVChKiBxMFWj+rDo6S9B2TSx NPztEbwfh6scKhMUsZPF9i/8Wk5AKJM2jgOuHpKE5dgiGNiVwZ/RYmNnjj6srl3EQboJ SOW6psQUtpvzJ9xHt9xW8cHuryQsb+Hp51xsVcTyCVJc82M3SDOjID+QgONGFATHdNLn BFMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145000; x=1770749800; 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=2mAB3KDw5GOUIKIF2o4N4gSZWkxRRmgXSHPln09h9Vw=; b=h1zYPVCs1O8VJ4XEMlYuVbzIJQalgYJm2KkfcVpINIsD+L4kAEWaZud315X96iMmoI 8T1eKByUCE/LMih67SRIcC0/0YXalrdtnQq5osBkgmQwsjzIYsdCV1WEXIprzQeVp341 6gFdPFAMDPJSzJVPguN5dPbomP26+bqIUXNQ+Wq/a1Ae9B8zXTgtSUkaLv2W+MgROzFQ BXLcyuUFiCFJIfTyiu07AsIU9qH9u4uNS4Y0aq3a6ziv3UzVkyFR57G9Mx9hyaVFXf+m i4a3thDNgFc4RLj3VozE4JNUbMyhntOxolPKNDtCw/4f8yNq17RmqNb+qN1MPbSs0Hn6 peuA== X-Forwarded-Encrypted: i=1; AJvYcCXB7ByI0B0i7jewCLlpMCh65b0q0SgXuNso9bsdBYXec8mT+F2SY1rk/9ZYWYeTaQo0F5bS/+7zHMckInw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/+ctJ0ecpkBuqarY20Kdm1OyQvsvuByHT+XwsqgP2RvKxFrUf w5bCvbt/sRd7vI+JmNDqgJ+PhXlHC4U4p0mHALKNF+urn94XOdCfVfdw X-Gm-Gg: AZuq6aLMZyzN1ykKB/DhD/HFOmP+8fgvotJUNkNqoIuwcEv8yu1gHlHmHFhXMYPKJ8r AuQFL/v4croL9aquiGshjSa23Z/R47F7jjZBx5yUedO4qzKe48jnY/Usc+lC6v+CkuHyxwr2fdB gA9z8ltixIDsOl/iVYmeDV3Mt9q+BZY7JyTLdXPZrX+C1kVlXC6JzuDh4HZmr7UaKrr3I4H2q++ 7CTgxeJJOoQMgDNxhRakELNOlW5QlfJLnsvb0lgd2nQDNqWonD17NP+wVUOSaTmow0HAUt6slm1 6odFydKoUpLxQ15t1GkdN2CZIUeW/3pDLUZEwffBIXWy7pq8Pr2A6VCl21/TN+1MXNav/lxI9M5 ZT0komycTBtkL21BirBl1yn7M7Up/wDSY1ge/0X6bYT7PF3Vam6zRiA7ttRXg7tftuV87mvZVB+ nKPCjrdAuAZPMzrUkzx4qdnPaQUd0hiMV7XqD7FYuaxCo1oGEX9jGjpTIDA1ilQJ/zo9hhAl4vi IA= X-Received: by 2002:a05:6402:5214:b0:658:1299:8a03 with SMTP id 4fb4d7f45d1cf-659499b6960mr282428a12.1.1770145000338; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 08/19] drm/edid: Parse more info from HDMI Forum vsdb Date: Tue, 3 Feb 2026 19:56:15 +0100 Message-ID: <20260203185626.55428-9-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 Reviewed-by: Harry Wentland --- 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.52.0 From nobody Sun Feb 8 13:27:35 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 47C8936EABB for ; Tue, 3 Feb 2026 18:56:44 +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=1770145005; cv=none; b=jO8SPMW3cQL91h2702vZwEc2xqYXh+TtLDriUyozRXk6EuSC8Q+9/ZuNFGpECkbbfiPZ5q4YrT11JzY15coEpmttrzzqYGtmT8Abhq2FCUx+wawJBQ8WrwLs18NaR6vogf1Mb7rK0mqGDR99xfDMQYzp1AONAA3Yv6An25E2wiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145005; c=relaxed/simple; bh=N1eXSSNfp01gLXOF7FNdG5blCCZ7uCNj2sWGux7xpgc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oMIcyboH9JFboyDy/etTXABNFU/i3w3rTpv0fTDmG4spAbCe0wTP7NgAyLa12CVzTBM535UrqqirhArUtkkGIMWgqvLCGKiKAX6Kr+cLBbh6tTqptkEW54bqsdxNemyJVg+UUan9ngF4avURQvMwG9jcXXl59fFQxCT23o4bguA= 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=F8/qwYn1; 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="F8/qwYn1" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8864618c99so61961366b.2 for ; Tue, 03 Feb 2026 10:56:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145003; x=1770749803; 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=YdVCQxWwUXKIDsVOML24aA9ZG1ZMvoKKkZER9vT4/Og=; b=F8/qwYn1kqtbzy2zd9wCpBdDa4sT939l48v7eUN3jKGkcFqcv/inwEOf6Z/D4BJqwB p+06ek2yNMrEVRIiM11BmL1EPncarUxZEouevc+EUMPrBh4uk6TFwsJPnBEm94cv7QLA 5fYcyXagdjjzWm/oS0CY2MVaWzdPg61nsXqLIgKpD20HuhHVbjddOmUOM1Emd82/U8T8 legDe4cHS7u2cwYK66k4LbUBsa2/MXMB0sHcy3vMcXYAPyAg14ox7s1jC7BhEkKyNnkA P6Yl/zPRYTx3+RsvrKYvAEAH0GlcSHZHWBpVSA6L4NZWNNtf23F5zjpYxAdOf9qcR2Al 6+4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145003; x=1770749803; 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=YdVCQxWwUXKIDsVOML24aA9ZG1ZMvoKKkZER9vT4/Og=; b=ptCxO5mLG3pjH3wjSRHkeBp2Hksp3NsPqZeRYACDZYFYjqp9F7gR4pn0nrNfMsz/v8 6OrdS/fNzwzHGEIYQtRXQ0l+1JPmAZi/7OgQr9bkKcMu0ipTB5kpWRTE6gZ4ovKBcDj8 vun/ggGjmkUUVcpe68xo2I5Ut3LvD7wOJ/kzv5jPSPM3IhjYCQWENn2+Cm9XzdKyJr9T 8TwMKNVQli3lnwVu9NCIMgUt6Kf59R9dFkAvWTSbRnYqfmwkZ4tJxyiruU/vSgqEzde1 +/Xks6cYfTD9Sg3E73N1XySNblpTZVbUoaZiU/oewlo5/wLkJdJCNu9LaJrJumGJ4Kdw ptBw== X-Forwarded-Encrypted: i=1; AJvYcCVZF0VHZE1hAqKOvXEnHkt1PRQjmn846vB6177S1emGjuYGQT75YsHXc/NGxfP+QtNZk2FvJOrv7fSmcNE=@vger.kernel.org X-Gm-Message-State: AOJu0YzLygphs5OXXeFx+OUU3imDQ2IEPG9tOwMcFerY3/Z7dJZbfLtj 61hwbkHKdnakQfKdep271fB6Lj4M9S2WPliXhkF6OfH9syE2egniKGgC X-Gm-Gg: AZuq6aLsP3ahjhwdjFknUKLSUy5LPunoouDNMpLlkxf+/naPevhTWnVrUAtPWGLltrs GDy8y7mGzFyeMk49pXieRJ72zRfAbR7CK96UPck94P4xqlOzJLlXhXWOa04Tjr+tL8v8rfS11me +gp0h4zibkccnmrmnC4H4eoDlgSOIua+j1dZNX+MwemvLR/OwIVEQXX1YCEk7ZBNKBmFh/QTDza 6NAy5ldKBb1sgvoDBpdHKFEFlrucDJxFcgKmmdMIHKwY1aP6jm5EwqartlEkKaqq0yVFB8S0Pji 7EnjIfU1bDIKFat9sKImHNdOmR57wvSkv56u0aXaOhITE0DKkFyMpRlxacR+Hbsk2UfPLvTqed6 Oae+/c4zSKm5dsmVux8pQRlIasvgMPFEmD1Z0WwhJuxlW7zAVNMFVtuE4IBRAsrg59x/2YzESmU Baz1L5HdSUGjkd+rZemM/pToZR6nBP4s8z7hdyABfKGgR36KOEXxxVG2N7UbXURpmD X-Received: by 2002:a17:907:6d27:b0:b88:5095:b740 with SMTP id a640c23a62f3a-b8e9f545b58mr17871866b.7.1770145002568; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 09/19] drm/amd/display: Rename PCON adaptive sync types Date: Tue, 3 Feb 2026 19:56:16 +0100 Message-ID: <20260203185626.55428-10-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 306c29ff38f0..92e571e687e9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9620,7 +9620,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) @@ -13359,7 +13360,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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ed1-f65.google.com (mail-ed1-f65.google.com [209.85.208.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C0904368290 for ; Tue, 3 Feb 2026 18:56:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145007; cv=none; b=WwktzNVNbPZtFQMN7p2fCs9v+ld8gacKquKcyvYSFQlzponAhRP8E/S6JYanHLOlrOICvouN34ZbUt7fqEDjJqr/mKdPYkp+JbSChev2pn1aJSxJA3c3FlSiq2v1ay/2eJZKe/9CbBfyEXGz4woWg5P/RW41tbKMO3q7qutIZdg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145007; c=relaxed/simple; bh=aRFhbOlpFjd29eP0zQQbAFtZuc7uuXZaJBlYh2CY5pc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WBNzzuDL1BrzOPo5DWLVRs+/lXUAr1pdyj8ww+h9nBGIeZf525YVaRugy3AEcrN3FgyB0CaWwQ7XPK6ghpiLxrQb7DImui2XpexvMG3U97j0mFcsjfs06HT0rSW2ZqW7k1gK1Lr8WlRfiSNH1d/u6GcrJDsVkJlukq6PQTVs4Ho= 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=PY42Njyv; arc=none smtp.client-ip=209.85.208.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PY42Njyv" Received: by mail-ed1-f65.google.com with SMTP id 4fb4d7f45d1cf-64b6f22bc77so935949a12.1 for ; Tue, 03 Feb 2026 10:56:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145004; x=1770749804; 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=ZMyppU45ocduU72R81pb5sGVjFLNkBj7pAzByccoIn4=; b=PY42NjyvZffzhIF2feNqlN1kystAlkHJJhW8N8nTAdk1IiT8WLJpdbi87XyzucF3Ox N5h4LAk1VPl00PA3EhKe6bNTUBnuhm8kNQw/PZeo1yf2p8RRVaHqUQA7di2KQ9j/Jwyq niZmBV2ZN/IR6VHZFrgz4gSC6m3kltt6aPDVc+VoIZWJwAAB2HJociiRqHvf7hfzIA56 X7xRh2SlL6SSzV+98IsXRRVjvNDR1wO8qK2PXC370dZqwmqX0I5llB5DYvLfD/FO5o6Z YpA9F85NTmKVWQbL6YhK9E1vcJSNKaFUhRUvuzMUIe5XUq0Fdk5kGJj8ll6WaqOd3xKi Ghyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145004; x=1770749804; 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=ZMyppU45ocduU72R81pb5sGVjFLNkBj7pAzByccoIn4=; b=SdWgtlHYFgJA89hQVTFIt55QMrGu0CxyRB/vYhy+7ZIcH2CNLcOQLWvHdX9dNTA1Zh cklNJZel5Z3ceuFKQpklttpzpQ0LCfeiRSgSbW9vuunSd90diAPdT4I0flpDlSmHpzNs F86Fv2TRm12yP2VJ+qzu9XSay7aYIna0h37xnKFYP5+I/RXh+lCU14zQ4pVX5gSI7CdQ 2nTGdtv6VqVu0zgUxcyKEPGNM2AxzoG3ulxldGzJMqH1gjuqwGm9uLf38MspaCXKU2os jkfyZBwUHP1R82Wj7M7vDTV+JEvtW7jK2eAvA+qiLdjrH7tz4ArdWUfibvkG4esjxX7o p2Sg== X-Forwarded-Encrypted: i=1; AJvYcCX/OXq9kZenKRQBn/dm5d0nWxnjo6X8MyYvIELsrPo8tO8ep6lJ58xEtG0q9WC6dY7MgBCKCdEUsjbrWAA=@vger.kernel.org X-Gm-Message-State: AOJu0YzqbCJXqXITUuLS3RSf+HA0SrtvoCtgL5iPTQcviunR8zD3+c6Y tqMTmhNNRNmrBla/rvfUTTIem/5FkYshKIFt+LObWEpI4V18a4PoDt+/ X-Gm-Gg: AZuq6aIlP/z9sL8OzLHWpPE8pqkhgR9JarEmZdXR2tcm7qBwsDalnhX325Kv7GuMIwr adiDkl+rTyRJH6ueCI9xhzgJksb9NpRs4KtThs+bPnBY1hyrGBKam1uRRHaYkHHFVqYfgJ34M8x E7guQCb+yeM1n162H04M2qH3XghkOnKkanwZg/QO5TZoATegWHokvYe5XLArMSD3wIVjpTRup9p D/ltFXPR69KbhLChHZ4Rz3oCAnUwUW4cwTWiupJzgwsIfm87ghi3Qhn7g149qB1/gXgtTCyk3ZZ YNRjLEUSGPEkCUJo6MI0z1F/1TCOhPDIvLPwHQj2wCB4u62fsuiCSuwrttnGV/VOrqOyG8uWCeB 2ncMA1XMyh91MRX2VLWL5ITHsRW/8LcEkaoHVKsvA0Nt2e8xPWcMIGEmQk1jv83DcQf0KRsXjKs 13tDHTTOLManFcTfA7Uh3yVlOyEHNm9e4FVp6kW2/y1Sz5xKgkXlTxid3e3j4CvxOv X-Received: by 2002:a17:907:d78b:b0:b8d:e858:dee5 with SMTP id a640c23a62f3a-b8e9f2b2cfbmr22346466b.5.1770145003959; Tue, 03 Feb 2026 10:56:43 -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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:43 -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, admin@ptr1337.dev Subject: [PATCH v3 10/19] drm/amd/display: Enable HDMI VRR over PCON Date: Tue, 3 Feb 2026 19:56:17 +0100 Message-ID: <20260203185626.55428-11-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 | 28 +++++++++++++++---- 1 file changed, 23 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 92e571e687e9..6fb23d59fcc9 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13231,6 +13231,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 @@ -13279,6 +13290,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; @@ -13314,6 +13326,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; @@ -13359,12 +13372,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 - 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.52.0 From nobody Sun Feb 8 13:27:35 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 A04BD31B136 for ; Tue, 3 Feb 2026 18:56:47 +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=1770145009; cv=none; b=pEcH/XekYWDmzfYFycbfCfhnsYKFpoixfxn0fJH5h2LkMKrHRdJGsF/jCGRyfAwntTKJIK0YpKYdJNIAhz/bd7op24OADUr7FqPPLZNqhazMlIBYSB7pHatdDKCKFX0bxWRl0o/gdR9F9KmbQltvOZwLRNyktnJwWfFrmq0nrBo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145009; c=relaxed/simple; bh=JwEZjO0tYmGudgHsudxPDTBy24ZS2U9ocac2R6Vp4Pk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bJ7hqBwXEZHuxtDJuQQ4rIVWEpmbkJgRU5cMHi2lrFPGY69ycNfurL4cHX33HbSwUsxojV2hTzRpnO3MLYCDG6EBKB/+HjTEMczMxy6eKAx761/0wI7o2nObsdKkU9lllcrYB7ft3TBZReHRlGZxmuTt4yNr2/FzR5oabh4Nj3A= 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=AYr2PMlz; 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="AYr2PMlz" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8e0e812c27so59079866b.3 for ; Tue, 03 Feb 2026 10:56:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145006; x=1770749806; 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=YveXWB9fxJPi3CW0nlq6uRwljjhlFuvcOGXx+tNrYfY=; b=AYr2PMlzkY1rSryUUIJexrZG1FOrvHJp2OjQO7N/4HI520TmgjpzUjR4zOmMaXz0g8 /7ori9upGsdodAxm6rYJJJ1PI+BpL7APUttwfycfY1EG7C0JPUk5ti5Z+0p4BDJpwPHx v02eCuCGXWNTWqwZBljUk+uuDpSERF99BtH9ElH/LbULp1rvpHU7dO0VNcyHaXn3000n iXUCtqkKeGlJ86ZAB8rhhO4ZhFqMp0csAxbHdYz28GH+diOE3Ut0BUoO7g9wqH7sF/hE kpdl0swo/ypdg4vuLDuf5+woYwFD3NfXad4ehbS38wiTvVX/Ehjy3qzVNVh3vwlDfa3K 4/dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145006; x=1770749806; 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=YveXWB9fxJPi3CW0nlq6uRwljjhlFuvcOGXx+tNrYfY=; b=Ii2C+VC+1ZuksdrqMF18Z+Q+uHx4+WDAZnf6reJdfYi4rGUx12HmUmTzdjOMenqnHR nSlSRH5ONQF/vfy0FEPx9sbe781D7aqglRrmtISzaipWSOrci4Le2vW+FCavsmI1V4mJ eO14vcKUcE76hoPm9jfmWMLC/mkE36Hmdvd5LJSnGdlzk+B40ysIv7LJ+DMz9qP7LR6q dtnU2KEZBkW/A6YAKpdhLyi9jd70siwnisTTWC2TOwH2EXLzFkgokoAyDEjcoLL0B+uD 4syK2GemkiTMBgALYE2tV+zP0ojxoURtybPz0q4civhU1RRwCokzZ9ikU0XIa6dLJ1WQ EktQ== X-Forwarded-Encrypted: i=1; AJvYcCW+Q00KiosM6h2FyvEJQWY2GEFgA0Gar8DjLsM982zPXCH07ULASiL6WwsWz9Ov0+ezhDSgBQMyk3cQwnA=@vger.kernel.org X-Gm-Message-State: AOJu0Yy3Qz0ElfXo5DMLC+rGzp6CJPaAjhAtUJjHvXUA+NuCW5psQnjr AMAmzHEYWmcgMgSrUXi60OOcJRyyB+fRgguSlHVlmTcFhhuXmr78fnTzdenCQu/g X-Gm-Gg: AZuq6aJM//I2Y/b1XYGwO3aMQzgkrYRek+tQf4hO7U9Dri7M1LeIJ8/79rUjdVRGWlK BB1TQ5DIrHfJqlSJIo2Xz80MGgcxPZqSxSv/n4OfiHp6cGpzYoZQeQGZK8oGj3bOMnlC9hxUoI3 8mPFaRkyqC/XWqxDq7Qoa3/swd/maJVvFV8S6bS43IHV+BHAk6Od6UsPEwGjbREXYEQS0bmsgCH bmQdOISeiX7Yx+swFO0hxmb6QUn0+g0ZSclQNSO+uSnmv+UyiXYkNI7N6EIt/aBMT+l91vWEgmv 5WnZDboF6b3f09Vq/Xqak9pMy4m1En1tZ0mg/ODseYYFaHgwUvJTZJbBxhLzRl/I2zNaCPIfb1x aDo8d1SwB6Sqegv9GxMk00PYx8mKuHzl0dL4i9Zalnq8Dyaz2KI8OXK1HyszVA/JWwBIu9cOxG8 PkOTCfIN+gyybehzFLBRru4g7dPLbgYm9GNKn0sPRktKvboo4yuoXHJWm4kOIYD00p X-Received: by 2002:a17:907:3ea8:b0:b71:a627:3d9f with SMTP id a640c23a62f3a-b8e9ec91abamr22683566b.0.1770145005819; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 11/19] drm/amd/display: Support HDMI VRRmax=0 Date: Tue, 3 Feb 2026 19:56:18 +0100 Message-ID: <20260203185626.55428-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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. v2: - Update max BRR value to 1023 Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- .../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 6fb23d59fcc9..2200161da71b 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13232,14 +13232,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 /* @@ -13374,8 +13387,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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ADEB137473F for ; Tue, 3 Feb 2026 18:56:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145010; cv=none; b=iPddixDGdbvwqPpGFBR//Vu4R1wX7VsHsKUI9Wl7gh0XDPdHyWz54B+gWSeXRDUWRUP6H29XY1QocuQRmn36kO8kD7WuLRr191GQqgXRRlGd63pbEsDgf0AXv7eCOXeBz1F5xZjqZjozA1lVRrjBMP0tRh+D5FXnQhoOh+3VMKw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145010; c=relaxed/simple; bh=i/DxQKCBubCNkRr5VnDk9qSpKZNnF+x1Zzj0cBJAXYQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VIxrU2/8UZLf6V8XeEkf/HLICh5/pprAyPYtIhQgMTGowBuCARQTDo9lppkc1A2ivTJxoKSztdkyhxMkQlu07vKL22FHMa7OFd+CvbN3VM2R7+ZqlKpYKbI156J083b4+y25ss7cDeqP5iWAtjsJ2xqqo6G0C7sL9TmPxyJTcUs= 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=JZtGqHEo; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JZtGqHEo" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-64ce9d80429so548820a12.1 for ; Tue, 03 Feb 2026 10:56:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145007; x=1770749807; 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=g0zIdsXy6yEQ4Kw4OgKCvel61dY5GUoe4J4Zasteni0=; b=JZtGqHEomthgid3zP0W3IQ7af4h7r+5vBkv7M3zZOKHczmLZq8HT4F5ZGu3vBMJESY m3z7DYjSjhzQ+nQMXBgDrYGpvY+T3tomQeT7yRek7RLw7GZYjSN7wSXYsW314mBmk/aS WSy9L/Y33KrQKVNR5l1L88wupRGEJjdekmjTFR5oQsS1U0OHrAJ9r1XPpnn9VClIU35B 4joOHzOs9GEbF75OWYl4iQtsrz5i+1o0Fp8iOVb5pTmLnDzOol9x1N0jqGP1B8qy1PpQ XZaZEDStGq/O7MQIPKZSdHk2cLHVReVXsoZaXNgL4VPdrqLx1jfmAPuKv0Z6tJwybcxM Bb1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145007; x=1770749807; 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=g0zIdsXy6yEQ4Kw4OgKCvel61dY5GUoe4J4Zasteni0=; b=Sd0V8O4nhCLTF41ko1JqvZSaBvBFscfMHSXAc+c4KrZpHxtCJl3UXS2//k0gwVTN9k C+25xXwppqLUHGI2GryEYRED8qC87iLRtBZtb5iKtjBCC8lYD6OUieYhCKroHhvdk3l/ DdqN0nHBXGuTK5JOZ96MEKZ4uIA2+E+AI7GvaLjxfM3N+yk37W9vCCwHQZO9qqIAt0Kp DQt9ve68Z0ZG3qfaMLTHI8vNBEp5rstTDodwrSnVMC7a8To3bX8osPz1jp33uYb28RG7 G8uWE1TrvWqOtzkImH2lNg3NQ/8OALF7DLTWvoOS2lrXL65jRi7oos7U5RuP2SKbGMHw 3TiQ== X-Forwarded-Encrypted: i=1; AJvYcCX0XQrB4XyIQRy7JIEuYdj+tgJ5xic38UWkZ9ARuhCt5+56Cp3Q2L0PppV81zIEvi5QDdXxlV8NPPvxafE=@vger.kernel.org X-Gm-Message-State: AOJu0YxPysqmSCkCirfUc2FL8CjZx7WiQrIxSeqHNf0PGnjbVWAbRN3B ZL5aII8LHc8MqqJdRntmIJz6AR2USEQmkb6R/B/BQr8bVv28GVUve0Vi X-Gm-Gg: AZuq6aLTbZUE4hoouRGLwo6B/iT2S2L9jBo3UvgHm2xey2LZTFdlyj1Vy+GcK12EXgn Um+yrE6XMfgGm8CvNc7yGrGGJb+RiPNscZ1898AsbFfHmjrcupi2SbYH57BN4I3QCVHXBQtYUBA If4P36HuKXBjNKKPx2WI1Cg1l9jU92X+NqB9ZWpx3zFCETt4QmbdTBTk27Fc+XDmWBy3PVsdvSB J1UbT9iZ/8JCsGzE7mrKX4DxYQvHTT5tXoL1vwY4CGN2AXKlbb5CaPbbDJOWUXPFPATTL2StOWc vdnMqm6fP8HuMrpiYgpTFTUaIQEvlHXvB4wUowxNh4bZdUsmhh9mjLvOw7kQvfDzaaV+4Niw61Z kyrJSS1UsrXBZ5F7zGwOXUeq/OEoEMezJYOVt79h4eiHVJuidyJ8wdM3JdOzdoT42Fe8YPeFmhD U7hmdz61fxfslCXMjRC33ksh72F3zavy4mL+554i8WYhSbfKBhmpMSKvUXXgRiN1Mu X-Received: by 2002:a05:6402:6da:b0:64d:23ac:6cae with SMTP id 4fb4d7f45d1cf-6594a1e4230mr155645a12.6.1770145007089; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 12/19] drm/amd/display: Build HDMI vsif in correct slot Date: Tue, 3 Feb 2026 19:56:19 +0100 Message-ID: <20260203185626.55428-13-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 2200161da71b..ab01a45aef1c 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7383,7 +7383,7 @@ create_stream_for_sink(struct drm_connector *connecto= r, update_stream_signal(stream, sink); =20 if (stream->signal =3D=3D SIGNAL_TYPE_HDMI_TYPE_A) - mod_build_hf_vsif_infopacket(stream, &stream->vsp_infopacket); + mod_build_hf_vsif_infopacket(stream, &stream->hfvsif_infopacket); =20 if (stream->signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT || stream->signal =3D=3D SIGNAL_TYPE_DISPLAY_PORT_MST || --=20 2.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (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 17A1337647A for ; Tue, 3 Feb 2026 18:56:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145011; cv=none; b=uNf6Z1MH/8K8YR8aC5tL96owEfpDqzWp7hG5Kv/amNljLFHLA7vJZbyGm/ba+uo8DFU9B1VsIWs0OCyfCcH3abPNwPrDemyPY9fcHZGn8U+fINXTIv1aMzzAWemV9fs/p4SHsI7p3trOpmNeh1JziCg3NUEknHq05gG+yzLE4ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145011; c=relaxed/simple; bh=vf5cu6bfSPUzqqCF/xqA8f4ZPyhOtQv0KP91XkoQyWQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hkwc45T/s98L6cMr5V5VlCgvs2skZER4Sm+JfeexSi1rkhdHap3gmwmAXmtq3cbD80/2y5FDEiY/45nN5RqQiANptFz1MF2xM1u/nuiF0rhCflExPY95tDCg6MwMT9y1ZVRI5htw1xhBc9pYhLxGa6a1TXYgRlxry06kRhLdITg= 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=ObeTyMnf; arc=none smtp.client-ip=209.85.218.46 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="ObeTyMnf" Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b8864618c99so61961866b.2 for ; Tue, 03 Feb 2026 10:56:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145008; x=1770749808; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uzW7AW51HsUGJKWqzdZ3dl0YJS+mvGm7coF5xMofNf0=; b=ObeTyMnfSfvpzM6rNICAcfocU982NKXeKk5u9Dw82VEk4YetRqoDhNq0A7RuxsMR51 KvZNRvKwUIEdm3DGcrfDQV8pUOahv1OzukaVYVXmD9XJXzPxaG6HIzI3TtF5T2fQ56u2 hl2ja7zMon0+4G4f9usnU/4WBuBGzZ/Miv9Lp5wAvJbytkmVd8XfrZcSuzRu39rcIE99 Jn/m6idAx87PoRG1ZwKZ7Bpc6yKDyp3gfFtkVPvzBnVp3gT2xB6a5Iz4Q5dXtxsZxd5c UAH15g+QzfF1aoPAiSZgts6f6EB5kEG4DG3XS7zHsFd49fuLoNxDrvBUzb3DgCFWxbY5 v72Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145008; x=1770749808; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uzW7AW51HsUGJKWqzdZ3dl0YJS+mvGm7coF5xMofNf0=; b=Rs8SRDQD4vGDZdUHtcjSAdJF52dB5XyiXWa9WXE05n+dUFdz9rA27s6kjmqfSBMAgl Av9bWMkHI1Croj/BnQ5tq9CPi/Nj+TifNItpHFbDAhVv6qDLdSkO2oUdA3aVZXUhWSxK 5yP7fmgAJMMiHLwWf8OriiBNXcVPfavDBWmGHZBuTpsqp1M1UXE+4HkxbC9xFf3mKH7g AGKSOjSskTNf0Sdh4S7I0tGqd7obdNyXKOjCzb6TfizQKhnz1RvWxMOQxZFtScMfzzAq HS0ljeBx/hq5q+LIMxDVdiSs0lZPYsguty28Y9CLXU+19lJhRLRtVnrn70+UTLtSLatG snLA== X-Forwarded-Encrypted: i=1; AJvYcCUNV4sro4s3A6kCTtejQJHNCdtkyshu+Z7fPeOAOmeilvtllmm+0O9s6sBHnDPTtCBXytK8FHLW2uu1Jw0=@vger.kernel.org X-Gm-Message-State: AOJu0Yyfd/STs/+GcQlir+KvsfG91R8aZwnMYAtmfxQZvc6OXcY2tHx1 eSMzJ+iYhAjAct313iW+UVxxEx1EtCUG6KRCJxrmNAssV5o42/+ZHyMS X-Gm-Gg: AZuq6aI6TU0rxtv9vAuNXX+1Bm4a1OngzcopcpJGzmi730rYrZZY2WBJzHs1dCNmyTr XeOm1/X8AvUkenF3oOa5MfxBdysQoFOBHUDqWsTS2Ps/sep16yiE1wrewdZkEmaaNOaqDy/ihYb GlkaEM85jZ3sglTLAdj7Rk98mLzIspzf09LXzDPhtrl4PnmoL/Idpakir1jW9QJP5RxbyHb7KTK XOzVbrzRlffjSClI40SrU66gZSy+fjBmrM59skokmWbOuKQwFCt8rVZVVW0vDuc2lKIha459u/H NuEGS0MhgDt1AXjrzIuVgbLXLajFxX7vXRRh0fuM7gJv4MTGeBXjnZgOW6MTZSFuDIy3U2JiINI /2Uak8mq49BJLsdrJnb//x4BKUr0aerBJlsw0AsMFhVkueIj5p19YEVKOrrIQLOEdB5/bT0SnFw nKv8qsKDV2BanOI3hruabsJHa4vdpI/pKWII17FTOM+WVmiuxDmrHeMY8ciLk/J/n6 X-Received: by 2002:a17:906:9f85:b0:b87:2681:f608 with SMTP id a640c23a62f3a-b8e9f644b9bmr16665166b.8.1770145008412; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 13/19] drm/amd/display: Save HDMI gaming info to edid caps Date: Tue, 3 Feb 2026 19:56:20 +0100 Message-ID: <20260203185626.55428-14-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 0e953059ff6d..f9f108db1734 100644 --- a/drivers/gpu/drm/amd/display/dc/dc_types.h +++ b/drivers/gpu/drm/amd/display/dc/dc_types.h @@ -210,9 +210,14 @@ struct dc_edid_caps { =20 uint32_t max_tmds_clk_mhz; =20 - /*HDMI 2.0 caps*/ + /* HDMI 2.0 caps */ bool lte_340mcsc_scramble; =20 + /* HDMI 2.1 caps */ + bool allm; + bool fva; + bool hdmi_vrr; + bool edid_hdmi; bool hdr_supported; bool rr_capable; --=20 2.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8E88A377544 for ; Tue, 3 Feb 2026 18:56:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145013; cv=none; b=RefM5npI2OR5N7Mazdg6XEbggyWOGezynMVVWvTVpKTNL0QrfjYaowuKSTtjP/MVFmvDTU49jIIB+QzKviZnFFHQXWjMpwee2OS5pDnwHRlBkLVP8Eqtv2Y5JDxxhs34Squ7F/u8MrESWczeRwI3aOnWcQvL3kt8let7YbopjPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145013; c=relaxed/simple; bh=anfdKZlGHeZDkQ50uCfpHaQpvyxUDLkDxc12TnMi70s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Q9E/1QO+arz6X/BOj934truYIKQvhsqdDsjymGOTK+OZxY4gKoX395JnbODi0IbmV17b4T7h6oeQkDe04NUypJXTUxB8O5orKseBhlfpcwNYdTMiUuYRaS+cqb/IfhsteTHquNIjXfWpDjf/neg4dC3P2DmE4KcB0Q9vsKWv4Ds= 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=HlQj10Zd; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HlQj10Zd" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-b87266fdf56so78418566b.2 for ; Tue, 03 Feb 2026 10:56:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145010; x=1770749810; 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=95VCxPcm8UPz0sIpTAJnRyialODS1BosqnZDH20bJNE=; b=HlQj10ZdVZJxPu29e+dVt6xfC2XlHA1x8ZwPVEQZOWJfQ3YY6rsPWYjKFgsEBA0Fz8 Sksy3IF4o9rctqQ1yJbFZ3A5bzqE4PHkDFTDO6VSTZ8DknZ3fA3WYCXSKOZMQrDSe/Tx itwXW9wvg6O1jlXMZjG/lPGL2OLbB5DbpKihLSn7iSeIsJGtQpT9+9nUByYkTVC+b4N5 +50qaeH9TEHw8zWrIOpG9vnkD8jfdyZaYuYJZEHMpNSfdlGNk132B6VJDVWV58sRdzbG tOLsyZpxiexRt3ZSN/akkqLWYCkzb1BRSBJNmqeIa+/CdaJ9Qr6e0XhnRoVxJr/TUO0O 9vcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145010; x=1770749810; 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=95VCxPcm8UPz0sIpTAJnRyialODS1BosqnZDH20bJNE=; b=XZvXPEBdqIf66BuCASBxRm6Abdb20NleXWBIoBevM4skKP9HG8XZlFbAc4VtyuqPaE qVhF0dGKB8HBAdgebjyIM+ixBW2BsIDDHXSHyBNrws0ukRJl6UMjXs4hul5kBYteLUa7 BdlILUrZdDf+3UW92hYhtIriAqZQdaoA27IaRXemJydb/gs5fcg+qOi4kT+jvyElh8Eb 2unKhYN/7aHg3a/KkeU6C3/0+jSlVtZ1yGomykwUlevWS2pFKU/zx5i0tndQHv/m5IWx wlcGyRyeunY8PY1QUWZVzxW0bRzyFAIPE5uh/r5c4TItxjpk/dQSll6x6YzJ7K7TGgYL rXsA== X-Forwarded-Encrypted: i=1; AJvYcCWRSapc11qOASYh0Rp9s7/6IrRpbNtSdvJJxeSV6Ubpdzpb4loUHt5D0rF0f+1bp3G1TJ+w+nN0KkLylrk=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5AmsKIdvX+zQsn7IgZJhapa5Efsa9ulhA9Q039RSOA9fGHBA7 TgzUlR8JmlynVjkPgzE6fcYdqPBoOwvdRgkBfBV6rpEqxur+yK5LvZCo X-Gm-Gg: AZuq6aKYlKDgxSc0zFlGuCV4DJrratryjJTPPgFCQ+2je7DaK63BlbP++Vq6oa9QSol B9BGWEMalPY9Y6Fx1m2k1YeEfBKIpC1Uzy08F2kDMHTySaimnLaJS8YoPHsaXShrW0zwR6jxWgK 05hrlyRBFtn2LQPK11NA2JlVM7+jPnmNWheM5AYH9EQJUjKB/LjNjUcVw5NxoBi2HyPoFPT+hfE dMAMjY7ywZeQ9fi9D5k/prddiXsVtLWAUcebkH0cuEt6+InzFn7nARB15eURwSb/4zvxUQb1CfD kPBp2sOz69Gxsj9K2VOQ9bYnyJK2IEAVbH8QSBFeWtsTliKtTYU56X7kVlI8UQUaoLqz5rjL/+P tNzGtZaNxQbBky1OdQCYo9NFPtYh/jySbGcUK1ATOYOK6KCFMhdioUWj6PKQRiCKczHw2VV6iNu A+F7HXypnm2/+sWcUDCGoA+Chvfw0+plDQ5Q9mm5tHtpunxtS93kt+VbFgWN5FK5QZkrdNKisd3 +M= X-Received: by 2002:a17:907:d78b:b0:b8d:e858:dee5 with SMTP id a640c23a62f3a-b8e9f2b2cfbmr22358766b.5.1770145009710; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 14/19] drm/amd/display: Restore ALLM support in HDMI vsif Date: Tue, 3 Feb 2026 19:56:21 +0100 Message-ID: <20260203185626.55428-15-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 Reviewed-by: Harry Wentland --- .../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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D87E7378D6B for ; Tue, 3 Feb 2026 18:56:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145014; cv=none; b=mBtAheUFRf+ahzQvJ2p4sbl7qnn3vq7BA6dDx9/MGJXLhEiC4/ut5NaSpTNEkLWZBfHs+Y5gEZFd05Mjf3PP6osQB7jD2gBN97oLMrpADunD6kcRzzbUTn6zvfDPnZIXiFzTT7WIjr41gL5QqazW+uZtJz7yg5sPl2XEOn86dSA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145014; c=relaxed/simple; bh=lGm4fqWbpjgj8AIsHTwuS4w9BK36p1bChOsQ1dVtD+c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SgeMdlUvhKeqO29BbN5JoKIz52Sw4XrH7JpMkaw0H4V0ewTIicUy+vjCWEC6S3uLj/QLC6gtNUPNrYnZsGf/03zHERaRObqUE+5sCrFvi+6IkK4EfJhnvcJ0fqUi90yB67wWNwr+OGThwQEzmBwj0omO8En3tpKahIbKaEmKIE4= 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=OS/lENfQ; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OS/lENfQ" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-b8719f5a2b5so69363366b.3 for ; Tue, 03 Feb 2026 10:56:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145011; x=1770749811; 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=hHIURFG0mejGoKIh/9LYz0d07pIYeDt6QmhYawdCAFI=; b=OS/lENfQdU/SW8D69SAEVTou4gIPJ4IvUaGJ2JiOSil5jxj/hc++Z1lkeNGOTjSzET Wh5EManW86AqUph2fluhVrFk0XS2BJQEuTREWSvkYviMgbJXZ5Ri1/rvEG0VrYVo6oI8 bn3qc8IHHSEAFJhXQcHk/dB895x/8EP6eu1YnS0fYVCeBK2MjaiWET16Xw7Lj5C7nWB0 tL8+ZEAUiLjqqLzFFZz2mVxfPQoBDaMUlQ71M4jZDCrF3R0nbSdg+gHLJC9c/S8eOaOf 4qfjWUY6ts6/RXN6JHhTR8bBO/ZjtYb5npZg3yAMSwWpOiVhtP2Bw1dGMQiazT/ampd6 oqnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145011; x=1770749811; 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=hHIURFG0mejGoKIh/9LYz0d07pIYeDt6QmhYawdCAFI=; b=KJj8bWeKBv5c4WLshDRNSwrNJA8kiiiD3h/PWnT+ljBTqe1gji1nFliWPuFVU0fU2F FjWX2XFrWBnPMaFjcY7My4vIkV+/WRu5B9ZfEIsNZ9ee7UKVzwuaShcuw32rYzh9zqsQ AagFRVoh6XumYjkOR4TBh+ZdvOhlkAMvjJHUU8qfNO7cUofbr01g02ZqwxnIX38QmkM3 PffBeqt/7BdynqeA3vbg31TlbVOmvnAGYMYxk93WFMzYELCU7FZwGQPvoOWuoy4KSYLs CPX8wpRD2bo6YidNzDUHMfcYvvkljwJgRQxA5eevLZwQz3wktyx6Iyco3lHWvXFPuV21 zUfA== X-Forwarded-Encrypted: i=1; AJvYcCVRlBE4zGyOQtPpKESkJVKz0KO+uOG4si6GDLzw6afRgYRkNuZTwxt6fGG3oe4LTqVONCSxpfyEYWBn2Go=@vger.kernel.org X-Gm-Message-State: AOJu0YwRqxKVc+r+IeNOd1VZDH5qelnjktHev04Bixu/c7x8FuJkk2yl LbWp5dZczqjXbbJaEbESQ64VYMtUVWpDJ8Fec/Wr3NDgDIjg+lYlXsGG X-Gm-Gg: AZuq6aJvrUMljEgzR23fsO26xyF7+tJMqtgCDa3I6TrvTJZ8fOgH78VXrpm6YZGr+Mk TUL9dHzJrVc4eRgcBHLNGd79iWnxugLBbTEMoCOYuYCxVk6TGDMelBT8cSTGHv1IF97F78ewpqr nNJREuWDWHig2IcbXEtyo1RJhFym7Jbi2PnaNJiCfK9fA15tB5Kzucr8tUZlZ3Ba5m6KCrr1Nmn TwDnfOC5XElsx/i2S9Fc6qPKLfbqgQNrOB8ZOtX+le4w1YP1o3jl3DQsAHCZEf0KvBYqETvn25r g2J0EUjgaq/QvjUZcoCrm3Py1AoVyPKCTLpNrsJ09VJ2l7mNinuGFobpDITQwYRDcK//pDI7+6R CPrYA811jeG0FoEbhQDESAUjH0kyG+adz9Fj1sHdPbOdfzMjO+wFQlfRcYhK66cfgLmgQoY2qG6 3nxoZ/eCUGa6EAQ0Qj1DV8hP8XGXPGPKsUdKhExQSv/7T9xSqGWlcl/kLiYkFLzsSs X-Received: by 2002:a17:907:3f08:b0:b8e:7dcb:7f23 with SMTP id a640c23a62f3a-b8e9ef22f6amr20500866b.2.1770145011116; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 15/19] drm/amd/display: Trigger ALLM if it's available Date: Tue, 3 Feb 2026 19:56:22 +0100 Message-ID: <20260203185626.55428-16-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 --- drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 4 +++- .../gpu/drm/amd/display/modules/info_packet/info_packet.c | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gp= u/drm/amd/display/dc/core/dc_resource.c index 848c267ef11e..4a7c9f810e35 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -4504,6 +4504,7 @@ static void set_avi_info_frame( unsigned int rid =3D pipe_ctx->stream->timing.rid; unsigned int fr_ind =3D pipe_ctx->stream->timing.fr_index; enum dc_timing_3d_format format; + bool allm; =20 if (stream->avi_infopacket.valid) { *info_packet =3D stream->avi_infopacket; @@ -4658,8 +4659,9 @@ static void set_avi_info_frame( if (pipe_ctx->stream->timing.hdmi_vic !=3D 0) vic =3D 0; format =3D stream->timing.timing_3d_format; + allm =3D stream->link->local_sink->edid_caps.allm; /*todo, add 3DStereo support*/ - if (format !=3D TIMING_3D_FORMAT_NONE) { + if ((format !=3D TIMING_3D_FORMAT_NONE) || allm) { // Based on HDMI specs hdmi vic needs to be converted to cea vic when 3D= is enabled switch (pipe_ctx->stream->timing.hdmi_vic) { case 1: diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index 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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (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 BF0203793D3 for ; Tue, 3 Feb 2026 18:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145016; cv=none; b=TrBR3ybFVHJRTQ3aARfI6i6cRE7pA4OHY0xJdRK3WFY1k7fHtfJ3W01vwLSmRuLBHlEK9pRgdnT+zJB5uAlvf/M5+V1Q9p5GqTfX2Sl+S4g8MYENTFsKmGyjBJ1E+JXjbtpUDOcGkPv7tFk4/OazOvzL6hME10EEIG+HYLyEEuk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145016; c=relaxed/simple; bh=7kuP5ufKrRtq57K/6jl4/fZ844YdTgYXKAyTVdnqVng=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QEZqHAFRrsMXL1ZiidAeJleH5p9W6ALNzg6qXjVznw8voL4GSRon+BVCRm/36c5aEHRi69L0vFLlpixJTzOtLhUAMjOBAbQ+LES0LFm4HwY6FENmiMqzhNpQTLZiHS9iEK72B/41dWsCEqSQhMzClQ/fEhLnp1h8oIKnbKfEmgM= 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=J9y4pVzR; arc=none smtp.client-ip=209.85.208.45 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="J9y4pVzR" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-64b686e7d04so655092a12.3 for ; Tue, 03 Feb 2026 10:56:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145013; x=1770749813; 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=r2h2wnsXtZ4g2BRwKy8/RzhvGTG6VzYgHk4FML1+grU=; b=J9y4pVzRRCpoI4IYzRGev5jWuvX6e+n80SaTL8oYJUT95Xszsvgi2dBjq1DgCBEOau UlEz0DfYz77W3V0WtUah6H1b9MKcvsbcpNIoPxTZrr141Hf8nuWgh9Fk4KcK9aHtgMMQ JLrSYhTHPZmKc27VVd++nrd7xSZUW8rbleQxWILtPx6aurlAICt3C4j1GAABI/n8XbeS PpwF+OVorwL7yS1D0ix2jUT7J0kpnRWmhJtmxwaNbLJ8qZEZyi+eKkUOtlC7PGnKLHS5 8DQSqjg5TPWqWwEhtknv3y3orH82hbgkr15cCx9uQoTqz5ohPPZ23Yul9PzRM2CXzYt/ YyWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145013; x=1770749813; 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=r2h2wnsXtZ4g2BRwKy8/RzhvGTG6VzYgHk4FML1+grU=; b=GSEOUPzWSGWnzyucFsTEZTazMObLBJARc/LrA7f7ZL/lUBqkR5bLd3oZlggwUJeJCo 8OR7IIK3X9anH4ZkLakbcy2g+QSQjZsGAggrfLFq6Z6vdj38zew2UIG3xQ5xB3dmwK18 6ugc0y3d/1Bbspj3Wawg81j+5jtykyZdS5bltKra4+VaHNtLeAYmqdNtw4NRFpZw0uxJ zYFq5xOFCvISWRfpjg5iTluht6M9GWaQyje/Nlq45BY+AuIUWeIKp9KPrDxjbmDu0FCP Wj/j+bmjnz+GBybfRb/8scGpFPuKLZV2gYfjQYHniKPu5ia5VOXmKljL+9wMJaR0B16f pqdQ== X-Forwarded-Encrypted: i=1; AJvYcCVUOVtJsN8nU6dc/677kVHWJ113hG/qUNJd1SuSaFPi3WBFtvpU5ypQ6bAC7Fz4WgxF/VoTiWjVdEsDEKA=@vger.kernel.org X-Gm-Message-State: AOJu0Yw04Ew4ni5v0beCMZvctxFps7K1a7En3fOkUJqR1PgX8ML8tNjJ 4QHjNvTcoOx1/uu8jAVW9xt9SlWUbCQrNOWiUOSN82m1q+jNv35pMSjO X-Gm-Gg: AZuq6aLYt154rsBBbo9T35v0qLloBm4Kf6Nrcdjcs1xoD/pLgjjbofUfDTOm1BtSyx9 SJHOKVaVBNhZFMbx2ZbHmF6hjb6WXJH+07bMadfMxtHqoD+uZmBJOlt8FVd4Ui6ZIpRjtfxYCsp r73w2w68C6OdFb49RciQsFnW4gyfdUAF9hJxurESJFyS1s6ec/TTXPdVTgar3pkKoVSeOqJmpsd 6QRh8qhjy+rC0cPHVfhIDxPOa8HXC2i3rGi45IOO+vjAQXUeBRxmytFLb/k6rsCuXlTwdX26M/0 ARSBFo5CEovEJdKfDOsbq29OsH7xoDkCk/CfVMF2/Z7KDfSh2dBm9KVznLSirnCz460gi3Ry3dQ xIqqJ3PDvEtzGASjDbDD5dxYrtQh4vasX2AS+VmCLWA89/wjl7+KkfDw7Hi0jDUiUcM68UtBetY S9VojZ5++4ZiZr3jm0yC/pF8ELYq23UH2ANAPynszaE8WDjS/NqoAQQpHgIfiUWWC+ X-Received: by 2002:a17:907:3e0a:b0:b87:2780:1b2b with SMTP id a640c23a62f3a-b8e9f2f270bmr21095366b.4.1770145012928; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 16/19] drm/amd/display: Add parameter to control ALLM behavior Date: Tue, 3 Feb 2026 19:56:23 +0100 Message-ID: <20260203185626.55428-17-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] Some users prefer to always manually control ALLM/Gaming mode while others might want it permanently forced on. [How] Since there isn't yet an API to control this, expose module parameter Changes in v3: - Include a fix for possible NULL pointer dereference by Peter Closes: https://github.com/CachyOS/linux-cachyos/issues/680 Co-developed-by: Peter Jung Signed-off-by: Peter Jung Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 14 +++++- .../gpu/drm/amd/display/dc/core/dc_resource.c | 7 +-- .../amd/display/modules/inc/mod_info_packet.h | 1 + .../display/modules/info_packet/info_packet.c | 46 ++++++++++++++++--- 5 files changed, 56 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdg= pu/amdgpu.h index 447e734c362b..312aa32064d5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -268,6 +268,7 @@ extern int amdgpu_rebar; =20 extern int amdgpu_wbrf; extern int amdgpu_user_queue; +extern uint amdgpu_allm_mode; =20 extern uint amdgpu_hdmi_hpd_debounce_delay_ms; =20 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_drv.c index d6d0a6e34c6b..4b038c8bbf9f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -248,6 +248,7 @@ int amdgpu_umsch_mm_fwlog; int amdgpu_rebar =3D -1; /* auto */ int amdgpu_user_queue =3D -1; uint amdgpu_hdmi_hpd_debounce_delay_ms; +uint amdgpu_allm_mode =3D 1; =20 DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, 0, "DRM_UT_CORE", @@ -1124,7 +1125,7 @@ module_param_named(rebar, amdgpu_rebar, int, 0444); MODULE_PARM_DESC(user_queue, "Enable user queues (-1 =3D auto (default), 0= =3D disable, 1 =3D enable, 2 =3D enable UQs and disable KQs)"); module_param_named(user_queue, amdgpu_user_queue, int, 0444); =20 -/* +/** * DOC: hdmi_hpd_debounce_delay_ms (uint) * HDMI HPD disconnect debounce delay in milliseconds. * @@ -1134,6 +1135,17 @@ module_param_named(user_queue, amdgpu_user_queue, in= t, 0444); MODULE_PARM_DESC(hdmi_hpd_debounce_delay_ms, "HDMI HPD disconnect debounce= delay in milliseconds (0 to disable (by default), 1500 is common)"); module_param_named(hdmi_hpd_debounce_delay_ms, amdgpu_hdmi_hpd_debounce_de= lay_ms, uint, 0644); =20 +/** + * DOC: allm_mode (int) + * Changes ALLM triggering mode (if sink supports ALLM). Possible values: + * + * - 0 =3D ALLM disabled + * - 1 =3D ALLM dynamically triggered based on VRR state / Game Content Ty= pe Hint + * - 2 =3D ALLM forced always on + */ +MODULE_PARM_DESC(allm_mode, "Changes ALLM trigger mode (0 =3D disable, 1 = =3D enable (default), 2 =3D force enable)"); +module_param_named(allm_mode, amdgpu_allm_mode, uint, 0644); + /* These devices are not supported by amdgpu. * They are supported by the mach64, r128, radeon drivers */ diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gp= u/drm/amd/display/dc/core/dc_resource.c index 4a7c9f810e35..b779aac28dfa 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -44,6 +44,7 @@ #include "clk_mgr.h" #include "dc_state_priv.h" #include "dc_stream_priv.h" +#include "modules/inc/mod_info_packet.h" =20 #include "virtual/virtual_link_hwss.h" #include "link/hwss/link_hwss_dio.h" @@ -4503,8 +4504,6 @@ static void set_avi_info_frame( unsigned int vic =3D pipe_ctx->stream->timing.vic; unsigned int rid =3D pipe_ctx->stream->timing.rid; unsigned int fr_ind =3D pipe_ctx->stream->timing.fr_index; - enum dc_timing_3d_format format; - bool allm; =20 if (stream->avi_infopacket.valid) { *info_packet =3D stream->avi_infopacket; @@ -4658,10 +4657,8 @@ static void set_avi_info_frame( ///VIC if (pipe_ctx->stream->timing.hdmi_vic !=3D 0) vic =3D 0; - format =3D stream->timing.timing_3d_format; - allm =3D stream->link->local_sink->edid_caps.allm; /*todo, add 3DStereo support*/ - if ((format !=3D TIMING_3D_FORMAT_NONE) || allm) { + if (!is_hdmi_vic_mode(pipe_ctx->stream)) { // Based on HDMI specs hdmi vic needs to be converted to cea vic when 3D= is enabled switch (pipe_ctx->stream->timing.hdmi_vic) { case 1: diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 306eb7355c25..9ec123ecc7c4 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -41,6 +41,7 @@ void set_vsc_packet_colorimetry_data( enum dc_color_space cs, enum color_transfer_func tf); =20 +bool is_hdmi_vic_mode(const struct dc_stream_state *stream); void mod_build_vsc_infopacket(const struct dc_stream_state *stream, struct dc_info_packet *info_packet, enum dc_color_space cs, diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index 53e488fdb4ea..829cce9455db 100644 --- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c @@ -23,12 +23,13 @@ * */ =20 -#include "mod_info_packet.h" +#include "amdgpu.h" #include "core_types.h" -#include "dc_types.h" -#include "mod_shared.h" -#include "mod_freesync.h" #include "dc.h" +#include "dc_types.h" +#include "mod_freesync.h" +#include "mod_info_packet.h" +#include "mod_shared.h" =20 enum vsc_packet_revision { vsc_packet_undefined =3D 0, @@ -54,6 +55,12 @@ enum vsc_packet_revision { #define HF_VSIF_3D_BIT 0 #define HF_VSIF_ALLM_BIT 1 =20 +enum allm_trigger_mode { + ALLM_MODE_DISABLED =3D 0, + ALLM_MODE_ENABLED_DYNAMIC =3D 1, + ALLM_MODE_ENABLED_FORCED =3D 2, +}; + // VTEM Byte Offset #define VTEM_PB0 0 #define VTEM_PB1 1 @@ -499,7 +506,32 @@ void mod_build_vsc_infopacket(const struct dc_stream_s= tate *stream, } } =20 -static bool is_hdmi_vic_mode(const struct dc_stream_state *stream) +static bool is_hdmi_allm_mode(const struct dc_stream_state *stream) +{ + /* No local sink */ + if (!stream->link->local_sink) + return false; + + /* Sink doesn't expose ALLM support in edid */ + if (!stream->link->local_sink->edid_caps.allm) + return false; + + switch (amdgpu_allm_mode) { + case ALLM_MODE_DISABLED: + return false; + + case ALLM_MODE_ENABLED_DYNAMIC: + break; + + case ALLM_MODE_ENABLED_FORCED: + return true; + } + + return stream->content_type =3D=3D DISPLAY_CONTENT_TYPE_GAME || + stream->vrr_active_variable; +} + +bool is_hdmi_vic_mode(const struct dc_stream_state *stream) { if (stream->timing.hdmi_vic =3D=3D 0) return false; @@ -512,7 +544,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 (is_hdmi_allm_mode(stream)) return false; =20 return true; @@ -541,7 +573,7 @@ void mod_build_hf_vsif_infopacket(const struct dc_strea= m_state *stream, =20 info_packet->valid =3D false; =20 - allm =3D stream->link->local_sink->edid_caps.allm; + allm =3D is_hdmi_allm_mode(stream); format =3D stream->view_format =3D=3D VIEW_3D_FORMAT_NONE ? TIMING_3D_FORMAT_NONE : stream->timing.timing_3d_format; --=20 2.52.0 From nobody Sun Feb 8 13:27:35 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 0720236AB59 for ; Tue, 3 Feb 2026 18:56:55 +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=1770145017; cv=none; b=uqnMb9MPatOyRAbF1HVAvYAMYptqFG2q80ql8/9a9RyX6aOIAFlsKWCUQYxdfgseoydw49a+UTh5rhWWE1PcsLRRjN3ZL5CN7DE4N3ZkHROtAtMaskO6s+62y1fFjvM7kGfwj06CvxqP4Ezd9Nhzf7yPnnscc14/LiuoBBdsMHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145017; c=relaxed/simple; bh=tNTBqc7f5sGN1dLXqOcfkxHUQIKmSU0qS3EbYOSHkHg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=faRf9M8fna07pFuj6ZvVni+2wq/ZY+LBmCxSW4v8reAywwHrUuxeTRvYn2f0kfTNSkPttLJFq7nsmysm4VYkEExLdxEo+fy76O8RJZh/VtJNyoNach2inj8QmVPSMQMH9fSpP3Ezd55LHffzbO3lCY8YzMqwCIjEU8eG9BF2Ivg= 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=W7Gl2aOH; 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="W7Gl2aOH" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b87266fdf56so78419966b.2 for ; Tue, 03 Feb 2026 10:56:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145014; x=1770749814; 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=LljkZz4Ncf35oAxsgibHKbM5EMiP01agBwrYGt55o9U=; b=W7Gl2aOHoinDVl/+YbnEUtpcmzZYfVTM/1cZkFjBxZR/Kyl/53rxqbjYrK4czRbd0a Ajp44OxVuVWyB5M2PjFJyQV6IXr5NDF3cr7rhdXFtZGwJLIL4b/sWnu6ia8kf7NuFEnk J6p1Knzz+7VaqaCxYmogSNmqXn6M8wmsgMXjgRs4zE/WKQvdxgLCPhELkSRUzCkZjL6b 4Xf1Bn+iVjL920FGAMch8G7VHAFpuJ3zKUC/Jm9fjrKW79NyBP7hpZyvrBDYUN6WCl3m yHTTXeJGVHr9AEoo5ag8awf15Dzw1I2X1tpXYNhBq8l9yl6aGAyKFWZiuhFWeluWkL5+ tO+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145014; x=1770749814; 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=LljkZz4Ncf35oAxsgibHKbM5EMiP01agBwrYGt55o9U=; b=uc+BEfVsVm3VT04i3JEZ+d2dGsh+INycetMcuLrhsckg1sDxpv7njaoxBhcpdZb+37 JjOUGjhMHH1VqpjT1+ZfBcQCexl28boVuo291RbxDyfOJVkS1KBpro3lIe1V2g+hmm7a VNAHo/cW2E2/5TJxGOwV7zcviag9BAzpkRHlj9mntPkF50xUxnEX3vniAqXUM5k2QQxx 63xWRp26M7sMWcM2xjDCVKa/n6ORKHV/vcXNqB7pTBQtemEHNAUGZmHZ7e8YKsUPkyfV mA1FyxC7Ivg5sTMD+UiPyA+oADDqkp6sKYu5AVTcVU1u2oLLYC2XSFYuUJodGVH5vT5J zTtg== X-Forwarded-Encrypted: i=1; AJvYcCWYLxcV0DFU51l0b1XU5wtuqlnH/biVzUq82WkiUBmhO8wCQnAOg+HmPnzsWrrHalXqvdRIl/2sbJC7lY0=@vger.kernel.org X-Gm-Message-State: AOJu0YyP/5cT6JaJW9RkQ1MZyNXOfCXDYt6Sq+mZLYzkjjOx8ji5HbmD 3V1Odp8iMrBQettwddui3mhkT5pCwqK7ssMpNv8JQNRqBcaJH0eQB75G X-Gm-Gg: AZuq6aJ0Tb4WAqLs9INrvlaw/xy4fKhD/xeqFjMxQoVZtcSNjTbCkivcGRP2oaH9VzB 6P8eDHqS94FsTYjiZGd26ZJCsDVEEJeTlFyeZStaol7Rm4pVSQ6Lp8oZ9/LwYl4SGx8WfxSqWBK 6UyJzvkl43VHJcpTzcL8cFtXiN3VNqfKMAwf+EausdV4CKuBBpK+Dcj2M2fpS4lLjzyr3dkR0gh 3Hh6ksQ9Ptc9iZPv5cl95x5N3/eb2gDOTxQ1huux3kHEZcgykux7080fscHrj8kg0j52G/SaZsD vdk7HoXthHSbLB6s3J34gqddvDKF6qdujWorr0tjLZnR5HdvWBFOTfW7894hyvMynvUrqbyGam2 tilFlamwyyU8tJu3CNniJ4eX3kMWxlYJa4SL+O/oxHkxlfyGtT7YxGbuL2KEaihuju8iALCcYaY BKnGWasjrdK2Fao633eLgaBd32XSVOJvp7D0H1E7xRh8PdGU73E0fNrbFUCLBwqTaA X-Received: by 2002:a17:907:d26:b0:b76:2667:7736 with SMTP id a640c23a62f3a-b8e9f1702c6mr21573566b.4.1770145014183; Tue, 03 Feb 2026 10:56:54 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56: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, admin@ptr1337.dev Subject: [PATCH v3 17/19] drm/amd/display: Reintroduce VTEM info frame Date: Tue, 3 Feb 2026 19:56:24 +0100 Message-ID: <20260203185626.55428-18-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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). Changes in v3: - Use div_u64() instead of division operator Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- .../amd/display/modules/inc/mod_info_packet.h | 4 + .../display/modules/info_packet/info_packet.c | 176 ++++++++++++------ 2 files changed, 119 insertions(+), 61 deletions(-) diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 9ec123ecc7c4..07e86b16ef77 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -50,6 +50,10 @@ void mod_build_vsc_infopacket(const struct dc_stream_sta= te *stream, void mod_build_hf_vsif_infopacket(const struct dc_stream_state *stream, struct dc_info_packet *info_packet); =20 +void mod_build_vtem_infopacket(const struct dc_stream_state *stream, + const struct mod_vrr_params *vrr, + struct dc_info_packet *infopacket); + enum adaptive_sync_type { ADAPTIVE_SYNC_TYPE_NONE =3D 0, ADAPTIVE_SYNC_TYPE_DP =3D 1, diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index 829cce9455db..b08b52bba574 100644 --- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c @@ -49,6 +49,7 @@ enum vsc_packet_revision { vsc_packet_rev7 =3D 7, }; =20 +#define HDMI_INFOFRAME_TYPE_EMP 0x7F #define HDMI_INFOFRAME_TYPE_VENDOR 0x81 #define HDMI_INFOFRAME_LENGTH_MASK 0x1F #define HF_VSIF_VERSION 1 @@ -61,74 +62,52 @@ enum allm_trigger_mode { ALLM_MODE_ENABLED_FORCED =3D 2, }; =20 -// VTEM Byte Offset -#define VTEM_PB0 0 -#define VTEM_PB1 1 -#define VTEM_PB2 2 -#define VTEM_PB3 3 -#define VTEM_PB4 4 -#define VTEM_PB5 5 -#define VTEM_PB6 6 +#define VTEM_ORG_ID 1 +#define VTEM_DATA_SET_TAG 1 +#define VTEM_DATA_SET_LENGTH 4 =20 -#define VTEM_MD0 7 -#define VTEM_MD1 8 -#define VTEM_MD2 9 -#define VTEM_MD3 10 +#define VTEM_M_CONST 0 +#define VTEM_FVA_FACTOR 0 =20 +#define VTEM_BRR_MASK_UPPER 0x03 +#define VTEM_BRR_MASK_LOWER 0xFF =20 -// VTEM Byte Masks -//PB0 -#define MASK_VTEM_PB0__RESERVED0 0x01 -#define MASK_VTEM_PB0__SYNC 0x02 -#define MASK_VTEM_PB0__VFR 0x04 -#define MASK_VTEM_PB0__AFR 0x08 -#define MASK_VTEM_PB0__DS_TYPE 0x30 - //0: Periodic pseudo-static EM Data Set - //1: Periodic dynamic EM Data Set - //2: Unique EM Data Set - //3: Reserved -#define MASK_VTEM_PB0__END 0x40 -#define MASK_VTEM_PB0__NEW 0x80 +/* VTEM Byte Offset */ +#define VTEM_PB0 0 +#define VTEM_PB1 1 +#define VTEM_PB2 2 +#define VTEM_PB3 3 +#define VTEM_PB4 4 +#define VTEM_PB5 5 +#define VTEM_PB6 6 =20 -//PB1 -#define MASK_VTEM_PB1__RESERVED1 0xFF +#define VTEM_MD0 7 +#define VTEM_MD1 8 +#define VTEM_MD2 9 +#define VTEM_MD3 10 =20 -//PB2 -#define MASK_VTEM_PB2__ORGANIZATION_ID 0xFF - //0: This is a Vendor Specific EM Data Set - //1: This EM Data Set is defined by This Specification (HDMI 2.1 r102.cle= an) - //2: This EM Data Set is defined by CTA-861-G - //3: This EM Data Set is defined by VESA -//PB3 -#define MASK_VTEM_PB3__DATA_SET_TAG_MSB 0xFF -//PB4 -#define MASK_VTEM_PB4__DATA_SET_TAG_LSB 0xFF -//PB5 -#define MASK_VTEM_PB5__DATA_SET_LENGTH_MSB 0xFF -//PB6 -#define MASK_VTEM_PB6__DATA_SET_LENGTH_LSB 0xFF +/* Extended Metadata Packet */ +/* Header */ +#define EMP_LAST_BIT 6 +#define EMP_FIRST_BIT 7 +/* PB0 */ +#define EMP_SNC_BIT 1 +#define EMP_VFR_BIT 2 +#define EMP_AFR_BIT 3 +#define EMP_DST_BIT 4 +#define EMP_END_BIT 6 +#define EMP_NEW_BIT 7 +/* PB7 =3D MD0 */ +#define VTEM_VRR_BIT 0 +#define VTEM_M_CONST_BIT 1 +#define VTEM_FVA_BIT 4 +/* MD1 Base_Vfront */ +/* MD2 */ +#define VTEM_BRR_UPPER_BIT 0 +#define VTEM_RB_BIT 2 +/* MD3 BRR Lower */ =20 =20 - -//PB7-27 (20 bytes): -//PB7 =3D MD0 -#define MASK_VTEM_MD0__VRR_EN 0x01 -#define MASK_VTEM_MD0__M_CONST 0x02 -#define MASK_VTEM_MD0__QMS_EN 0x04 -#define MASK_VTEM_MD0__RESERVED2 0x08 -#define MASK_VTEM_MD0__FVA_FACTOR_M1 0xF0 - -//MD1 -#define MASK_VTEM_MD1__BASE_VFRONT 0xFF - -//MD2 -#define MASK_VTEM_MD2__BASE_REFRESH_RATE_98 0x03 -#define MASK_VTEM_MD2__RB 0x04 -#define MASK_VTEM_MD2__NEXT_TFR 0xF8 - -//MD3 -#define MASK_VTEM_MD3__BASE_REFRESH_RATE_07 0xFF - enum ColorimetryRGBDP { ColorimetryRGB_DP_sRGB =3D 0, ColorimetryRGB_DP_AdobeRGB =3D 3, @@ -644,6 +623,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.52.0 From nobody Sun Feb 8 13:27:35 2026 Received: from mail-ed1-f66.google.com (mail-ed1-f66.google.com [209.85.208.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 42D5C36AB66 for ; Tue, 3 Feb 2026 18:56:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145018; cv=none; b=egvEGsww+HRxXBYl9zxUUWCBKne6pivECF08x0BYYe1A03YkimYh7Z/EUpJP1DSUq+xTeDZ+aBNRrw1CFulTELFiA5d+1+vyf6ezBOczy4w7eYKXkVrqV0fRHtJ2A6OQMq+WQrJCc7ee3yjgMmRn8uymuHgXgHVAcGicB7lgAXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145018; c=relaxed/simple; bh=26itJPeUEceni+F1hxmSLk3jD7qbmkjQbgg3NTtoxrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=I8zWaOSPUe7OYG+KUebbZnXDj0mstovYCzOs9SJnMyHtdh/qvpL6g+wUr07mXrqSZ1hw/MkSqz1VOQm7ubBDSIk3Ge/8uLT9rmthuJwqEeY6jdHmwQlnk3csnMI/vKP7LBudzloap98XNqBWsAJFXTAeKqKr1AUM6IIjTfpwbY4= 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=dCpEUi1T; arc=none smtp.client-ip=209.85.208.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dCpEUi1T" Received: by mail-ed1-f66.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso482782a12.2 for ; Tue, 03 Feb 2026 10:56:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145016; x=1770749816; 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=dcsHykae6qG2zsboDKqK9u6avGg/+VQbgr8PaYkpraM=; b=dCpEUi1Tzw9QG89aZ540AXY9N+Eh1F+QrY3OVfD529GZerldLXO/dkPnfn8C0uWYhY xr30Zfes6gNrO6NWS+vrRfqUIZmT0YZnJFqpkoOCcGizUMrVFKPqijo6wXNjG+BZGJmL zX7USLm+L8EZRRcA2I5/HqDDIaYXMr3P/gFhNWBOcN2XnA51RHwriuUJv778vYKO1lW3 mqGJpdCh+s2YQXsD0EXbnLXUe0y+Pc5wl9rFd0esrihsjMBEk7w9YUJnUHjVIrPygbmB v4PnGX1lp7Wgo405YHZZ0TrZ1Rptm9cC3RDg/S1YG1eq2XdlRRkfxcbGEdZ5EXql/s6i fQ+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145016; x=1770749816; 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=dcsHykae6qG2zsboDKqK9u6avGg/+VQbgr8PaYkpraM=; b=ZRy0J2raVCRflic7tg7clWzqx/LAnPQzi0IUN8giXiWnTq5S+OSUyYXXC93azioqdu f4rAfxHM/boqL62y/JkVtz2A4Pn5f15ujtk1+ahPgZ761BrT9/9S1fkFa1f2ANqkEsWt I8/O7i1L6y9PVx9VyUg5Cvd90Y+JPVNTtPkVPwrbqeaA2+HEysPhUx2cBjbrsAujlblC GxXZHQF+DMZkTP6majlz7XmnjwiO6WfvflC2DcHnGdwEHWFLbELANlibh4I10r4LlW+V i+QJnFl8TpEAMtr3nWmtY9eDTJdZ8uk8yTm2qTac12w5JZ3H0ynPbT/OTMYgYdfZ5Yhq t12g== X-Forwarded-Encrypted: i=1; AJvYcCVFn3ByHs9XtvapWToY49qxV+Lk4Q3PfJQsEDw+tPePTG6niSX7qxi9BAwTFNv68Ch8WCFglDve/KvL6UU=@vger.kernel.org X-Gm-Message-State: AOJu0YwWYeV7qO7ItXpRedD40kO1Xwa76raoVHeMABExAZCPHbTHpywR Tk1KuvgD1vXJYdCbOPk4W4F/q6VvyE8CrL24c/Fi6eB0Btb2eMDw4DQN X-Gm-Gg: AZuq6aJuujqtwr6YrZQU8Ehgu87m+j+Yj2tA2L89XmQJZjJzFqz0LQfx/6FMmyAH1hu BY8CCsJh+gLgbPsyF3URt9QPePu0/Hwr1HrCsA4Ml0LGnzRX2zSQ2mJcE+PtlIte8bfvCIUr8TE 561ykazOigPrrVk3MdIw8T86L+w2haAJ+iVms+tXrNRgIqSMeRl4nxXwJneHXrCy3Cv5Gb2Pj5G dtmzt0ICrzp0ztKxNe0iua8Ktu9Up961OvEBCVlpZxwpVoA8ybv59aj84FLMrtSjJRQOzWTITmz x8gQM2UpEYFp6IYP3cACUk0vZbPfTJNZOwCk1dvcLzuX4G3SDkRSqGRNYURqcC8a+gjK3mhjInd 9brRGHQ6L0ZfM7YnWl1IJevCe1azXOdPJpOcxwz2lVdyxDsZPlYov8Q8yAkjX61iR2ypxaV+XLA WzuxQJCquxRYQlH1JYco4kWE2tZR6mxiEqps/6NyOAt8qgRehiLHVLuhSYmk7A/iIP X-Received: by 2002:a05:6402:2790:b0:655:b07e:95c8 with SMTP id 4fb4d7f45d1cf-6594a1ed7b5mr222788a12.8.1770145015634; Tue, 03 Feb 2026 10:56: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-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:55 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org, admin@ptr1337.dev Subject: [PATCH v3 18/19] drm/amd/display: Enable HDMI VRR Date: Tue, 3 Feb 2026 19:56:25 +0100 Message-ID: <20260203185626.55428-19-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-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 Reviewed-by: Harry Wentland --- 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 ab01a45aef1c..6f841c84d114 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9620,7 +9620,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 @@ -13380,8 +13383,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 07e86b16ef77..ca7c5542620d 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -60,6 +60,7 @@ enum adaptive_sync_type { ADAPTIVE_SYNC_TYPE_PCON_ALLOWED =3D 2, ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED =3D 3, ADAPTIVE_SYNC_TYPE_EDP =3D 4, + ADAPTIVE_SYNC_TYPE_HDMI =3D 5, }; =20 enum adaptive_sync_sdp_version { diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index b08b52bba574..5fd9e8aadc98 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 @@ -722,6 +722,7 @@ void mod_build_adaptive_sync_infopacket(const struct dc= _stream_state *stream, break; case ADAPTIVE_SYNC_TYPE_NONE: case ADAPTIVE_SYNC_TYPE_PCON_NOT_ALLOWED: + case ADAPTIVE_SYNC_TYPE_HDMI: default: break; } --=20 2.52.0 From nobody Sun Feb 8 13:27:35 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 C100A3612F4 for ; Tue, 3 Feb 2026 18:56:58 +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=1770145020; cv=none; b=A7m0n/VwA1bp7yHjLyD73Ew604N0DnILq8oTtLu7fJ6ecjJdBkFjxaCynNvWoBPoncEeBw2ka8QK3YvFPvg78ShuxfecEn6Vx5aTrqLkqMWqXyG0mo7V6WXK6RjJ770d1YLmdN4JwJSPNPusTdfpR8UmC8f4gDcpCZlIfvp7ep0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770145020; c=relaxed/simple; bh=jeaDDoiOtV03LkzoB7JocJ/jrtWJXZrnHBSrjxC/mr8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BeN9kgW334sxNEHBPraMJoaLvCFKO1dMoMo6KyLYs0CkELP7Mxmq/l/rxRxsVwBbeD34yLVX0EgVJvRWbmbH2l4srz6pzpfE8TVXArcar/HGgFPSP1f9dln+I5/d9EJg+2SHevzVpASpGX2Dzxh155StN1f/EtaDqpAX1ScCX9M= 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=fCP5TN4G; 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="fCP5TN4G" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b8ea0a386cdso1346266b.2 for ; Tue, 03 Feb 2026 10:56:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770145017; x=1770749817; 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=2gojVvtD4l2rkbiM/jdY+q69y3Uync3kYZ3kcuaObgo=; b=fCP5TN4GWP5iK57c8azDw7ZmT/kvfWslXaHtpyhmETJCcnF5QQbbIdjOA3OYIZqyGl yAIoJhVgXfUMfdVxQBq7EMOY/9iYYE+RnqfkTFC8GwNmn7whJc6/R06Y01pUQRT4KFCk 6MEsRhmcPp7KDpnXUOtnSQDP9pJJ/po1HdWkxVSCMHbboEkihuUcwpTX/MP4tSLh4F2e Nx9pMp96BP91I55BppgNjZpa42bSj2BXsPs5IMzXIQqpPHhAOw/X4ximvpEObDIDFaby To/bulu+Qqk+wIb8Gpvn1ZtZsdYXFgERT+v64DqmgJzrps8AOJjGK3mLVizLC00Gx7Dc Opdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770145017; x=1770749817; 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=2gojVvtD4l2rkbiM/jdY+q69y3Uync3kYZ3kcuaObgo=; b=ddZa0AiQnOGFmgdkFhYYkX6YPnvm922RBynjK+h1OM5ajeKvbpiJhCi9IaSgXGF9/8 5pmnka8GrBDQfItgT49EZBDSeScHHcvcvYY1QzWkW8dJ2OTkwGzzvFjZVjN1ah62X3q1 trDIDH9xrkF0NAzfDRVuiwANh2rY4Yy2tE6YBW8xn0RrSu7pHZ/jHDeKKHuQytAKpRbu XrGvWfjGQYiSiYQot89m+l0VpWXIO4jh019EMv5mPWhWlKENqOSGExz1B0UdHpNh6OaA kNlHjKrfRzOBlYmAFlCniVEggBeVYVK6r+QnLjXQVIKrjyT/3XWqsP45mfu0RFYQXJwh yVRg== X-Forwarded-Encrypted: i=1; AJvYcCW8kXk0AWTmBoi/bQbhK+1mjNz6b87SWKfB84LM5OE8PEoq7j6XaMsGfaTcHZNHny3MakFlCxIsNxJeSuE=@vger.kernel.org X-Gm-Message-State: AOJu0Yzq05QpVZHl0IXB55eKShvwpRd3Kw+R/d/3VLmfgRXBfQcwEogt EtebqHr8S3HaQ9YjEllg127xSojQo2qQA8z1Hpu/X9IX38XEF4a+NxiN X-Gm-Gg: AZuq6aLleWzePESBAPuXLHorR6q2sRbbXMM4P/f/cAwrsrxYO6/tYOvz2mYbKKdPjIk NC+p2vTVVEGPcqQd84XWox9PS46C3PZtVD8eHlCwWHWPIzP9yadnGhKjZ4y++B7pvQpJ+ZI/B8K 9j8/R8PFclahkWcH/BJjC2OzZ4ew72y4fnp79geyNx9YG3UP4pAz0m9Lk8vXah2TLm9fRHuz2Su MH4VAHwwAif+yzbRaHu+AIcs/+EZN8aQ0J6QGsag6BtySgQ852OPJMbcNdKD1EaTWip37WoalOa +iemFxrO0rWkRB52PfOXck2xfhNJVH7+irL1tfRwHee68wdXcaOzU2iNLnaIDVSyucIA53y08Ln qLtLOWzwznFk26JAHeoN7gCg6RyIM9x/ryvZNUyPZAq3tMEzTwegvsre+hK644QyROmoojLxOnv sPmD2jqIFd5WVjp6LpSUJLR7/rjyQx4HLY4C/hZreiaD1K0IDkZu/gcaonxkUo88eo X-Received: by 2002:a17:907:1ca4:b0:b7f:fd9d:fff4 with SMTP id a640c23a62f3a-b8e9f173f18mr20497466b.1.1770145016990; Tue, 03 Feb 2026 10:56:56 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8e9fad97a7sm16715766b.0.2026.02.03.10.56.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 10:56:56 -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, admin@ptr1337.dev Subject: [PATCH v3 19/19] drm/amd/display: Add HDMI VRR desktop mode Date: Tue, 3 Feb 2026 19:56:26 +0100 Message-ID: <20260203185626.55428-20-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> References: <20260203185626.55428-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] Many TVs and other HDMI sinks suffer from blanking and possibly other glitches when VRR is toggled. With FreeSync present on such sinks, they behave like the signal is always variable, even in fixed refresh rate situations. [How] Keep HDMI VRR toggled if it's supported and not explicitly disabled. Additionnally, add module parameter which allows users to configure HDMI VRR triggering to only happen when the signal is truly asking for variable state. This is useful if end user has a TV that automatically toggles ALLM/Game mode when VRR is active and such user doesn't want gaming mode in normal desktop usage. Signed-off-by: Tomasz Paku=C5=82a Reviewed-by: Harry Wentland --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 13 +++++++++++++ .../amd/display/modules/info_packet/info_packet.c | 9 +++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdg= pu/amdgpu.h index 312aa32064d5..d49cd55e0f35 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -269,6 +269,7 @@ extern int amdgpu_rebar; extern int amdgpu_wbrf; extern int amdgpu_user_queue; extern uint amdgpu_allm_mode; +extern bool amdgpu_hdmi_vrr_desktop_mode; =20 extern uint amdgpu_hdmi_hpd_debounce_delay_ms; =20 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_drv.c index 4b038c8bbf9f..f53c2ffeffa2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -249,6 +249,7 @@ int amdgpu_rebar =3D -1; /* auto */ int amdgpu_user_queue =3D -1; uint amdgpu_hdmi_hpd_debounce_delay_ms; uint amdgpu_allm_mode =3D 1; +bool amdgpu_hdmi_vrr_desktop_mode =3D true; =20 DECLARE_DYNDBG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, 0, "DRM_UT_CORE", @@ -1146,6 +1147,18 @@ module_param_named(hdmi_hpd_debounce_delay_ms, amdgp= u_hdmi_hpd_debounce_delay_ms MODULE_PARM_DESC(allm_mode, "Changes ALLM trigger mode (0 =3D disable, 1 = =3D enable (default), 2 =3D force enable)"); module_param_named(allm_mode, amdgpu_allm_mode, uint, 0644); =20 +/** + * DOC: hdmi_vrr_on_dekstop (bool) + * Enables FreeSync behavior mimicking by keeping HDMI VRR signalling acti= ve in + * fixed refresh rate conditions like normal desktop work/web browsing. + * Possible values: + * + * - false =3D HDMI VRR is only enabled if refresh rate is truly variable + * - true =3D Mimics FreeSync behavior and keeps HDMI VRR always active + */ +MODULE_PARM_DESC(hdmi_vrr_desktop_mode, "Changes HDMI VRR desktop mode (fa= lse =3D disable, true =3D enable (default))"); +module_param_named(hdmi_vrr_desktop_mode, amdgpu_hdmi_vrr_desktop_mode, bo= ol, 0644); + /* These devices are not supported by amdgpu. * They are supported by the mach64, r128, radeon drivers */ diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index 5fd9e8aadc98..b41e2240e1ae 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 @@ -654,8 +654,13 @@ static void build_vtem_infopacket_data(const struct dc= _stream_state *stream, bool vrr_active =3D false; bool rb =3D false; =20 - vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || - vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + if (amdgpu_hdmi_vrr_desktop_mode) { + vrr_active =3D vrr->state !=3D VRR_STATE_UNSUPPORTED && + vrr->state !=3D VRR_STATE_DISABLED; + } else { + vrr_active =3D vrr->state =3D=3D VRR_STATE_ACTIVE_VARIABLE || + vrr->state =3D=3D VRR_STATE_ACTIVE_FIXED; + } =20 infopacket->sb[VTEM_MD0] =3D VTEM_M_CONST << VTEM_M_CONST_BIT; infopacket->sb[VTEM_MD0] |=3D VTEM_FVA_FACTOR << VTEM_FVA_BIT; --=20 2.52.0