diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/1199-drm-amd-display-Reformat-dm_determine_update_type_fo.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/1199-drm-amd-display-Reformat-dm_determine_update_type_fo.patch | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/1199-drm-amd-display-Reformat-dm_determine_update_type_fo.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/1199-drm-amd-display-Reformat-dm_determine_update_type_fo.patch new file mode 100644 index 00000000..33769173 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/1199-drm-amd-display-Reformat-dm_determine_update_type_fo.patch @@ -0,0 +1,172 @@ +From 5048448e72f189632b1c10d63a3e2cfaf81814dd Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Thu, 10 Jan 2019 09:14:49 -0500 +Subject: [PATCH 1199/2940] drm/amd/display: Reformat + dm_determine_update_type_for_commit + +[Why] +The indenting for this function is a few levels too deep and can be +simplified a fair bit. This patch is in preparation for functional +changes that fix update type determination to occur less frequently +and more accurately. + +[How] +Place checks early and exit/continue when possible. This isn't +a functional change. + +Change-Id: I1ea41181332e2608f17ac1c608ea657bb3f8cd87 +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> +--- + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 126 +++++++++--------- + 1 file changed, 65 insertions(+), 61 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 2f8b9cbea81c..a3f11e63ff66 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -5905,75 +5905,79 @@ dm_determine_update_type_for_commit(struct dc *dc, + old_dm_crtc_state = to_dm_crtc_state(old_crtc_state); + num_plane = 0; + +- if (new_dm_crtc_state->stream) { +- +- for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, j) { +- new_plane_crtc = new_plane_state->crtc; +- old_plane_crtc = old_plane_state->crtc; +- new_dm_plane_state = to_dm_plane_state(new_plane_state); +- old_dm_plane_state = to_dm_plane_state(old_plane_state); +- +- if (plane->type == DRM_PLANE_TYPE_CURSOR) +- continue; +- +- if (!state->allow_modeset) +- continue; +- +- if (crtc == new_plane_crtc) { +- updates[num_plane].surface = &surface[num_plane]; +- +- if (new_crtc_state->mode_changed) { +- updates[num_plane].surface->src_rect = +- new_dm_plane_state->dc_state->src_rect; +- updates[num_plane].surface->dst_rect = +- new_dm_plane_state->dc_state->dst_rect; +- updates[num_plane].surface->rotation = +- new_dm_plane_state->dc_state->rotation; +- updates[num_plane].surface->in_transfer_func = +- new_dm_plane_state->dc_state->in_transfer_func; +- stream_update.dst = new_dm_crtc_state->stream->dst; +- stream_update.src = new_dm_crtc_state->stream->src; +- } +- +- if (new_crtc_state->color_mgmt_changed) { +- updates[num_plane].gamma = +- new_dm_plane_state->dc_state->gamma_correction; +- updates[num_plane].in_transfer_func = +- new_dm_plane_state->dc_state->in_transfer_func; +- stream_update.gamut_remap = +- &new_dm_crtc_state->stream->gamut_remap_matrix; +- stream_update.out_transfer_func = +- new_dm_crtc_state->stream->out_transfer_func; +- } +- +- num_plane++; +- } ++ if (!new_dm_crtc_state->stream) { ++ if (!new_dm_crtc_state->stream && old_dm_crtc_state->stream) { ++ update_type = UPDATE_TYPE_FULL; ++ goto cleanup; + } + +- if (num_plane > 0) { +- ret = dm_atomic_get_state(state, &dm_state); +- if (ret) +- goto cleanup; ++ continue; ++ } + +- old_dm_state = dm_atomic_get_old_state(state); +- if (!old_dm_state) { +- ret = -EINVAL; +- goto cleanup; +- } ++ for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, j) { ++ new_plane_crtc = new_plane_state->crtc; ++ old_plane_crtc = old_plane_state->crtc; ++ new_dm_plane_state = to_dm_plane_state(new_plane_state); ++ old_dm_plane_state = to_dm_plane_state(old_plane_state); + +- status = dc_stream_get_status_from_state(old_dm_state->context, +- new_dm_crtc_state->stream); ++ if (plane->type == DRM_PLANE_TYPE_CURSOR) ++ continue; + +- update_type = dc_check_update_surfaces_for_stream(dc, updates, num_plane, +- &stream_update, status); ++ if (!state->allow_modeset) ++ continue; + +- if (update_type > UPDATE_TYPE_MED) { +- update_type = UPDATE_TYPE_FULL; +- goto cleanup; +- } ++ if (crtc != new_plane_crtc) ++ continue; ++ ++ updates[num_plane].surface = &surface[num_plane]; ++ ++ if (new_crtc_state->mode_changed) { ++ updates[num_plane].surface->src_rect = ++ new_dm_plane_state->dc_state->src_rect; ++ updates[num_plane].surface->dst_rect = ++ new_dm_plane_state->dc_state->dst_rect; ++ updates[num_plane].surface->rotation = ++ new_dm_plane_state->dc_state->rotation; ++ updates[num_plane].surface->in_transfer_func = ++ new_dm_plane_state->dc_state->in_transfer_func; ++ stream_update.dst = new_dm_crtc_state->stream->dst; ++ stream_update.src = new_dm_crtc_state->stream->src; ++ } ++ ++ if (new_crtc_state->color_mgmt_changed) { ++ updates[num_plane].gamma = ++ new_dm_plane_state->dc_state->gamma_correction; ++ updates[num_plane].in_transfer_func = ++ new_dm_plane_state->dc_state->in_transfer_func; ++ stream_update.gamut_remap = ++ &new_dm_crtc_state->stream->gamut_remap_matrix; ++ stream_update.out_transfer_func = ++ new_dm_crtc_state->stream->out_transfer_func; + } + +- } else if (!new_dm_crtc_state->stream && old_dm_crtc_state->stream) { ++ num_plane++; ++ } ++ ++ if (num_plane == 0) ++ continue; ++ ++ ret = dm_atomic_get_state(state, &dm_state); ++ if (ret) ++ goto cleanup; ++ ++ old_dm_state = dm_atomic_get_old_state(state); ++ if (!old_dm_state) { ++ ret = -EINVAL; ++ goto cleanup; ++ } ++ ++ status = dc_stream_get_status_from_state(old_dm_state->context, ++ new_dm_crtc_state->stream); ++ ++ update_type = dc_check_update_surfaces_for_stream(dc, updates, num_plane, ++ &stream_update, status); ++ ++ if (update_type > UPDATE_TYPE_MED) { + update_type = UPDATE_TYPE_FULL; + goto cleanup; + } +-- +2.17.1 + |