From nobody Thu Mar 5 08:31:16 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 8D10A2DAFB5 for ; Mon, 16 Feb 2026 16:45:55 +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=1771260357; cv=none; b=Qw7wX77m+c0ATvj8nlUApT4Pz1oeS0GQZbqO5T2OjLb/kd6Q9ii8y/ipOi2XWhiswX/oWGLbuycpngH3e4/QfbjYHmKHsX6FItpzouaqdJvb1tqiOhdvZwST7mL7fsDgP3UkB/SHuDkjWKBiCNbitgamyhrEYORy2ULq2N9jjjo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771260357; c=relaxed/simple; bh=U/El+ZRl2DFM9k6KD4CjsgsCG7MARUgA2s1yAKMd3J0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=U+mjDYZIzeffQlAbwCG1hjjr/hBq06SW8rlfQTb92UDx5XckWqETGNEW4coD44onHlJ2pjkZ1RL0fXw/bvR+8ztcAKBG/k1TC01A43RH8DkWdl4+AnrQN3MN+GzUtZzxfIWafhCYxUv5y1XNs/3vJEeGN4EwYoWoPl7hiJa7dVI= 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=YZYqM5XU; 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="YZYqM5XU" Received: by mail-ej1-f67.google.com with SMTP id a640c23a62f3a-b8de2b5a122so59446066b.0 for ; Mon, 16 Feb 2026 08:45:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771260354; x=1771865154; 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=7aD3otBgcxZjv1qvxWCjHurqs+NRqtEYA6dA7W84qVQ=; b=YZYqM5XUUW1A9e7YzXJ24A2TYdoVpIwjeNMgigH/iZaTeQbRPzru0C60q1274RcCx9 2/4um1fVXW7yeUxOS6yUtksbktqcM0RvLEw2P17eiqkbCjx8gECl6AhdvLItFM9hVo4q vPcoAaChq8Lc/9+tbkuWhLZFZclSUHq46J3MRgxcrecaNaO9MKh7p1PnRm4xdcPy4lp2 jmPmj+ysb214fQOBJfPQFBJ0qDRFpalsLlO0yJasIyqfyqLMyzhzMa+GXNw+XAVDc/ck oiOeejat4LABsRAbNcDH8VDyp3h9ZgefW8jYM6G3slIpLiwrI+7Tj0YTSRgWFOb9WbQp sBxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771260354; x=1771865154; 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=7aD3otBgcxZjv1qvxWCjHurqs+NRqtEYA6dA7W84qVQ=; b=Mf+O5nPvosgE3pWK2Ypr9uGKs7/EJT7BUQB2Dbt1R3IhFC5awpB49zA99UQ1Bo4Hqu 1/nbbgEorBUzRJ+lmRpdPsYJYHaZHaq2XmuP+QAFBk5q+yNXpxTx3lbUjM38bgJ4uki4 qfnM98R6KpZ+rFKMK7SJA+UrPhJRFKudvGJFlsvZGTgiYJ/z0pUP+FeQTwa4lFhL24/Q wDJnEkx7pDhV8Rzyt9lJtigLpBXjUZ+IBCvPp2TW1x/63abEKVaPTsY/J/ySbZt9j65s JUJmS+dq9oo5igvW5o9PHSulnT4vFx0SjhNTy63AEFuwql18XljLtH3u6boe5jzyy2Mv 7l3w== X-Forwarded-Encrypted: i=1; AJvYcCUcht9eIDQ38bXRy3GO1HLnLgWpAj6L7KK8Njg+CCCYxIdLmtbpumN3IlqX2yW22862VcIHD9+Z7nmiXbk=@vger.kernel.org X-Gm-Message-State: AOJu0YxRaKJCbkMKuXkr09AH+YrVfUFZXsXIkIX8+I4M10UHQOZea1pW dej5kP7WKK3wYOaB5gT2NOZCwLnPVtS3RsVa+4iOIG4ZHFI0+sn0Bbv4 X-Gm-Gg: AZuq6aJmis0PnUOAS/fkzMO6oTKK4yG5erWVAvJEmzXdOytDZ1HD+wPklhEmxzHkdqw WCDpkfcf60LSFTO/390hEficf5joqnsauH/5uK0J0tigEyqvg7Puajw3VmUVXz9bI6usMpdk1wj +oEGDts+jqVFRifaEujA2MFeMuf5xGmfrf6/Q0nYIWXg5PuZoFr+ktpcXFlZ59kpxUIf7dtj4rS HQqwhTqnCmUJxrmP6NKeiBhAjksAMyOhBlP6MUB1FH5yBNHqkkGGksFXEqW9zkda0cEf/RtxccX CUyrK6/0lqbM7uGpXbm+TKEwOwZui+URqHV+BCzGDurndy85zxVoSX3bMQNmea1bKhDZ1L1WaoS c9bbw5xkaK+HCT5OYzPKxj+eo+CJSw4BBFRtDdJwkVLURLtTwbKUNFZGj9jXXZ4+Fzw1WmtA1gg 1jGrEA6SXgJbrIg4BxDkdZOK/vwpmNTUKj39MgCPdG/ftAP9Tx0dr2Bs1PLAQ529gHk2mDdETg8 NB3 X-Received: by 2002:a17:907:98d:b0:b8f:bf8:e04a with SMTP id a640c23a62f3a-b8fac8b3924mr328939466b.0.1771260353828; Mon, 16 Feb 2026 08:45:53 -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.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Feb 2026 08:45: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 Subject: [PATCH v4 26/27] drm/amd/display: Use passive_vrr properties in amdgpu Date: Mon, 16 Feb 2026 17:45:15 +0100 Message-ID: <20260216164516.36803-27-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 [How] Attach and use this properties for HDMI sinks which are troublesome with their VRR state transitions. Hook into already-established freesync_on_desktop logic. Signed-off-by: Tomasz Paku=C5=82a --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 ++++++++++++++++--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 1 + 2 files changed, 23 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 6a2806cc800a..41677c50b3d2 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7850,6 +7850,8 @@ amdgpu_dm_connector_atomic_duplicate_state(struct drm= _connector *connector) __drm_atomic_helper_connector_duplicate_state(connector, &new_state->base= ); =20 new_state->freesync_capable =3D state->freesync_capable; + new_state->freesync_on_desktop_capable =3D + state->freesync_on_desktop_capable; new_state->abm_level =3D state->abm_level; new_state->scaling =3D state->scaling; new_state->underscan_enable =3D state->underscan_enable; @@ -9057,8 +9059,10 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_d= isplay_manager *dm, connector_type =3D=3D DRM_MODE_CONNECTOR_eDP) { drm_connector_attach_hdr_output_metadata_property(&aconnector->base); =20 - if (!aconnector->mst_root) + if (!aconnector->mst_root) { drm_connector_attach_vrr_capable_property(&aconnector->base); + drm_connector_attach_passive_vrr_capable_property(&aconnector->base); + } =20 if (adev->dm.hdcp_workqueue) drm_connector_attach_content_protection_property(&aconnector->base, tru= e); @@ -11338,6 +11342,12 @@ static void get_freesync_config_for_crtc( config.vsif_supported =3D true; config.btr =3D true; =20 + if (new_con_state->freesync_on_desktop_capable) + new_crtc_state->stream->freesync_on_desktop =3D + !new_crtc_state->base.passive_vrr_disabled; + else + new_crtc_state->stream->freesync_on_desktop =3D false; + if (fs_vid_mode) { config.state =3D VRR_STATE_ACTIVE_FIXED; config.fixed_refresh_in_uhz =3D new_crtc_state->freesync_config.fixed_r= efresh_in_uhz; @@ -11349,6 +11359,7 @@ static void get_freesync_config_for_crtc( } } else { config.state =3D VRR_STATE_UNSUPPORTED; + new_crtc_state->stream->freesync_on_desktop =3D false; } out: new_crtc_state->freesync_config =3D config; @@ -13352,6 +13363,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct drm_hdmi_vrr_cap hdmi_vrr =3D {0}; struct dpcd_caps dpcd_caps =3D {0}; const struct edid *edid; + bool freesync_on_desktop =3D false; bool freesync_capable =3D false; bool pcon_allowed =3D false; bool is_pcon =3D false; @@ -13431,6 +13443,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, monitor_range_from_vsdb(&connector->display_info, &vsdb_info); =20 freesync_capable =3D copy_range_to_amdgpu_connector(connector); + freesync_on_desktop =3D freesync_capable; =20 /* DP -> HDMI PCON */ } else if (pcon_allowed) { @@ -13445,11 +13458,14 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, 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); + freesync_on_desktop =3D freesync_capable; } =20 update: - if (dm_con_state) + if (dm_con_state) { dm_con_state->freesync_capable =3D freesync_capable; + dm_con_state->freesync_on_desktop_capable =3D freesync_on_desktop; + } =20 if (connector->state && amdgpu_dm_connector->dc_link && !freesync_capable= && amdgpu_dm_connector->dc_link->replay_settings.config.replay_supported= ) { @@ -13458,8 +13474,10 @@ void amdgpu_dm_update_freesync_caps(struct drm_con= nector *connector, } =20 if (connector->vrr_capable_property) - drm_connector_set_vrr_capable_property(connector, - freesync_capable); + drm_connector_set_vrr_capable_property(connector, freesync_capable); + + if (connector->passive_vrr_capable_property) + drm_connector_set_passive_vrr_capable_property(connector, freesync_on_de= sktop); } =20 void amdgpu_dm_trigger_timing_sync(struct drm_device *dev) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.h index 800813671748..88ec2b88dcaf 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h @@ -1020,6 +1020,7 @@ struct dm_connector_state { uint8_t underscan_hborder; bool underscan_enable; bool freesync_capable; + bool freesync_on_desktop_capable; bool update_hdcp; bool abm_sysfs_forbidden; uint8_t abm_level; --=20 2.53.0