ydrm/vc4: fkms: Fix margin calculations for the right/bottom edges
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Mon, 12 Jul 2021 12:06:07 +0000 (13:06 +0100)
committerPhil Elwell <8911409+pelwell@users.noreply.github.com>
Mon, 12 Jul 2021 13:27:27 +0000 (14:27 +0100)
The calculations clipped the right/bottom edge of the clipped
range based on the left/top margins.

https://github.com/raspberrypi/linux/issues/4447

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/gpu/drm/vc4/vc4_firmware_kms.c

index e643bbe..d6d50b5 100644 (file)
@@ -458,15 +458,15 @@ static int vc4_fkms_margins_adj(struct drm_plane_state *pstate,
        plane->dst_x = DIV_ROUND_CLOSEST(plane->dst_x * adjhdisplay,
                                         (int)crtc_state->mode.hdisplay);
        plane->dst_x += left;
-       if (plane->dst_x > (int)(crtc_state->mode.hdisplay - left))
-               plane->dst_x = crtc_state->mode.hdisplay - left;
+       if (plane->dst_x > (int)(crtc_state->mode.hdisplay - right))
+               plane->dst_x = crtc_state->mode.hdisplay - right;
 
        adjvdisplay = crtc_state->mode.vdisplay - (top + bottom);
        plane->dst_y = DIV_ROUND_CLOSEST(plane->dst_y * adjvdisplay,
                                         (int)crtc_state->mode.vdisplay);
        plane->dst_y += top;
-       if (plane->dst_y > (int)(crtc_state->mode.vdisplay - top))
-               plane->dst_y = crtc_state->mode.vdisplay - top;
+       if (plane->dst_y > (int)(crtc_state->mode.vdisplay - bottom))
+               plane->dst_y = crtc_state->mode.vdisplay - bottom;
 
        plane->dst_w = DIV_ROUND_CLOSEST(plane->dst_w * adjhdisplay,
                                         crtc_state->mode.hdisplay);