drm/i915/skl: Take 90/270 rotation into account in watermark calculations
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>
Mon, 23 Mar 2015 11:10:38 +0000 (11:10 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 23 Mar 2015 14:09:33 +0000 (15:09 +0100)
v2: Pass in rotation info to sprite plane updates as well.

v3: Use helper to determine 90/270 rotation. (Michel Thierry)

v4: Rebased for fb modifiers and atomic changes.

For: VIZ-4546
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Michel Thierry <michel.thierry@intel.com> (v3)
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_pm.c
drivers/gpu/drm/i915/intel_sprite.c

index d1f9099..35cdb48 100644 (file)
@@ -12033,6 +12033,28 @@ static void intel_shared_dpll_init(struct drm_device *dev)
        BUG_ON(dev_priv->num_shared_dpll > I915_NUM_PLLS);
 }
 
+/**
+ * intel_wm_need_update - Check whether watermarks need updating
+ * @plane: drm plane
+ * @state: new plane state
+ *
+ * Check current plane state versus the new one to determine whether
+ * watermarks need to be recalculated.
+ *
+ * Returns true or false.
+ */
+bool intel_wm_need_update(struct drm_plane *plane,
+                         struct drm_plane_state *state)
+{
+       /* Update watermarks on tiling changes. */
+       if (!plane->state->fb || !state->fb ||
+           plane->state->fb->modifier[0] != state->fb->modifier[0] ||
+           plane->state->rotation != state->rotation)
+               return true;
+
+       return false;
+}
+
 /**
  * intel_prepare_plane_fb - Prepare fb for usage on plane
  * @plane: drm plane to prepare for
@@ -12179,10 +12201,7 @@ intel_check_primary_plane(struct drm_plane *plane,
 
                intel_crtc->atomic.update_fbc = true;
 
-               /* Update watermarks on tiling changes. */
-               if (!plane->state->fb || !state->base.fb ||
-                   plane->state->fb->modifier[0] !=
-                   state->base.fb->modifier[0])
+               if (intel_wm_need_update(plane, &state->base))
                        intel_crtc->atomic.update_wm = true;
        }
 
Simple merge
Simple merge
Simple merge