Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amd/display: Screen corruption on dual displays (DP+USB-C)

[why]
Current pipe merge and split logic only supports cases where new
dc_state is allocated and relies on dc->current_state to gather
information from previous dc_state.

Calls to validate_bandwidth on UPDATE_TYPE_MED would cause an issue
because there is no new dc_state allocated, and data in
dc->current_state would be overwritten during pipe merge.

[how]
Only allow validate_bandwidth when new dc_state space is created.

Signed-off-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Qingqing Zhuo and committed by
Alex Deucher
ce271b40 ccc87505

+7 -1
+1 -1
drivers/gpu/drm/amd/display/dc/core/dc.c
··· 2636 2636 2637 2637 copy_stream_update_to_stream(dc, context, stream, stream_update); 2638 2638 2639 - if (update_type > UPDATE_TYPE_FAST) { 2639 + if (update_type >= UPDATE_TYPE_FULL) { 2640 2640 if (!dc->res_pool->funcs->validate_bandwidth(dc, context, false)) { 2641 2641 DC_ERROR("Mode validation failed for stream update!\n"); 2642 2642 dc_release_state(context);
+3
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
··· 3209 3209 context->bw_ctx.dml.soc.allow_dram_clock_one_display_vactive = 3210 3210 dc->debug.enable_dram_clock_change_one_display_vactive; 3211 3211 3212 + /*Unsafe due to current pipe merge and split logic*/ 3213 + ASSERT(context != dc->current_state); 3214 + 3212 3215 if (fast_validate) { 3213 3216 return dcn20_validate_bandwidth_internal(dc, context, true); 3214 3217 }
+3
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c
··· 1184 1184 1185 1185 BW_VAL_TRACE_COUNT(); 1186 1186 1187 + /*Unsafe due to current pipe merge and split logic*/ 1188 + ASSERT(context != dc->current_state); 1189 + 1187 1190 out = dcn20_fast_validate_bw(dc, context, pipes, &pipe_cnt, pipe_split_from, &vlevel); 1188 1191 1189 1192 if (pipe_cnt == 0)