aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch130
1 files changed, 130 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch
new file mode 100644
index 00000000..5b0387e8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0056-drm-amd-display-Added-timing-sync-trace.patch
@@ -0,0 +1,130 @@
+From 8621808029f8a9d604aaabc934e4dc25847381b4 Mon Sep 17 00:00:00 2001
+From: Yongqiang Sun <yongqiang.sun@amd.com>
+Date: Thu, 8 Dec 2016 09:47:11 -0500
+Subject: [PATCH 0056/4131] drm/amd/display: Added timing sync trace.
+
+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 | 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 8e1d695..de99d71 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 8ca0f1e..78b8e0c 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 5f60800..454485b 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 6ad23f3..99937fa 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 b58d30d..08a6911 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.7.4
+