mirror of https://gitee.com/openkylin/linux.git
drm/i915: Another fbdev hack to avoid PSR on fbcon.
With unified modeset and flip paths introduced recently when switching
to fbcon PSR was being disabled on fb_set_par path but re-enabled on
fb_pan_display one, causing missed screen updates and un unusable
console.
Regression introduced with:
commit bb54662350
Author: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Date: Tue Apr 21 17:13:13 2015 +0300
drm/i915: Unify modeset and flip paths of intel_crtc_set_config()
Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
2d847d45b2
commit
d9a946b523
|
@ -96,6 +96,32 @@ static int intel_fbdev_blank(int blank, struct fb_info *info)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int intel_fbdev_pan_display(struct fb_var_screeninfo *var,
|
||||||
|
struct fb_info *info)
|
||||||
|
{
|
||||||
|
struct drm_fb_helper *fb_helper = info->par;
|
||||||
|
struct intel_fbdev *ifbdev =
|
||||||
|
container_of(fb_helper, struct intel_fbdev, helper);
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
ret = drm_fb_helper_pan_display(var, info);
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
/*
|
||||||
|
* FIXME: fbdev presumes that all callbacks also work from
|
||||||
|
* atomic contexts and relies on that for emergency oops
|
||||||
|
* printing. KMS totally doesn't do that and the locking here is
|
||||||
|
* by far not the only place this goes wrong. Ignore this for
|
||||||
|
* now until we solve this for real.
|
||||||
|
*/
|
||||||
|
mutex_lock(&fb_helper->dev->struct_mutex);
|
||||||
|
intel_fb_obj_invalidate(ifbdev->fb->obj, NULL, ORIGIN_GTT);
|
||||||
|
mutex_unlock(&fb_helper->dev->struct_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static struct fb_ops intelfb_ops = {
|
static struct fb_ops intelfb_ops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.fb_check_var = drm_fb_helper_check_var,
|
.fb_check_var = drm_fb_helper_check_var,
|
||||||
|
@ -103,7 +129,7 @@ static struct fb_ops intelfb_ops = {
|
||||||
.fb_fillrect = cfb_fillrect,
|
.fb_fillrect = cfb_fillrect,
|
||||||
.fb_copyarea = cfb_copyarea,
|
.fb_copyarea = cfb_copyarea,
|
||||||
.fb_imageblit = cfb_imageblit,
|
.fb_imageblit = cfb_imageblit,
|
||||||
.fb_pan_display = drm_fb_helper_pan_display,
|
.fb_pan_display = intel_fbdev_pan_display,
|
||||||
.fb_blank = intel_fbdev_blank,
|
.fb_blank = intel_fbdev_blank,
|
||||||
.fb_setcmap = drm_fb_helper_setcmap,
|
.fb_setcmap = drm_fb_helper_setcmap,
|
||||||
.fb_debug_enter = drm_fb_helper_debug_enter,
|
.fb_debug_enter = drm_fb_helper_debug_enter,
|
||||||
|
|
Loading…
Reference in New Issue