Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull the intel i915 hibernation memory corruption fix from Dave Airlie: "I tracked down the misc memory corruption after i915 hibernate to the blinking fbcon cursor, and realised the i915 driver wasn't doing the fbdev suspend/resume calls at all. nouveau and radeon have done these calls for a long time. This has been fairly well tested and is definitely the main culprit in hibernate not working." Yay. * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm/i915: suspend fbdev device around suspend/hibernate
This commit is contained in:
commit
0a03726ca9
3 changed files with 18 additions and 1 deletions
|
@ -467,6 +467,10 @@ static int i915_drm_freeze(struct drm_device *dev)
|
|||
/* Modeset on resume, not lid events */
|
||||
dev_priv->modeset_on_lid = 0;
|
||||
|
||||
console_lock();
|
||||
intel_fbdev_set_suspend(dev, 1);
|
||||
console_unlock();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -539,6 +543,9 @@ static int i915_drm_thaw(struct drm_device *dev)
|
|||
|
||||
dev_priv->modeset_on_lid = 0;
|
||||
|
||||
console_lock();
|
||||
intel_fbdev_set_suspend(dev, 0);
|
||||
console_unlock();
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
|
@ -382,7 +382,7 @@ extern int intel_framebuffer_init(struct drm_device *dev,
|
|||
struct drm_i915_gem_object *obj);
|
||||
extern int intel_fbdev_init(struct drm_device *dev);
|
||||
extern void intel_fbdev_fini(struct drm_device *dev);
|
||||
|
||||
extern void intel_fbdev_set_suspend(struct drm_device *dev, int state);
|
||||
extern void intel_prepare_page_flip(struct drm_device *dev, int plane);
|
||||
extern void intel_finish_page_flip(struct drm_device *dev, int pipe);
|
||||
extern void intel_finish_page_flip_plane(struct drm_device *dev, int plane);
|
||||
|
|
|
@ -254,6 +254,16 @@ void intel_fbdev_fini(struct drm_device *dev)
|
|||
kfree(dev_priv->fbdev);
|
||||
dev_priv->fbdev = NULL;
|
||||
}
|
||||
|
||||
void intel_fbdev_set_suspend(struct drm_device *dev, int state)
|
||||
{
|
||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||
if (!dev_priv->fbdev)
|
||||
return;
|
||||
|
||||
fb_set_suspend(dev_priv->fbdev->helper.fbdev, state);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL and additional rights");
|
||||
|
||||
void intel_fb_output_poll_changed(struct drm_device *dev)
|
||||
|
|
Loading…
Reference in a new issue