| From 1ffc5289bfcf7f4c4e4213240bb4be68c48ce603 Mon Sep 17 00:00:00 2001 |
| From: Jani Nikula <jani.nikula@intel.com> |
| Date: Tue, 7 May 2013 18:54:05 +0300 |
| Subject: drm/i915: clear the stolen fb before resuming |
| |
| From: Jani Nikula <jani.nikula@intel.com> |
| |
| commit 1ffc5289bfcf7f4c4e4213240bb4be68c48ce603 upstream. |
| |
| Similar to |
| commit 88afe715dd5469bc24ca7a19ac62dd3c241cab48 |
| Author: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Sun Dec 16 12:15:41 2012 +0000 |
| |
| drm/i915: Clear the stolen fb before enabling |
| |
| but on the resume path. |
| |
| Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=57191 |
| Reported-and-tested-by: Nikolay Amiantov <nikoamia@gmail.com> |
| Signed-off-by: Jani Nikula <jani.nikula@intel.com> |
| Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/i915/intel_fb.c | 16 ++++++++++++++-- |
| 1 file changed, 14 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/intel_fb.c |
| +++ b/drivers/gpu/drm/i915/intel_fb.c |
| @@ -261,10 +261,22 @@ void intel_fbdev_fini(struct drm_device |
| void intel_fbdev_set_suspend(struct drm_device *dev, int state) |
| { |
| drm_i915_private_t *dev_priv = dev->dev_private; |
| - if (!dev_priv->fbdev) |
| + struct intel_fbdev *ifbdev = dev_priv->fbdev; |
| + struct fb_info *info; |
| + |
| + if (!ifbdev) |
| return; |
| |
| - fb_set_suspend(dev_priv->fbdev->helper.fbdev, state); |
| + info = ifbdev->helper.fbdev; |
| + |
| + /* On resume from hibernation: If the object is shmemfs backed, it has |
| + * been restored from swap. If the object is stolen however, it will be |
| + * full of whatever garbage was left in there. |
| + */ |
| + if (!state && ifbdev->ifb.obj->stolen) |
| + memset_io(info->screen_base, 0, info->screen_size); |
| + |
| + fb_set_suspend(info, state); |
| } |
| |
| MODULE_LICENSE("GPL and additional rights"); |