]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
drm/amd/display: Added timing sync trace.
authorYongqiang Sun <yongqiang.sun@amd.com>
Thu, 8 Dec 2016 14:47:11 +0000 (09:47 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 26 Sep 2017 21:04:45 +0000 (17:04 -0400)
Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/core/dc_debug.c
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
drivers/gpu/drm/amd/display/include/logger_interface.h

index 8e1d695fcb771251894a4105f01c2c12198ffb89..de99d71f904250a38fff125bb4b8c50b40f51eaf 100644 (file)
@@ -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--) {
index 8ca0f1e0369a5712867ca74bd72e8d2ed3813248..78b8e0c5b4e7ada3179fd60b272e2b76fdc4abfc 100644 (file)
                                        ##__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);
+       }
+}
index e1f2434ee95e8b72f7aa8ec741e740addf2347e9..bb7cdde3e37bc2ef0abfff211c2608120f04f2e1 100644 (file)
@@ -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;
index 6ad23f327631f281f366c92b5a2ea57a2dd1f12d..99937facf645af395a7f182361e1610bc6d766b3 100644 (file)
@@ -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)
index b58d30de8293c7d1b636ad5719f339c9ae9399e5..08a6911d3a3aceb0c99c8402b9a1fc7b4b3f8d9f 100644 (file)
@@ -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.