On Wed, Oct 14, 2015 at 07:29:01PM +0300, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Pull the code to determine the surface alignment for both linear and > tiled surfaces into a separate function intel_surf_alignment(). This > will be used not only for the vma alignment but actually aligning > the plane SURF once SKL+ starts using intel_compute_page_offset() > (since SKL+ needs >4K alignment for tiled surfaces too). > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 45 +++++++++++++++++------------------- > 1 file changed, 21 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index bd55d06..5f3abce 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -2321,7 +2321,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view, struct drm_framebuffer *fb, > return 0; > } > > -static unsigned int intel_linear_alignment(struct drm_i915_private *dev_priv) > +static unsigned int intel_linear_alignment(const struct drm_i915_private *dev_priv) > { > if (INTEL_INFO(dev_priv)->gen >= 9) > return 256 * 1024; > @@ -2334,6 +2334,25 @@ static unsigned int intel_linear_alignment(struct drm_i915_private *dev_priv) > return 0; > } > > +static unsigned int intel_surf_alignment(const struct drm_i915_private *dev_priv, > + uint64_t fb_modifier) > +{ > + switch (fb_modifier) { > + case DRM_FORMAT_MOD_NONE: > + return intel_linear_alignment(dev_priv); > + case I915_FORMAT_MOD_X_TILED: > + if (INTEL_INFO(dev_priv)->gen >= 9) > + return 256 * 1024; > + return 0; > + case I915_FORMAT_MOD_Y_TILED: > + case I915_FORMAT_MOD_Yf_TILED: > + return 1 * 1024 * 1024; > + default: > + MISSING_CASE(fb_modifier); > + return 0; > + } > +} > + > int > intel_pin_and_fence_fb_obj(struct drm_plane *plane, > struct drm_framebuffer *fb, > @@ -2350,29 +2369,7 @@ intel_pin_and_fence_fb_obj(struct drm_plane *plane, > > WARN_ON(!mutex_is_locked(&dev->struct_mutex)); > > - switch (fb->modifier[0]) { > - case DRM_FORMAT_MOD_NONE: > - alignment = intel_linear_alignment(dev_priv); > - break; > - case I915_FORMAT_MOD_X_TILED: > - if (INTEL_INFO(dev)->gen >= 9) > - alignment = 256 * 1024; > - else { > - /* pin() will align the object as required by fence */ > - alignment = 0; > - } > - break; > - case I915_FORMAT_MOD_Y_TILED: > - case I915_FORMAT_MOD_Yf_TILED: > - if (WARN_ONCE(INTEL_INFO(dev)->gen < 9, > - "Y tiling bo slipped through, driver bug!\n")) > - return -EINVAL; > - alignment = 1 * 1024 * 1024; > - break; > - default: > - MISSING_CASE(fb->modifier[0]); > - return -EINVAL; > - } > + alignment = intel_surf_alignment(dev_priv, fb->modifier[0]); > > ret = intel_fill_fb_ggtt_view(&view, fb, plane_state); > if (ret) > -- > 2.4.9 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx