From nobody Tue Feb 10 04:13:12 2026 Received: from mail-ed1-f68.google.com (mail-ed1-f68.google.com [209.85.208.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C0632F5A32 for ; Sun, 25 Jan 2026 18:39:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366375; cv=none; b=m9SEbj6VjlfA2Mkl7VyzQcsrqVFgi4Bajckn6cDgtukkrbqg861qs1de6bIB37Edp2/ceZOvE6nKcf8GDUyEosrZ2PFiV9Ef4SnqMAeQXEkq8fcGM6vwqbkjGHkcM2gTHpTub3EqW4/wNcoKtiv+GCy4KIwmIvR6mL6b1n+yXaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769366375; c=relaxed/simple; bh=/W+J5KNiImurTEGKwIHSrNB2ayoimoZfMD7OdPWglcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JPByYaGv1tw+xy6bbxEZ621Ix7zorUQszhz22vyt2+QeHfF5ri9bjpEbsOupI4KZ2XOLKEtUKwz6YXloAys5RnOfozxZHGDhZl/yyrxvBn0gs+7KYj3juoSyUki5y2zzH7qgQTvoxmxpOnVcVIcamVfRPwMCc8oUhIexHBucCFs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G5Mgv8Bt; arc=none smtp.client-ip=209.85.208.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G5Mgv8Bt" Received: by mail-ed1-f68.google.com with SMTP id 4fb4d7f45d1cf-64d0da6019fso579664a12.2 for ; Sun, 25 Jan 2026 10:39:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769366372; x=1769971172; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=03JVoj5pQZnfXuN1Dsu194SUGxgQv5HQ+1Go+Oa8Fms=; b=G5Mgv8BtV+rUMsaggNf5vCHt0tXcQ1dQrNIMeYpW8MfGoGKOlWkME6keeZIiCo2HZP F2U9qaMUIp1c50RYZ1f2A2FzZFgDDFhgoUVKi3ZtijCnT5KuCYWyYLis6Yii0LLAgw0T oxzNNf//tikVDKhBF0r8vA6T+fYQ/xgb8fxHYSRzn2RlbYRmi5S/JxQzgnBnvSlu1uIe iDfv8B52RaG4MPvr/PAQdQatL9Irg4NslhnuiWI0orp0DeQlf0bm5f0CUKo5r7+WFbVe EKYlto15F8w2yvaa8n4co5+fBz4z0N8MMZ1H18tKbOBWKUTIa5+twXd/vWOgfq0ChrVX v5ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769366372; x=1769971172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=03JVoj5pQZnfXuN1Dsu194SUGxgQv5HQ+1Go+Oa8Fms=; b=rIHHlejxXMv5INsN5/cHOjSe3ZrC0rgLySyb0EUJ2LpqY2znfHFimHXXoZmVboXmJ2 BoqkFzhtVRta05HTy+UusGtn3yyLJ3j20/qc09lkWfQZoU/3Lf+0uABcCim4ZMSlrXj4 jX06x8RCqSVowzwSzV+KEUso0umPZSXq3GYhpt4yM3dMORD4qjTiXg8SEehmSQOMz0FV NBHzhx61lyJ1xGxyMdYhCRfokZwSesweiA88wZCbtnC19M+j3cfDiwgXwaQc/RfgjTKm FYFXv7jYv6pBct7SjmJJB3ttt2OylujJzar3XmxgK3VlE5Tv2WMJecdQ8a8HLgr4RGjU ns3g== X-Forwarded-Encrypted: i=1; AJvYcCUnVvugeKDYQM7UyeRBD48WwIxq39nrAhKdnFwh7OohO9cw1RGOhZ8BCdReCzP5g4eo3YrbDokgZff6sG0=@vger.kernel.org X-Gm-Message-State: AOJu0YzJDbczHIj3C0E1EQsIhu7I5OafFELGjoI1EwnMzDxXlqrSt6NF ayn3mDRdz5VV7zoUdIe3Nc2bwellecM09//rtnrmBEp7SX9dBhMeEOca X-Gm-Gg: AZuq6aKlnnzp2eoTXgAfIwl+FmYF7ZA7JXeCD77dWeM3HPmDi+bAvjYyEqEcFrajVBS QeATDzwNT51SnShPFXBHqEw8AqCaMBYaRxFbtlzOI18ZXva87HQYUcfL8MD/v5rd9jv6ImQROJ/ yGAIn3CVKLSnps/LXL8SgRgA2zEcCoKERjjLHYVvB1O817aeL3DCP70IUV8s6XT1iLuiUv2LGmk EAnmDcVRWSaevE1qlGF9a1dlxSmPfFvh6k+8aJF/Guf8J9KVxakyUQBaByhgPvrwAJTnB1A+8pJ HEVhGWeM/cf3TaLb8qRyal3G/r3pGY+790n0gz6Ue1GhOZ4kQV3HNycqyaEDp3x6w86GmbxpU7y mmvKHrTtJpWrebb2Jq/Pu2PlMToW8xbkXNtUXavo/l5XDiT4Hj9DKMy96/qHBRoSQG3EwiTV/XR Vp77hrtac+dHz01NSF5UeKyn1z+QKqijzquu4O4PkFryUghz7ia7FI+uaw5DL85gdT X-Received: by 2002:a17:906:c104:b0:b87:3087:54f0 with SMTP id a640c23a62f3a-b8d3fa9d567mr110192266b.3.1769366371750; Sun, 25 Jan 2026 10:39:31 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b885b3dad3asm499133766b.12.2026.01.25.10.39.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Jan 2026 10:39:31 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v2 11/19] drm/amd/display: Support HDMI VRRmax=0 Date: Sun, 25 Jan 2026 19:39:06 +0100 Message-ID: <20260125183914.459228-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> References: <20260125183914.459228-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] VRRmax=3D0 is a valid value and means that the upper bound is guared by the selected video mode. [How] In this context, saved vrr max is the max possible refresh rate ever. Try getting upper VRR bound from AMD vsdbif it exists or rely on the limitations of BRR in VTEM info frames. I found through testing, that TVs seem to reject VTEM when BRR is set to over 1023 Hz. Use this as the last resort VRRmax. v2: - Update max BRR value to 1023 Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +++++++++++++++---- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index d3464705ab7f..b93ba14d87d1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13215,14 +13215,25 @@ static void monitor_range_from_vsdb(struct drm_co= nnector *conn, * try getting upper bound from AMD vsdb (if passed). * * @conn: drm_connector with HDMI VRR info + * @vsdb: AMD vsdb from CAE. Can be NULL if not found. */ -static void monitor_range_from_hdmi(struct drm_connector *conn) +static void monitor_range_from_hdmi(struct drm_connector *conn, + const struct amdgpu_hdmi_vsdb_info *vsdb) { struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; struct drm_hdmi_vrr_cap *caps =3D &conn->display_info.hdmi.vrr_cap; + u16 vrr_max =3D caps->vrr_max; + + /* Try getting upper vrr bound from AMD vsdb */ + if (vrr_max =3D=3D 0 && vsdb) + vrr_max =3D vsdb->max_refresh_rate_hz; + + /* Use max possible BRR value as a last resort */ + if (vrr_max =3D=3D 0) + vrr_max =3D VTEM_BRR_MAX; =20 range->min_vfreq =3D caps->vrr_min; - range->max_vfreq =3D caps->vrr_max; + range->max_vfreq =3D vrr_max; } =20 /* @@ -13360,8 +13371,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* DP -> HDMI PCON */ } else if (pcon_allowed) { /* Prefer HDMI VRR */ - if (hdmi_vrr->supported && hdmi_vrr->vrr_max > 0) - monitor_range_from_hdmi(connector); + if (hdmi_vrr->supported) + monitor_range_from_hdmi(connector, valid_vsdb_cea ? &vsdb_info : NULL); else if (vsdb_freesync) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; monitor_range_from_vsdb(connector, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 5de8a6918e6a..306eb7355c25 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -33,6 +33,8 @@ struct dc_stream_state; struct dc_info_packet; struct mod_vrr_params; =20 +#define VTEM_BRR_MAX 1023 + void set_vsc_packet_colorimetry_data( const struct dc_stream_state *stream, struct dc_info_packet *info_packet, --=20 2.52.0