drm/amd/display: get tail pipe before aquire free pipe
authorEric Bernstein <eric.bernstein@amd.com>
Mon, 29 Oct 2018 20:05:47 +0000 (16:05 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 19 Nov 2018 20:27:40 +0000 (15:27 -0500)
[Why]
For some complicated blending transition cases, the head
pipe of the second stream may end up being a higher pipe
index than the free pipe.  In those cases dc_add_plane_to_context
will incorrectly set the tail_pipe to the free pipe, which
will cause the top_pipe and bottom_pipe to be the same

[How]
Move the call to resource_get_tail_pipe_for_stream() to be
before call to acquire_free_pipe_for_stream().

Signed-off-by: Eric Bernstein <eric.bernstein@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c

index 0a1985c..0bb844a 100644 (file)
@@ -1182,6 +1182,9 @@ bool dc_add_plane_to_context(
                return false;
        }
 
+       tail_pipe = resource_get_tail_pipe_for_stream(&context->res_ctx, stream);
+       ASSERT(tail_pipe);
+
        free_pipe = acquire_free_pipe_for_stream(context, pool, stream);
 
 #if defined(CONFIG_DRM_AMD_DC_DCN1_0)
@@ -1199,10 +1202,6 @@ bool dc_add_plane_to_context(
        free_pipe->plane_state = plane_state;
 
        if (head_pipe != free_pipe) {
-
-               tail_pipe = resource_get_tail_pipe_for_stream(&context->res_ctx, stream);
-               ASSERT(tail_pipe);
-
                free_pipe->stream_res.tg = tail_pipe->stream_res.tg;
                free_pipe->stream_res.abm = tail_pipe->stream_res.abm;
                free_pipe->stream_res.opp = tail_pipe->stream_res.opp;