]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Skip pipe if the pipe idx not set properly
authorMuhammad Ahmed <ahmed.ahmed@amd.com>
Fri, 15 Mar 2024 22:30:26 +0000 (18:30 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 5 Jul 2024 07:37:58 +0000 (09:37 +0200)
[ Upstream commit af114efe8d24b5711cfbedf7180f2ac1a296c24b ]

[why]
Driver crashes when pipe idx not set properly

[how]
Add code to skip the pipe that idx not set properly

Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Muhammad Ahmed <ahmed.ahmed@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/dml2/dml2_utils.c

index f15d1dbad6a968204be0971776ad46650f2b7d0c..b72ed3e78df053731812940bb103cc15584058ba 100644 (file)
@@ -327,6 +327,8 @@ void dml2_calculate_rq_and_dlg_params(const struct dc *dc, struct dc_state *cont
                        dml_pipe_idx = dml2_helper_find_dml_pipe_idx_by_stream_id(in_ctx, context->res_ctx.pipe_ctx[dc_pipe_ctx_index].stream->stream_id);
                }
 
+               if (dml_pipe_idx == 0xFFFFFFFF)
+                       continue;
                ASSERT(in_ctx->v20.scratch.dml_to_dc_pipe_mapping.dml_pipe_idx_to_stream_id_valid[dml_pipe_idx]);
                ASSERT(in_ctx->v20.scratch.dml_to_dc_pipe_mapping.dml_pipe_idx_to_stream_id[dml_pipe_idx] == context->res_ctx.pipe_ctx[dc_pipe_ctx_index].stream->stream_id);
 
@@ -468,6 +470,9 @@ bool dml2_verify_det_buffer_configuration(struct dml2_context *in_ctx, struct dc
                        dml_pipe_idx = find_dml_pipe_idx_by_plane_id(in_ctx, plane_id);
                else
                        dml_pipe_idx = dml2_helper_find_dml_pipe_idx_by_stream_id(in_ctx, display_state->res_ctx.pipe_ctx[i].stream->stream_id);
+
+               if (dml_pipe_idx == 0xFFFFFFFF)
+                       continue;
                total_det_allocated += dml_get_det_buffer_size_kbytes(&in_ctx->v20.dml_core_ctx, dml_pipe_idx);
                if (total_det_allocated > max_det_size) {
                        need_recalculation = true;