drm/amdgpu: don't change mode in amdgpu_dm_connector_mode_valid()
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Sat, 14 Dec 2024 13:37:06 +0000 (15:37 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tue, 7 Jan 2025 10:40:02 +0000 (12:40 +0200)
Make amdgpu_dm_connector_mode_valid() duplicate the mode during the
test rather than modifying the passed mode. This is a preparation to
converting the mode_valid() callback of drm_connector to take a const
struct drm_display_mode argument.

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241214-drm-connector-mode-valid-const-v2-2-4f9498a4c822@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index dea640816e190648b6fbec7affdd675f21cbdb9a..f92ad3b77c19490e7246e50a09a4e3e63cd735ce 100644 (file)
@@ -7420,6 +7420,7 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
 {
        int result = MODE_ERROR;
        struct dc_sink *dc_sink;
+       struct drm_display_mode *test_mode;
        /* TODO: Unhardcode stream count */
        struct dc_stream_state *stream;
        struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
@@ -7444,11 +7445,16 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
                goto fail;
        }
 
-       drm_mode_set_crtcinfo(mode, 0);
+       test_mode = drm_mode_duplicate(connector->dev, mode);
+       if (!test_mode)
+               goto fail;
+
+       drm_mode_set_crtcinfo(test_mode, 0);
 
-       stream = create_validate_stream_for_sink(aconnector, mode,
+       stream = create_validate_stream_for_sink(aconnector, test_mode,
                                                 to_dm_connector_state(connector->state),
                                                 NULL);
+       drm_mode_destroy(connector->dev, test_mode);
        if (stream) {
                dc_stream_release(stream);
                result = MODE_OK;