[Intel-gfx] [PATCH 09/22] drm/i915: Refactor intel_surf_alignment()
Daniel Vetter
daniel at ffwll.ch
Wed Oct 21 03:54:26 PDT 2015
On Wed, Oct 14, 2015 at 07:29:01PM +0300, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> 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 at linux.intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the Intel-gfx
mailing list