From: Yongqiang Sun <yongqiang.sun@xxxxxxx> Change-Id: I5dcb31efb2f894fbd5ac3c169fe1eda81fc585e0 Signed-off-by: Yongqiang Sun <yongqiang.sun at amd.com> Reviewed-by: Tony Cheng <Tony.Cheng at amd.com> Acked-by: Harry Wentland <Harry.Wentland at amd.com> --- drivers/gpu/drm/amd/display/dc/core/dc.c | 4 ++- drivers/gpu/drm/amd/display/dc/core/dc_debug.c | 32 ++++++++++++++++++++++ drivers/gpu/drm/amd/display/dc/dc.h | 1 + .../amd/display/dc/dce110/dce110_hw_sequencer.c | 1 - .../gpu/drm/amd/display/include/logger_interface.h | 5 ++++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index 8e1d695fcb77..de99d71f9042 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -1488,8 +1488,10 @@ void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *upda core_dc->hwss.prepare_pipe_for_context( core_dc, pipe_ctx, context); } - if (apply_ctx) + if (apply_ctx) { core_dc->hwss.apply_ctx_for_surface(core_dc, surface, context); + context_timing_trace(dc, &context->res_ctx); + } } for (i = context->res_ctx.pool->pipe_count - 1; i >= 0; i--) { diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c index 8ca0f1e0369a..78b8e0c5b4e7 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_debug.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_debug.c @@ -22,6 +22,13 @@ ##__VA_ARGS__); \ } while (0) +#define TIMING_TRACE(...) do {\ + if (dc->debug.timing_trace) \ + dm_logger_write(logger, \ + LOG_SYNC, \ + ##__VA_ARGS__); \ +} while (0) + void pre_surface_trace( const struct dc *dc, const struct dc_surface *const *surfaces, @@ -268,3 +275,28 @@ void post_surface_trace(const struct dc *dc) SURFACE_TRACE("post surface process.\n"); } + +void context_timing_trace( + const struct dc *dc, + struct resource_context *res_ctx) +{ + int i; + struct core_dc *core_dc = DC_TO_CORE(dc); + struct dal_logger *logger = core_dc->ctx->logger; + + for (i = 0; i < core_dc->res_pool->pipe_count; i++) { + struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i]; + int h_pos = 0; + int v_pos = 0; + + if (pipe_ctx->stream == NULL) + continue; + + pipe_ctx->tg->funcs->get_position(pipe_ctx->tg, &h_pos, &v_pos); + TIMING_TRACE("Pipe_%d H_tot:%d V_tot:%d H_pos:%d V_pos:%d\n", + pipe_ctx->pipe_idx, + pipe_ctx->stream->public.timing.h_total, + pipe_ctx->stream->public.timing.v_total, + h_pos, v_pos); + } +} diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index 5f608009b794..454485b97852 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -140,6 +140,7 @@ struct dc_debug { bool max_disp_clk; bool target_trace; bool surface_trace; + bool timing_trace; bool validation_trace; bool disable_stutter; bool disable_dcc; diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c index 6ad23f327631..99937facf645 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c @@ -1892,7 +1892,6 @@ static void dce110_apply_ctx_for_surface( program_blender(dc, pipe_ctx); } - } static void dce110_power_down_fe(struct core_dc *dc, struct pipe_ctx *pipe) diff --git a/drivers/gpu/drm/amd/display/include/logger_interface.h b/drivers/gpu/drm/amd/display/include/logger_interface.h index b58d30de8293..08a6911d3a3a 100644 --- a/drivers/gpu/drm/amd/display/include/logger_interface.h +++ b/drivers/gpu/drm/amd/display/include/logger_interface.h @@ -31,6 +31,7 @@ struct dc_context; struct dc_link; struct dc_surface_update; +struct resource_context; /* * @@ -85,6 +86,10 @@ void update_surface_trace( void post_surface_trace(const struct dc *dc); +void context_timing_trace( + const struct dc *dc, + struct resource_context *res_ctx); + /* Any function which is empty or have incomplete implementation should be * marked by this macro. -- 2.9.3