From nobody Mon Feb 9 19:04: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 CE75D1FE44B for ; Mon, 19 Jan 2026 01:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; cv=none; b=Na0yhXUifCjXgN8w2FlyRUrW0xAEV65sf3pmcsqpQBD74IH2tpyoGesOqwk/L1Yzbo5v7GRMzuRS/lxQLZkp2Rvn0XLVuubS64WEOdwQIuQo/yR84g78RZpiT1lvFMkw/qyX2sW83mDiDZH2syqKQUzYqZN6G5YX3oFSJDGfeF4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768785132; c=relaxed/simple; bh=tyC1IAEkAQFmsbdxjz6602Nz8czkBEgb/nRkJ79ojjM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=eILTUo+1iR5YsQNWeV0qHcx56cZG+ekhp/9uVNiJ0b2JETHX98mvNVtgmsAZ/czSloCLm0fayWWlINMN0eurDmsi+R1KZcjt/pN9vQb/EDLaCfqoOe/B2HAHA0dJaL94lqnt/603n1KI8BR/8ZLwRa/iG9D24I0mXH4ctiNedbc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=B4sO91cV; arc=none smtp.client-ip=209.85.218.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="B4sO91cV" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b87677a8a96so75089166b.2 for ; Sun, 18 Jan 2026 17:12:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768785125; x=1769389925; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9/53CE6A9/GsgJ6BVK8QZ50j6vF5XTAayna7qWQhe+s=; b=B4sO91cV8AzQnOZy6aQ9gybQvrlU9m9puVDcROmphhooGtp7bi4DpiVCE02l55WYdW xvAmjL0IX/nX0pQnPCLAKBTfOnDuEABjN/+upUPU5L/nzgAUUeswLaXOgL+OdkKup0dV r0Ld54AuOcf/Py4zWM4bvEoiYYDCzvgJ52JviNB8dTuQgBoLIzj3ACGIT9I1XlkZ8IGE +vavodh4pcxXvbV0LLu9YEuLPoUD7sgfkyJQ5dLeB9mwv1I+3M3u8UVGetoAUBiSzYkF ASn/p0Nu4fZ7/risSvC/w1bY/rV0SiaVawWog+vjl7R/x/XFEZ/YRfGtOenDNg2Twm2F ac1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768785125; x=1769389925; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=9/53CE6A9/GsgJ6BVK8QZ50j6vF5XTAayna7qWQhe+s=; b=r/DU11dnEdM151GITvF9N23Rj3TXO9HrZ9MJerOOVrOtKUDQ5jvwzT3YbXMec8tI6X c21J8dDQHosJ4KnXKAnK3D2MsurvE/d3oQ4BxaSInduH0Rq2Af12RKz2y8pXGBzoqDCU 23kprnFHE1WaJggoA+K1JUy0wAxLq1Nk8qxO1ziVf//ir4uXcv3HQ3AP5XJk1EfDt828 HG2HCvqfdtOMB336jY+2tKzkXl0YCNgbT7RdMgYJCqYeJZiWyICfEISGsXgue/qwUcvS EETQUQJRmUYjyx80se6YCLqOfRRwtCGQIScCzUO+NjWbwif3BlppHrL1d5DLokBQl2DU rltA== X-Forwarded-Encrypted: i=1; AJvYcCUQf7ABKTscEVCTmjI1bjSUJ8MUVbjXrIz1AdWjLiONOzXq/uuSBPbVhc2SRfIt+ANGR2oVJdwLdy0Bmoo=@vger.kernel.org X-Gm-Message-State: AOJu0Yyrb8DUN7TU0uk2t/ljZwNMuZnkFFxLneSzwhrGkpSTK/yTDzoW YibHBGc8pLlLfs22u/5S3ZnVOk0XvRhQfqycHu9t84GZXm5yTXtK41GW X-Gm-Gg: AY/fxX7ZtK8fI0pi7sjxlAPyyho/z9Ub1suOXxll61a8OiA0IU6n0oQbaXj77o9KMgG GuE8IMsjHRAL5exM5CasQ/M3RAsY0H/EdtJ87vweYkMhAdurnWjx9w/laNr6b10c+qYNde/hj0I 6w48gP9p8VauUppKL3LcmHzQteYfBIyehkD1Nn7/PqevZEBA6x9ZJ3oOI3oxiZpEjkWomvtRLKf 0JwznSjwmh03OGBN+HqeWpcIm00YMqB1LZr3RaBfyiUI3LqVj4Onjt6uS1F1WKOpwKt9f/uX1Mo 2bG07VvNaK1OlRzEFC6gCOWPxrLeFmwbO0udlbXECGs9wP4x4tdhpyCCMbLDrA8tu1cJy8vz6Rj VyXsPHno+nhSm0WhZCtU2OnfTn+WRI1nB+TS+yzrHxXHYokzPVv1hIa7c5UlV25zDgRpNNYLo6z orwSQgtb0jNR6lv5OFBv7RsNsDrejWskCI3OQsp0ZjwyC8AAvm1ln2Uvfm/OcBRsFu3xAmK4BTt Lo= X-Received: by 2002:a05:6402:27cf:b0:64d:4623:8475 with SMTP id 4fb4d7f45d1cf-654524cf67cmr4280917a12.2.1768785125504; Sun, 18 Jan 2026 17:12:05 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-654535c4912sm8989806a12.30.2026.01.18.17.12.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Jan 2026 17:12:05 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com Subject: [PATCH 11/17] drm/amd/display: Support HDMI VRRmax=0 Date: Mon, 19 Jan 2026 02:11:40 +0100 Message-ID: <20260119011146.62302-12-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> References: <20260119011146.62302-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] VRRmax=3D0 is a valid value and means that the upper bound is guared by the selected video mode. [How] In this context, saved vrr max is the max possible refresh rate ever. Try getting upper VRR bound from AMD vsdbif it exists or rely on the limitations of BRR in VTEM info frames. I found through testing, that TVs seem to reject VTEM when BRR is set to over 1000 Hz. Use this as the last resort VRRmax. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 22 ++++++++++++++----- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 772deaa136d7..3c535a361882 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13194,17 +13194,29 @@ static void monitor_range_from_vsdb(struct drm_co= nnector *conn, } =20 /* - * Get VRR range from HDMI VRR info in EDID. + * Get VRR range from HDMI VRR info in EDID. If VRRmax =3D=3D 0, + * try getting upper bound from AMD vsdb (if passed). * * @conn: drm_connector with HDMI VRR info + * @vsdb: AMD vsdb from CAE. Can be NULL if not found. */ -static void monitor_range_from_hdmi(struct drm_connector *conn) +static void monitor_range_from_hdmi(struct drm_connector *conn, + const struct amdgpu_hdmi_vsdb_info *vsdb) { struct drm_monitor_range_info *range =3D &conn->display_info.monitor_rang= e; struct drm_hdmi_vrr_cap *caps =3D &conn->display_info.hdmi.vrr_cap; + u16 vrr_max =3D caps->vrr_max; + + /* Try getting upper vrr bound from AMD vsdb */ + if (vrr_max =3D=3D 0 && vsdb) + vrr_max =3D vsdb->max_refresh_rate_hz; + + /* Use max possible BRR value as a last resort */ + if (vrr_max =3D=3D 0) + vrr_max =3D VTEM_BRR_MAX; =20 range->min_vfreq =3D caps->vrr_min; - range->max_vfreq =3D caps->vrr_max; + range->max_vfreq =3D vrr_max; } =20 /** @@ -13342,8 +13354,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* DP -> HDMI PCON */ } else if (pcon_allowed) { /* Prefer HDMI VRR */ - if (hdmi_vrr->supported && hdmi_vrr->vrr_max > 0) - monitor_range_from_hdmi(connector); + if (hdmi_vrr->supported) + monitor_range_from_hdmi(connector, valid_vsdb_cea ? &vsdb_info : NULL); else if (vsdb_freesync) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; monitor_range_from_vsdb(connector, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 5de8a6918e6a..67274ce129bd 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -33,6 +33,8 @@ struct dc_stream_state; struct dc_info_packet; struct mod_vrr_params; =20 +#define VTEM_BRR_MAX 1000 + void set_vsc_packet_colorimetry_data( const struct dc_stream_state *stream, struct dc_info_packet *info_packet, --=20 2.52.0