From nobody Mon Feb 9 19:25:31 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 --- 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