drm/amd/display: Check scaling info when determing update type
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Thu, 28 Mar 2019 19:50:06 +0000 (15:50 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 15 Apr 2019 05:21:55 +0000 (00:21 -0500)
[Why]
Surface scaling info updates can affect bandwidth and blocks. We need
to be checking these with global validation to avoid underflow or
corruption.

[How]
Drop the state->allow_modeset early exit in
dm_determine_update_type_for_commit. Most of those should be considered
fast now anyway.

Fill in scaling info and it to the surface update in atomic
check.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: David Francis <David.Francis@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 409979f..ea63acc 100644 (file)
@@ -6312,6 +6312,7 @@ dm_determine_update_type_for_commit(struct amdgpu_display_manager *dm,
        }
 
        for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
+               struct dc_scaling_info scaling_info;
                struct dc_stream_update stream_update;
 
                memset(&stream_update, 0, sizeof(stream_update));
@@ -6342,9 +6343,6 @@ dm_determine_update_type_for_commit(struct amdgpu_display_manager *dm,
                                goto cleanup;
                        }
 
-                       if (!state->allow_modeset)
-                               continue;
-
                        if (crtc != new_plane_crtc)
                                continue;
 
@@ -6366,6 +6364,13 @@ dm_determine_update_type_for_commit(struct amdgpu_display_manager *dm,
                                                new_dm_crtc_state->stream->out_transfer_func;
                        }
 
+                       ret = fill_dc_scaling_info(new_plane_state,
+                                                  &scaling_info);
+                       if (ret)
+                               goto cleanup;
+
+                       updates[num_plane].scaling_info = &scaling_info;
+
                        num_plane++;
                }