]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Disable VRR on DCE 6
authorTimur Kristóf <timur.kristof@gmail.com>
Mon, 25 Aug 2025 21:56:30 +0000 (23:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:34:25 +0000 (15:34 -0500)
[ Upstream commit 043c87d7d56e135393f8aab927148096e2d17589 ]

DCE 6 was not advertised as being able to support VRR,
so let's mark it as unsupported for now.

The VRR implementation in amdgpu_dm depends on the VUPDATE
interrupt which is not registered for DCE 6.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Rodrigo Siqueira <siqueira@igalia.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/dc/dc_helper.c
drivers/gpu/drm/amd/display/dc/dm_services.h

index 37307caf929991b5e0cd6e3981616989bc36a115..ea6bc9517ed86cf6b8b9f362201fc5ea54b75731 100644 (file)
@@ -10455,6 +10455,8 @@ static void get_freesync_config_for_crtc(
                } else {
                        config.state = VRR_STATE_INACTIVE;
                }
+       } else {
+               config.state = VRR_STATE_UNSUPPORTED;
        }
 out:
        new_crtc_state->freesync_config = config;
@@ -12357,7 +12359,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
 
        dm_con_state = to_dm_connector_state(connector->state);
 
-       if (!adev->dm.freesync_module)
+       if (!adev->dm.freesync_module || !dc_supports_vrr(sink->ctx->dce_version))
                goto update;
 
        /* Some eDP panels only have the refresh rate range info in DisplayID */
index b402be59b2c835eba134963c1ce942da90dc4740..0f333c27787d64b1aacf71054e20863e97ed7042 100644 (file)
@@ -747,3 +747,8 @@ char *dce_version_to_string(const int version)
                return "Unknown";
        }
 }
+
+bool dc_supports_vrr(const enum dce_version v)
+{
+       return v >= DCE_VERSION_8_0;
+}
index 9405c47ee2a9a99a5a5715d1184e08774cd1cb00..a7c2740e51b88b86ffa8499aa5dee0a8747ba7c9 100644 (file)
@@ -304,4 +304,6 @@ void dm_dtn_log_end(struct dc_context *ctx,
 
 char *dce_version_to_string(const int version);
 
+bool dc_supports_vrr(const enum dce_version v);
+
 #endif /* __DM_SERVICES_H__ */