Commit 82367e7f authored by Roy Chan's avatar Roy Chan Committed by Alex Deucher

drm/amd/display: fix missing writeback disablement if plane is removed

[Why]
If the plane has been removed, the writeback disablement logic
doesn't run

[How]
fix the logic order
Acked-by: default avatarAnson Jacob <Anson.Jacob@amd.com>
Signed-off-by: default avatarRoy Chan <roy.chan@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f43a19fd
...@@ -1723,14 +1723,16 @@ void dcn20_program_front_end_for_ctx( ...@@ -1723,14 +1723,16 @@ void dcn20_program_front_end_for_ctx(
pipe = pipe->bottom_pipe; pipe = pipe->bottom_pipe;
} }
}
/* Program secondary blending tree and writeback pipes */ /* Program secondary blending tree and writeback pipes */
pipe = &context->res_ctx.pipe_ctx[i]; pipe = &context->res_ctx.pipe_ctx[i];
if (!pipe->prev_odm_pipe && pipe->stream->num_wb_info > 0 if (!pipe->top_pipe && !pipe->prev_odm_pipe
&& (pipe->update_flags.raw || pipe->plane_state->update_flags.raw || pipe->stream->update_flags.raw) && pipe->stream && pipe->stream->num_wb_info > 0
&& (pipe->update_flags.raw || (pipe->plane_state && pipe->plane_state->update_flags.raw)
|| pipe->stream->update_flags.raw)
&& hws->funcs.program_all_writeback_pipes_in_tree) && hws->funcs.program_all_writeback_pipes_in_tree)
hws->funcs.program_all_writeback_pipes_in_tree(dc, pipe->stream, context); hws->funcs.program_all_writeback_pipes_in_tree(dc, pipe->stream, context);
} }
}
} }
void dcn20_post_unlock_program_front_end( void dcn20_post_unlock_program_front_end(
......
...@@ -398,12 +398,22 @@ void dcn30_program_all_writeback_pipes_in_tree( ...@@ -398,12 +398,22 @@ void dcn30_program_all_writeback_pipes_in_tree(
for (i_pipe = 0; i_pipe < dc->res_pool->pipe_count; i_pipe++) { for (i_pipe = 0; i_pipe < dc->res_pool->pipe_count; i_pipe++) {
struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i_pipe]; struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i_pipe];
if (!pipe_ctx->plane_state)
continue;
if (pipe_ctx->plane_state == wb_info.writeback_source_plane) { if (pipe_ctx->plane_state == wb_info.writeback_source_plane) {
wb_info.mpcc_inst = pipe_ctx->plane_res.mpcc_inst; wb_info.mpcc_inst = pipe_ctx->plane_res.mpcc_inst;
break; break;
} }
} }
ASSERT(wb_info.mpcc_inst != -1);
if (wb_info.mpcc_inst == -1) {
/* Disable writeback pipe and disconnect from MPCC
* if source plane has been removed
*/
dc->hwss.disable_writeback(dc, wb_info.dwb_pipe_inst);
continue;
}
ASSERT(wb_info.dwb_pipe_inst < dc->res_pool->res_cap->num_dwb); ASSERT(wb_info.dwb_pipe_inst < dc->res_pool->res_cap->num_dwb);
dwb = dc->res_pool->dwbc[wb_info.dwb_pipe_inst]; dwb = dc->res_pool->dwbc[wb_info.dwb_pipe_inst];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment