drm/amd/display: Skip create new stream if crtc state doesn't change
authorJerry (Fangzhi) Zuo <Jerry.Zuo@amd.com>
Fri, 11 Jan 2019 21:34:31 +0000 (16:34 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 25 Jan 2019 21:15:34 +0000 (16:15 -0500)
Need to check if crtc state is changed so that mode set is
required before trying to create new stream.

It deals with the MST hotplug use case when plug back to the
same connector where the failure to create new stream for the
inactive crtc on the old connector.

Signed-off-by: Jerry (Fangzhi) Zuo <Jerry.Zuo@amd.com>
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index ff2fcb99ac63da8e60c1e28cb2dbff4b6dff4076..feb1b24efaaac2d81a279d009ec6c94b7942cc54 100644 (file)
@@ -5509,6 +5509,9 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
                dm_new_conn_state = to_dm_connector_state(drm_new_conn_state);
                dm_old_conn_state = to_dm_connector_state(drm_old_conn_state);
 
+               if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
+                       goto skip_modeset;
+
                new_stream = create_stream_for_sink(aconnector,
                                                     &new_crtc_state->mode,
                                                    dm_new_conn_state,
@@ -5538,6 +5541,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm,
                }
        }
 
+       /* mode_changed flag may get updated above, need to check again */
        if (!drm_atomic_crtc_needs_modeset(new_crtc_state))
                goto skip_modeset;