aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch97
1 files changed, 97 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch
new file mode 100644
index 00000000..5a361a0f
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3255-drm-amd-display-Synchronize-update-plane-addr-for-fr.patch
@@ -0,0 +1,97 @@
+From c751a0f0f48a40d8a30aea590e5206c1bdff0f1b Mon Sep 17 00:00:00 2001
+From: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>
+Date: Thu, 4 Jan 2018 14:29:58 -0500
+Subject: [PATCH 3255/4131] drm/amd/display: Synchronize update plane addr for
+ freesync
+
+Lock top_pipe when doing update plane addr for split pipe freesync case
+
+Signed-off-by: SivapiriyanKumarasamy <sivapiriyan.kumarasamy@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 47 +++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index b2595ce..0f3052d6 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1278,6 +1278,7 @@ static void commit_planes_for_stream(struct dc *dc,
+ struct dc_state *context)
+ {
+ int i, j;
++ struct pipe_ctx *top_pipe_to_program = NULL;
+
+ if (update_type == UPDATE_TYPE_FULL) {
+ dc->hwss.set_bandwidth(dc, context, false);
+@@ -1297,13 +1298,17 @@ static void commit_planes_for_stream(struct dc *dc,
+ for (j = 0; j < dc->res_pool->pipe_count; j++) {
+ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
+
+- if (update_type == UPDATE_TYPE_FAST || !pipe_ctx->plane_state)
+- continue;
+-
+ if (!pipe_ctx->top_pipe &&
+- pipe_ctx->stream &&
+- pipe_ctx->stream == stream) {
+- struct dc_stream_status *stream_status =
++ pipe_ctx->stream &&
++ pipe_ctx->stream == stream) {
++ struct dc_stream_status *stream_status = NULL;
++
++ top_pipe_to_program = pipe_ctx;
++
++ if (update_type == UPDATE_TYPE_FAST || !pipe_ctx->plane_state)
++ continue;
++
++ stream_status =
+ stream_get_status(context, pipe_ctx->stream);
+
+ dc->hwss.apply_ctx_for_surface(
+@@ -1314,22 +1319,32 @@ static void commit_planes_for_stream(struct dc *dc,
+ if (update_type == UPDATE_TYPE_FULL)
+ context_timing_trace(dc, &context->res_ctx);
+
+- /* Perform requested Updates */
+- for (i = 0; i < surface_count; i++) {
+- struct dc_plane_state *plane_state = srf_updates[i].surface;
++ /* Lock the top pipe while updating plane addrs, since freesync requires
++ * plane addr update event triggers to be synchronized.
++ * top_pipe_to_program is expected to never be NULL
++ */
++ if (update_type == UPDATE_TYPE_FAST) {
++ dc->hwss.pipe_control_lock(dc, top_pipe_to_program, true);
+
+- for (j = 0; j < dc->res_pool->pipe_count; j++) {
+- struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
++ /* Perform requested Updates */
++ for (i = 0; i < surface_count; i++) {
++ struct dc_plane_state *plane_state = srf_updates[i].surface;
+
+- if (pipe_ctx->stream != stream)
+- continue;
++ for (j = 0; j < dc->res_pool->pipe_count; j++) {
++ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[j];
+
+- if (pipe_ctx->plane_state != plane_state)
+- continue;
++ if (pipe_ctx->stream != stream)
++ continue;
++
++ if (pipe_ctx->plane_state != plane_state)
++ continue;
+
+- if (update_type == UPDATE_TYPE_FAST && srf_updates[i].flip_addr)
++ if (srf_updates[i].flip_addr)
+ dc->hwss.update_plane_addr(dc, pipe_ctx);
++ }
+ }
++
++ dc->hwss.pipe_control_lock(dc, top_pipe_to_program, false);
+ }
+
+ if (stream && stream_update && update_type > UPDATE_TYPE_FAST)
+--
+2.7.4
+