]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/gpu/drm/drm_fb_helper.c
drm/i915: Apply the g4x TLB miss w/a to SR watermarks as well
[mirror_ubuntu-bionic-kernel.git] / drivers / gpu / drm / drm_fb_helper.c
index 9147abb774e802c86c5baba7d8474096c99765bd..a0ea3241c65117ad056a67c8d3be17af317d80c5 100644 (file)
@@ -256,7 +256,8 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
        g_base = r_base + crtc->gamma_size;
        b_base = g_base + crtc->gamma_size;
 
-       crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
+       crtc->funcs->gamma_set(crtc, r_base, g_base, b_base,
+                              crtc->gamma_size, NULL);
 }
 
 /**
@@ -417,17 +418,12 @@ backoff:
        goto retry;
 }
 
-static int restore_fbdev_mode(struct drm_fb_helper *fb_helper)
+static int restore_fbdev_mode_legacy(struct drm_fb_helper *fb_helper)
 {
        struct drm_device *dev = fb_helper->dev;
        struct drm_plane *plane;
        int i;
 
-       drm_warn_on_modeset_not_all_locked(dev);
-
-       if (drm_drv_uses_atomic_modeset(dev))
-               return restore_fbdev_mode_atomic(fb_helper);
-
        drm_for_each_plane(plane, dev) {
                if (plane->type != DRM_PLANE_TYPE_PRIMARY)
                        drm_plane_force_disable(plane);
@@ -461,6 +457,18 @@ static int restore_fbdev_mode(struct drm_fb_helper *fb_helper)
        return 0;
 }
 
+static int restore_fbdev_mode(struct drm_fb_helper *fb_helper)
+{
+       struct drm_device *dev = fb_helper->dev;
+
+       drm_warn_on_modeset_not_all_locked(dev);
+
+       if (drm_drv_uses_atomic_modeset(dev))
+               return restore_fbdev_mode_atomic(fb_helper);
+       else
+               return restore_fbdev_mode_legacy(fb_helper);
+}
+
 /**
  * drm_fb_helper_restore_fbdev_mode_unlocked - restore fbdev configuration
  * @fb_helper: fbcon to restore
@@ -1512,34 +1520,14 @@ backoff:
        goto retry;
 }
 
-/**
- * drm_fb_helper_pan_display - implementation for &fb_ops.fb_pan_display
- * @var: updated screen information
- * @info: fbdev registered by the helper
- */
-int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
+static int pan_display_legacy(struct fb_var_screeninfo *var,
                              struct fb_info *info)
 {
        struct drm_fb_helper *fb_helper = info->par;
-       struct drm_device *dev = fb_helper->dev;
        struct drm_mode_set *modeset;
        int ret = 0;
        int i;
 
-       if (oops_in_progress)
-               return -EBUSY;
-
-       drm_modeset_lock_all(dev);
-       if (!drm_fb_helper_is_bound(fb_helper)) {
-               drm_modeset_unlock_all(dev);
-               return -EBUSY;
-       }
-
-       if (drm_drv_uses_atomic_modeset(dev)) {
-               ret = pan_display_atomic(var, info);
-               goto unlock;
-       }
-
        for (i = 0; i < fb_helper->crtc_count; i++) {
                modeset = &fb_helper->crtc_info[i].mode_set;
 
@@ -1554,8 +1542,37 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
                        }
                }
        }
-unlock:
+
+       return ret;
+}
+
+/**
+ * drm_fb_helper_pan_display - implementation for &fb_ops.fb_pan_display
+ * @var: updated screen information
+ * @info: fbdev registered by the helper
+ */
+int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
+                             struct fb_info *info)
+{
+       struct drm_fb_helper *fb_helper = info->par;
+       struct drm_device *dev = fb_helper->dev;
+       int ret;
+
+       if (oops_in_progress)
+               return -EBUSY;
+
+       drm_modeset_lock_all(dev);
+       if (!drm_fb_helper_is_bound(fb_helper)) {
+               drm_modeset_unlock_all(dev);
+               return -EBUSY;
+       }
+
+       if (drm_drv_uses_atomic_modeset(dev))
+               ret = pan_display_atomic(var, info);
+       else
+               ret = pan_display_legacy(var, info);
        drm_modeset_unlock_all(dev);
+
        return ret;
 }
 EXPORT_SYMBOL(drm_fb_helper_pan_display);