mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
drm/amd/display: treat plane clip size change as MED update type
[why] When clip size is changed recout and viewport size would require an update. When the update is clip size only current driver fails to program the update into hardware. [how] Set a new clip_size_change flag when it is detected and set MED update type and reprogram scaling params in next program pipe. Reviewed-by: Aric Cyr <aric.cyr@amd.com> Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com> Signed-off-by: Wenjing Liu <wenjing.liu@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
3a6a32b31a
commit
3667c4298b
|
|
@ -2454,6 +2454,10 @@ static enum surface_update_type get_scaling_info_update_type(
|
|||
/* Changing clip size of a large surface may result in MPC slice count change */
|
||||
update_flags->bits.bandwidth_change = 1;
|
||||
|
||||
if (u->scaling_info->clip_rect.width != u->surface->clip_rect.width ||
|
||||
u->scaling_info->clip_rect.height != u->surface->clip_rect.height)
|
||||
update_flags->bits.clip_size_change = 1;
|
||||
|
||||
if (u->scaling_info->src_rect.x != u->surface->src_rect.x
|
||||
|| u->scaling_info->src_rect.y != u->surface->src_rect.y
|
||||
|| u->scaling_info->clip_rect.x != u->surface->clip_rect.x
|
||||
|
|
@ -2467,7 +2471,8 @@ static enum surface_update_type get_scaling_info_update_type(
|
|||
|| update_flags->bits.scaling_change)
|
||||
return UPDATE_TYPE_FULL;
|
||||
|
||||
if (update_flags->bits.position_change)
|
||||
if (update_flags->bits.position_change ||
|
||||
update_flags->bits.clip_size_change)
|
||||
return UPDATE_TYPE_MED;
|
||||
|
||||
return UPDATE_TYPE_FAST;
|
||||
|
|
|
|||
|
|
@ -1252,6 +1252,7 @@ union surface_update_flags {
|
|||
uint32_t rotation_change:1;
|
||||
uint32_t swizzle_change:1;
|
||||
uint32_t scaling_change:1;
|
||||
uint32_t clip_size_change: 1;
|
||||
uint32_t position_change:1;
|
||||
uint32_t in_transfer_func_change:1;
|
||||
uint32_t input_csc_change:1;
|
||||
|
|
|
|||
|
|
@ -1740,6 +1740,7 @@ static void dcn20_update_dchubp_dpp(
|
|||
if (pipe_ctx->update_flags.bits.scaler ||
|
||||
plane_state->update_flags.bits.scaling_change ||
|
||||
plane_state->update_flags.bits.position_change ||
|
||||
plane_state->update_flags.bits.clip_size_change ||
|
||||
plane_state->update_flags.bits.per_pixel_alpha_change ||
|
||||
pipe_ctx->stream->update_flags.bits.scaling) {
|
||||
pipe_ctx->plane_res.scl_data.lb_params.alpha_en = pipe_ctx->plane_state->per_pixel_alpha;
|
||||
|
|
@ -1752,6 +1753,7 @@ static void dcn20_update_dchubp_dpp(
|
|||
if (pipe_ctx->update_flags.bits.viewport ||
|
||||
(context == dc->current_state && plane_state->update_flags.bits.position_change) ||
|
||||
(context == dc->current_state && plane_state->update_flags.bits.scaling_change) ||
|
||||
(context == dc->current_state && plane_state->update_flags.bits.clip_size_change) ||
|
||||
(context == dc->current_state && pipe_ctx->stream->update_flags.bits.scaling)) {
|
||||
|
||||
hubp->funcs->mem_program_viewport(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user