| From ac56f2b4125bfc6514350c06db398c79894f8944 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 14 Jan 2020 17:02:09 -0500 |
| Subject: drm/amd/display: Indicate dsc updates explicitly |
| |
| From: Anthony Koo <Anthony.Koo@amd.com> |
| |
| [ Upstream commit acdac228c4d1b9ff8ac778835719d3381c198aad ] |
| |
| [Why] |
| DSC updates only set type to FULL UPDATE, but doesn't |
| flag the change |
| |
| [How] |
| Add DSC flag update flag |
| |
| Signed-off-by: Anthony Koo <Anthony.Koo@amd.com> |
| Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> |
| Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@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/core/dc.c | 19 ++++++++++++------- |
| drivers/gpu/drm/amd/display/dc/dc_stream.h | 1 + |
| 2 files changed, 13 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c |
| index 66be2920fab0..2667691ba2aa 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/core/dc.c |
| +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c |
| @@ -1745,14 +1745,15 @@ static enum surface_update_type check_update_surfaces_for_stream( |
| |
| if (stream_update->wb_update) |
| su_flags->bits.wb_update = 1; |
| + |
| + if (stream_update->dsc_config) |
| + su_flags->bits.dsc_changed = 1; |
| + |
| if (su_flags->raw != 0) |
| overall_type = UPDATE_TYPE_FULL; |
| |
| if (stream_update->output_csc_transform || stream_update->output_color_space) |
| su_flags->bits.out_csc = 1; |
| - |
| - if (stream_update->dsc_config) |
| - overall_type = UPDATE_TYPE_FULL; |
| } |
| |
| for (i = 0 ; i < surface_count; i++) { |
| @@ -1787,8 +1788,11 @@ enum surface_update_type dc_check_update_surfaces_for_stream( |
| |
| type = check_update_surfaces_for_stream(dc, updates, surface_count, stream_update, stream_status); |
| if (type == UPDATE_TYPE_FULL) { |
| - if (stream_update) |
| + if (stream_update) { |
| + uint32_t dsc_changed = stream_update->stream->update_flags.bits.dsc_changed; |
| stream_update->stream->update_flags.raw = 0xFFFFFFFF; |
| + stream_update->stream->update_flags.bits.dsc_changed = dsc_changed; |
| + } |
| for (i = 0; i < surface_count; i++) |
| updates[i].surface->update_flags.raw = 0xFFFFFFFF; |
| } |
| @@ -2104,14 +2108,15 @@ static void commit_planes_do_stream_update(struct dc *dc, |
| } |
| } |
| |
| + /* Full fe update*/ |
| + if (update_type == UPDATE_TYPE_FAST) |
| + continue; |
| + |
| if (stream_update->dsc_config && dc->hwss.pipe_control_lock_global) { |
| dc->hwss.pipe_control_lock_global(dc, pipe_ctx, true); |
| dp_update_dsc_config(pipe_ctx); |
| dc->hwss.pipe_control_lock_global(dc, pipe_ctx, false); |
| } |
| - /* Full fe update*/ |
| - if (update_type == UPDATE_TYPE_FAST) |
| - continue; |
| |
| if (stream_update->dpms_off) { |
| dc->hwss.pipe_control_lock(dc, pipe_ctx, true); |
| diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h |
| index 92096de79dec..a5c7ef47b8d3 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/dc_stream.h |
| +++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h |
| @@ -118,6 +118,7 @@ union stream_update_flags { |
| uint32_t dpms_off:1; |
| uint32_t gamut_remap:1; |
| uint32_t wb_update:1; |
| + uint32_t dsc_changed : 1; |
| } bits; |
| |
| uint32_t raw; |
| -- |
| 2.25.1 |
| |