From nobody Thu Mar 5 08:43:24 2026 Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 001822C3244 for ; Mon, 16 Feb 2026 16:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; cv=none; b=oQkzW+j1yqZWoILB9jxr0HbiajoLY2E+NDaBs+V0JPOEBl6y5FiCNKMIHzhf8pWOMXPqKj+UPceNq1cpaZjeTzana5M06EOrlk/YQBUoL3ipL4xu653nVMW4QvncmMMWMvcHm6Z0HMrKQSZb6clrSTQhQH6BsSwhWStQX5oHK/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260343; c=relaxed/simple; bh=Z2mZgmciwqWu+iAY6olJFOnXOdP3uRdWHbuHoH/Zqbc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=T3gjux0xxbyeq+EsMsxpAkHGOuzBSkcT24XIxVmAQ5j1Z1FHs9thZyjUZDIywT5b1AjfShhwm/wZsVBYeFYeXcnbIro7xoY/y6M4tvgo1iQLa/2/kxsjZ2za6BgovxY6tYY7iAcDT+4T3CQj1lXJt7EQf553+KRuj+t5NciQ0tA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BTZmrYOO; arc=none smtp.client-ip=209.85.218.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BTZmrYOO" Received: by mail-ej1-f66.google.com with SMTP id a640c23a62f3a-b8f7f7a1b80so42154666b.2 for ; Mon, 16 Feb 2026 08:45:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260339; x=1771865139; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9OKWWD4fVuRFCLZG1mlotGGCycPT2eMUJpgDA/iY0b8=; b=BTZmrYOOZ9CpDVXtk6rbTCcry9vQGTMaOQPUQ3cOIz9DHCCL8X5GG0E4Hd29rxtLOi fx8Z6QT5QbQCl74x8OkT88fmEuSyam1rlsAeZq0gTJRmFPIUHDAzEXV5byQyqfQmRhwp QUVis1a4I3lNXaC9muNhpHXHEt5CMDnLGYO3AvLzcF2SAzOxBF9eucUZknuBnaDnihi5 MZXfbviFZSaYVB4AQypKA2DxJ2DQDgXgGG9EWFjfCCdD5gUolJO48oXtRfeAvm8vnZUN jZgXUKbWQLiQGSVC2JdZgb1v9RHeDj55t/TWmv60i0bGBhtYPDIlxT8tfGo8lxlQrgAO 3vXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260339; x=1771865139; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=9OKWWD4fVuRFCLZG1mlotGGCycPT2eMUJpgDA/iY0b8=; b=YLdn2qgoloQ9HKlpQ4L9BQRSX/3d5u1Tgu5ZYjIjy+3+OkMS0+5IMRGUPL0+v+QV4U d7SPUEG0LdJ6yNtVLbV4tgrGDeERAK/DWWOc0VkhXET4PBYqwVRA49iL/2zADLksarD2 zrAGDEBWX+Hy7vKQ1zkfjk8Fv+nLKBVN3CdCOG22Jg2OefdzU7G3xv98znncx1CG7CCg HNvBvO+4Eh0RexahGKHCRol2uQexOuLLivC/at4UKStPe7FbtIsoJ7ec/MBdtLq4OaSM l/E7VRxmW4zGtpUgZlsOlAfIHv+M5tS63BoEo59yjSDtW4Z1zVOCeel9FVCjug8yGprL XtJA== X-Forwarded-Encrypted: i=1; AJvYcCWobMlmIdnRqtq/ecHjWATBnyeAELhlH54UBWqxQ8UDpgrX+qFAPADsgjEvYHKNIsVEjdE9FNG09Ou8Xo4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3hNNtGFpAXEpncPqklnNtC4M0y/FPGG4bBRuEWl5jcVQzFvK4 /4djcsA7JMhVDdUFpglnrYAZ9I5eZ4/IT0pnvb6d5JFJlP4VFh9Ukpua X-Gm-Gg: AZuq6aLP+tCLwAONeYkOVk/sDBNtu/IrTS+dBgRJ9Lym/03ExcnbbafmafABkZHoPQX Q8V7ljyl/bFA+UKSwq0Im28PcECFv5IU9cBhQA3QTWvtPvOMeVCTWGoYBdxfK9r2pB7lrOg9IIF Vk2uPrmuV8evLC8XKk6AwA8xNdR7UdMGcF+KjKVKeN+XAhONB1FvPc2KmaJ1d96L53Xwg+aDELC kjqQxs5I+Z8XmQqQhbPtYeORM9aB51aaueO0pIE08YhxeeLuSC23cgGGFKP/hqxnGEZ2KqFrGdr wuPUGbMIJ7jSulg3NsKGEPNvK6qiQFsPv8ub++PgIlmvbsRZFw8imajTAsDfYTEuqJ7PyeIBxtA 0EgBVvg6pvptvRicst3g/C045XsyrL2pEex2rGlHtKXb+v4jMWS+N+u76nsWzCC1YJggBSNBOXG mFTPgWnK41h49ICzAAYlg3l5XHX97k0dfU/wE+xV1iz7rrwChWs/7Ftl8XPBjyKgwXsUuSJe6Yn z2d X-Received: by 2002:a17:907:3e88:b0:b87:2099:9f6b with SMTP id a640c23a62f3a-b8face2491bmr364262166b.3.1771260339213; Mon, 16 Feb 2026 08:45:39 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8fc735d185sm264683866b.14.2026.02.16.08.45.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45:38 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, harry.wentland@amd.com, sunpeng.li@amd.com Cc: maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, siqueira@igalia.com, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, tomasz.pakula.oficjalny@gmail.com, bernhard.berger@gmail.com, michel.daenzer@mailbox.org, daniel@fooishbar.org Subject: [PATCH v4 15/27] drm/amd/display: Support HDMI VRRmax=0 Date: Mon, 16 Feb 2026 17:45:04 +0100 Message-ID: <20260216164516.36803-16-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> References: <20260216164516.36803-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable [Why] VRRmax=3D0 is a valid value and means that the upper bound is guared by the selected video mode. [How] In this context, saved vrr max is the max possible refresh rate ever. Try getting upper VRR bound from AMD vsdbif it exists or rely on the limitations of BRR in VTEM info frames. I found through testing, that TVs seem to reject VTEM when BRR is set to over 1023 Hz. Use this as the last resort VRRmax. 1023 is the max value for a 10-bit field as well. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 +++++++++++++++---- .../amd/display/modules/inc/mod_info_packet.h | 2 ++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 931493433439..991e2262ecbc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -13259,14 +13259,27 @@ static void monitor_range_from_vsdb(struct drm_di= splay_info *display, } =20 /** - * Get VRR range from HDMI VRR info in EDID. + * Get VRR range from HDMI VRR info in EDID. If VRRmax =3D=3D 0, + * try getting upper bound from AMD vsdb. * * @conn: drm_connector with HDMI VRR info + * @vsdb: AMD vsdb from CAE */ -static void monitor_range_from_hdmi(struct drm_display_info *display) +static void monitor_range_from_hdmi(struct drm_display_info *display, + const struct amdgpu_hdmi_vsdb_info *vsdb) { + u16 vrr_max =3D display->hdmi.vrr_cap.vrr_max; + + /* Try getting upper vrr bound from AMD vsdb */ + if (vrr_max =3D=3D 0) + vrr_max =3D vsdb->max_refresh_rate_hz; + + /* Use max possible BRR value as a last resort */ + if (vrr_max =3D=3D 0) + vrr_max =3D VTEM_BRR_MAX; + display->monitor_range.min_vfreq =3D display->hdmi.vrr_cap.vrr_min; - display->monitor_range.max_vfreq =3D display->hdmi.vrr_cap.vrr_max; + display->monitor_range.max_vfreq =3D vrr_max; } =20 /* @@ -13413,8 +13426,8 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, /* DP -> HDMI PCON */ } else if (pcon_allowed) { /* Prefer HDMI VRR */ - if (hdmi_vrr.supported && hdmi_vrr.vrr_max > 0) - monitor_range_from_hdmi(&connector->display_info); + if (hdmi_vrr.supported) + monitor_range_from_hdmi(&connector->display_info, &vsdb_info); else if (vsdb_info.freesync_supported) { amdgpu_dm_connector->vsdb_info =3D vsdb_info; monitor_range_from_vsdb(&connector->display_info, &vsdb_info); diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 5de8a6918e6a..306eb7355c25 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -33,6 +33,8 @@ struct dc_stream_state; struct dc_info_packet; struct mod_vrr_params; =20 +#define VTEM_BRR_MAX 1023 + void set_vsc_packet_colorimetry_data( const struct dc_stream_state *stream, struct dc_info_packet *info_packet, --=20 2.53.0