drm/i915: Unset cursor if out-of-bounds upon mode change (v4)
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 9 Jul 2010 07:45:04 +0000 (08:45 +0100)
committerEric Anholt <eric@anholt.net>
Mon, 2 Aug 2010 02:58:28 +0000 (19:58 -0700)
commitcda4b7d3a5b1dcbc0d8e7bad52134347798e9047
tree100b176cd81d7cdf16c546b19ece124ab6a2588e
parent86f100b136626e91f4f66f3776303475e2e58998
drm/i915: Unset cursor if out-of-bounds upon mode change (v4)

The docs warn that to position the cursor such that no part of it is
visible on the pipe is an undefined operation. Avoid such circumstances
upon changing the mode, or at any other time, by unsetting the cursor if
it moves out of bounds.

"For normal high resolution display modes, the cursor must have at least a
single pixel positioned over the active screen.” (p143, p148 of the hardware
registers docs).

Fixes:

  Bug 24748 - [965G] Graphics crashes when resolution is changed with KMS
              enabled
  https://bugs.freedesktop.org/show_bug.cgi?id=24748

v2: Only update the cursor registers if they change.
v3: Fix the unsigned comparision of x,y against width,height.
v4: Always set CUR.BASE or else the cursor may become corrupt.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reported-by: Christian Eggers <ceggers@gmx.de>
Cc: Christopher James Halse Rogers <chalserogers@gmail.com>
Cc: stable@kernel.org
Signed-off-by: Eric Anholt <eric@anholt.net>
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h