drm/i915: Fix gen3 physical cursor alignment requirements
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 27 Mar 2017 18:55:43 +0000 (21:55 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 10 May 2017 16:28:34 +0000 (19:28 +0300)
Bspec tells us that gen3 platforms need 4KiB alignment for CURBASE
rather than the 256 byte alignment required by i85x. Let's fix that
and pull the code to determine the correct alignment to a helper
function.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170327185546.2977-13-ville.syrjala@linux.intel.com
Reviewed-by: Imre Deak <imre.deak@intel.com>
drivers/gpu/drm/i915/intel_display.c

index f0f38c1960dae252ee8e8bf30163f20ef532a2a7..d275b728c03a1df9ec4f2454f90dce103dce763d 100644 (file)
@@ -2084,6 +2084,16 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
        }
 }
 
+static unsigned int intel_cursor_alignment(const struct drm_i915_private *dev_priv)
+{
+       if (IS_I830(dev_priv))
+               return 16 * 1024;
+       else if (IS_I85X(dev_priv))
+               return 256;
+       else
+               return 4 * 1024;
+}
+
 static unsigned int intel_linear_alignment(const struct drm_i915_private *dev_priv)
 {
        if (INTEL_INFO(dev_priv)->gen >= 9)
@@ -13306,7 +13316,7 @@ intel_prepare_plane_fb(struct drm_plane *plane,
        if (obj) {
                if (plane->type == DRM_PLANE_TYPE_CURSOR &&
                    INTEL_INFO(dev_priv)->cursor_needs_physical) {
-                       const int align = IS_I830(dev_priv) ? 16 * 1024 : 256;
+                       const int align = intel_cursor_alignment(dev_priv);
 
                        ret = i915_gem_object_attach_phys(obj, align);
                        if (ret) {
@@ -13619,7 +13629,7 @@ intel_legacy_cursor_update(struct drm_plane *plane,
                goto out_free;
 
        if (INTEL_INFO(dev_priv)->cursor_needs_physical) {
-               int align = IS_I830(dev_priv) ? 16 * 1024 : 256;
+               int align = intel_cursor_alignment(dev_priv);
 
                ret = i915_gem_object_attach_phys(intel_fb_obj(fb), align);
                if (ret) {