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)
committerDave Airlie <airlied@redhat.com>
Fri, 20 Jul 2012 01:54:32 +0000 (21:54 -0400)
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

Cc: stable@vger.kernel.org
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>
drivers/gpu/drm/radeon/radeon_cursor.c

index 42acc6449dd622e702cfb8e8e576023a1e8338a2..711e95ad39bfd600de1be7f94373dc57512ef820 100644 (file)
@@ -262,8 +262,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);
+                               }
+                       }
                }
        }