| From a568c3fa2ac563f6e518ac51ba2a0fb51d994368 Mon Sep 17 00:00:00 2001 |
| From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> |
| Date: Fri, 8 Feb 2019 13:21:05 -0500 |
| Subject: drm/amd/display: Set stream->mode_changed when connectors change |
| |
| [ Upstream commit b9952f93cd2cf5fca82b06a8179c0f5f7b769e83 ] |
| |
| [Why] |
| The kms_plane@plane-position-covered-pipe-*-planes subtests can produce |
| a sequence of atomic commits such that neither active_changed nor |
| mode_changed but connectors_changed. |
| |
| When this happens we remove the old stream from the context and add |
| a new stream but the new stream doesn't have mode_changed=true set. |
| |
| This incorrect programming sequence causes CRC mismatches to occur in |
| the test. |
| |
| The stream->mode_changed value should be set whenever a new stream |
| is created. |
| |
| [How] |
| A new stream is created whenever drm_atomic_crtc_needs_modeset is true. |
| We previously covered the active_changed and mode_changed conditions |
| for the CRTC but connectors_changed is also checked within |
| drm_atomic_crtc_needs_modeset. |
| |
| So just use drm_atomic_crtc_needs_modeset directly to determine the |
| mode_changed flag. |
| |
| Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> |
| Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com> |
| Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@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 | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |
| index b14369ab151f6..0886b36c23447 100644 |
| --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |
| +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |
| @@ -4955,8 +4955,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, |
| static void amdgpu_dm_crtc_copy_transient_flags(struct drm_crtc_state *crtc_state, |
| struct dc_stream_state *stream_state) |
| { |
| - stream_state->mode_changed = |
| - crtc_state->mode_changed || crtc_state->active_changed; |
| + stream_state->mode_changed = drm_atomic_crtc_needs_modeset(crtc_state); |
| } |
| |
| static int amdgpu_dm_atomic_commit(struct drm_device *dev, |
| -- |
| 2.20.1 |
| |