]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amd/display: Force watermark value propagation
authorJoshua Aberback <joshua.aberback@amd.com>
Mon, 30 Mar 2020 19:49:02 +0000 (15:49 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 22 Jun 2020 07:32:17 +0000 (09:32 +0200)
[ Upstream commit 868149c9a072cbdc22a73ce25a487f9fbfa171ef ]

[Why]
The HUBBUB watermark registers are in an area that cannot be power
gated, but the HUBP copies of the watermark values are in areas that can
be power gated. When we power on a pipe, it will not automatically take
the HUBBUB values, we need to force propagation by writing to a
watermark register.

[How]
 - new HUBBUB function to re-write current value in a WM register
 - touch WM register after enabling the plane in program_pipe

Signed-off-by: Joshua Aberback <joshua.aberback@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@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/dcn20/dcn20_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h

index a023a4d59f412ed76cb1fc8308c358c8925f8711..c4fa13e4eaf960adeb6bc524baccc4c8f1765bd6 100644 (file)
@@ -1478,8 +1478,11 @@ static void dcn20_program_pipe(
        if (pipe_ctx->update_flags.bits.odm)
                hws->funcs.update_odm(dc, context, pipe_ctx);
 
-       if (pipe_ctx->update_flags.bits.enable)
+       if (pipe_ctx->update_flags.bits.enable) {
                dcn20_enable_plane(dc, pipe_ctx, context);
+               if (dc->res_pool->hubbub->funcs->force_wm_propagate_to_pipes)
+                       dc->res_pool->hubbub->funcs->force_wm_propagate_to_pipes(dc->res_pool->hubbub);
+       }
 
        if (pipe_ctx->update_flags.raw || pipe_ctx->plane_state->update_flags.raw || pipe_ctx->stream->update_flags.raw)
                dcn20_update_dchubp_dpp(dc, pipe_ctx, context);
index f5dd0cc73c63a9116b03f996a126649891ba96f6..47a566d82d6e4b79890a14ee517ba5c0b5a47f51 100644 (file)
@@ -144,6 +144,8 @@ struct hubbub_funcs {
        void (*allow_self_refresh_control)(struct hubbub *hubbub, bool allow);
 
        void (*apply_DEDCN21_147_wa)(struct hubbub *hubbub);
+
+       void (*force_wm_propagate_to_pipes)(struct hubbub *hubbub);
 };
 
 struct hubbub {