drm/radeon: Try harder to avoid HW cursor ending on a multiple of 128 columns.
authorMichel Dänzer <michel.daenzer@amd.com>
Tue, 17 Jul 2012 17:02:09 +0000 (19:02 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Aug 2012 15:27:50 +0000 (08:27 -0700)
commit f60ec4c7df043df81e62891ac45383d012afe0da upstream.

This could previously fail if either of the enabled displays was using a
horizontal resolution that is a multiple of 128, and only the leftmost column
of the cursor was (supposed to be) visible at the right edge of that display.

The solution is to move the cursor one pixel to the left in that case.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=33183

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/radeon/radeon_cursor.c

index 3fb222615c6fcda57c551f0af055f16e3b125d2d..72f749d56c1268f76ae4d9b7541b812f3cab71ac 100644 (file)
@@ -257,8 +257,14 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,
                                if (!(cursor_end & 0x7f))
                                        w--;
                        }
-                       if (w <= 0)
+                       if (w <= 0) {
                                w = 1;
+                               cursor_end = x - xorigin + w;
+                               if (!(cursor_end & 0x7f)) {
+                                       x--;
+                                       WARN_ON_ONCE(x < 0);
+                               }
+                       }
                }
        }