]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: do not copy invalid CRTC timing info
authorGergo Koteles <soyer@irl.hu>
Wed, 2 Apr 2025 17:03:31 +0000 (19:03 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 22 Apr 2025 20:51:17 +0000 (16:51 -0400)
Since b255ce4388e0, it is possible that the CRTC timing
information for the preferred mode has not yet been
calculated while amdgpu_dm_connector_mode_valid() is running.

In this case use the CRTC timing information of the actual mode.

Fixes: b255ce4388e0 ("drm/amdgpu: don't change mode in amdgpu_dm_connector_mode_valid()")
Closes: https://lore.kernel.org/all/ed09edb167e74167a694f4854102a3de6d2f1433.camel@irl.hu/
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4085
Signed-off-by: Gergo Koteles <soyer@irl.hu>
Reviewed-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Tested-by: Mark Broadworth <mark.broadworth@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 20232192a5044d1f66dcbef0a24de1bb8157738d)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 5fe0b4921568160c5bc9b2b1c5ae686e204c5a88..536f73131c2d15e3411cf6286d60d77d6b8283fc 100644 (file)
@@ -6501,12 +6501,12 @@ decide_crtc_timing_for_drm_display_mode(struct drm_display_mode *drm_mode,
                                        const struct drm_display_mode *native_mode,
                                        bool scale_enabled)
 {
-       if (scale_enabled) {
-               copy_crtc_timing_for_drm_display_mode(native_mode, drm_mode);
-       } else if (native_mode->clock == drm_mode->clock &&
-                       native_mode->htotal == drm_mode->htotal &&
-                       native_mode->vtotal == drm_mode->vtotal) {
-               copy_crtc_timing_for_drm_display_mode(native_mode, drm_mode);
+       if (scale_enabled || (
+           native_mode->clock == drm_mode->clock &&
+           native_mode->htotal == drm_mode->htotal &&
+           native_mode->vtotal == drm_mode->vtotal)) {
+               if (native_mode->crtc_clock)
+                       copy_crtc_timing_for_drm_display_mode(native_mode, drm_mode);
        } else {
                /* no scaling nor amdgpu inserted, no need to patch */
        }