OSDN Git Service

drm/amd/display: Force watermark value propagation
authorJoshua Aberback <joshua.aberback@amd.com>
Mon, 30 Mar 2020 19:49:02 +0000 (15:49 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 22 Apr 2020 22:11:47 +0000 (18:11 -0400)
[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>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/hw/dchubbub.h

index 7e65c77..efc7fb4 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 f5dd0cc..47a566d 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 {