]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/amd/display: Indicate dsc updates explicitly
authorAnthony Koo <Anthony.Koo@amd.com>
Tue, 14 Jan 2020 22:02:09 +0000 (17:02 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jun 2020 06:23:22 +0000 (08:23 +0200)
[ 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
drivers/gpu/drm/amd/display/dc/dc_stream.h

index 66be2920fab0e99981de5db810bc9842e95b4615..2667691ba2aae048eed961937c2e29bb873bed29 100644 (file)
@@ -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);
index 92096de79dec14d1f2af98572249d490acd91c35..a5c7ef47b8d3c7d680ebe54e70c273323c2c8a6d 100644 (file)
@@ -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;