drm/amd/display: Fix ODM policy implementation
authorWesley Chalmers <Wesley.Chalmers@amd.com>
Tue, 8 Sep 2020 20:22:25 +0000 (16:22 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 22 Sep 2020 16:27:52 +0000 (12:27 -0400)
[WHY]
Only the leftmost ODM pipe should be offset when scaling. A previous
code change was intended to implement this policy, but a section of code
was overlooked.

Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: <stable@vger.kernel.org>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c

index 4cea934..e430148 100644 (file)
@@ -785,14 +785,15 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx)
        /*
         * Only the leftmost ODM pipe should be offset by a nonzero distance
         */
-       if (!pipe_ctx->prev_odm_pipe)
+       if (!pipe_ctx->prev_odm_pipe) {
                data->recout.x = stream->dst.x;
-       else
-               data->recout.x = 0;
-       if (stream->src.x < surf_clip.x)
-               data->recout.x += (surf_clip.x - stream->src.x) * stream->dst.width
+               if (stream->src.x < surf_clip.x)
+                       data->recout.x += (surf_clip.x - stream->src.x) * stream->dst.width
                                                / stream->src.width;
 
+       } else
+               data->recout.x = 0;
+
        data->recout.width = surf_clip.width * stream->dst.width / stream->src.width;
        if (data->recout.width + data->recout.x > stream->dst.x + stream->dst.width)
                data->recout.width = stream->dst.x + stream->dst.width - data->recout.x;