On Wed, Jan 20, 2016 at 09:05:33PM +0200, ville.syrj...@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> Throw out a bunch of unnecessary stuff from struct intel_rotation_info,
> and pull most of the remaining stuff to live under an array of
> per-color plane sub-structures.
> 
> What still remains outside the sub-structure will be reorgranized later
> as well, but that requires more work elsewhere so leave it be for now.
> 
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/i915_gem_gtt.c  | 35 +++++++++++++++--------------------
>  drivers/gpu/drm/i915/i915_gem_gtt.h  | 11 ++++-------
>  drivers/gpu/drm/i915/intel_display.c | 25 +++++++++++++++----------
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  4 files changed, 35 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
> b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index b3d8e2b0948c..f95468cd0470 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -3367,7 +3367,7 @@ static struct sg_table *
>  intel_rotate_fb_obj_pages(struct intel_rotation_info *rot_info,
>                         struct drm_i915_gem_object *obj)
>  {
> -     unsigned int size_pages = rot_info->size >> PAGE_SHIFT;
> +     unsigned int size_pages = rot_info->plane[0].width * 
> rot_info->plane[0].height;
>       unsigned int size_pages_uv;
>       struct sg_page_iter sg_iter;
>       unsigned long i;
> @@ -3385,7 +3385,7 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info 
> *rot_info,
>  
>       /* Account for UV plane with NV12. */
>       if (rot_info->pixel_format == DRM_FORMAT_NV12)
> -             size_pages_uv = rot_info->size_uv >> PAGE_SHIFT;
> +             size_pages_uv = rot_info->plane[1].width * 
> rot_info->plane[1].height;
>       else
>               size_pages_uv = 0;
>  
> @@ -3407,9 +3407,9 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info 
> *rot_info,
>  
>       /* Rotate the pages. */
>       sg = rotate_pages(page_addr_list, 0,
> -                  rot_info->width_pages, rot_info->height_pages,
> -                  rot_info->width_pages,
> -                  st, NULL);
> +                       rot_info->plane[0].width, rot_info->plane[0].height,
> +                       rot_info->plane[0].width,
> +                       st, NULL);
>  
>       /* Append the UV plane if NV12. */
>       if (rot_info->pixel_format == DRM_FORMAT_NV12) {
> @@ -3421,18 +3421,15 @@ intel_rotate_fb_obj_pages(struct intel_rotation_info 
> *rot_info,
>  
>               rot_info->uv_start_page = uv_start_page;
>  
> -             rotate_pages(page_addr_list, uv_start_page,
> -                          rot_info->width_pages_uv,
> -                          rot_info->height_pages_uv,
> -                          rot_info->width_pages_uv,
> +             rotate_pages(page_addr_list, rot_info->uv_start_page,
> +                          rot_info->plane[1].width, 
> rot_info->plane[1].height,
> +                          rot_info->plane[1].width,
>                            st, sg);
>       }
>  
> -     DRM_DEBUG_KMS(
> -                   "Created rotated page mapping for object size %zu 
> (pitch=%u, height=%u, pixel_format=0x%x, %ux%u tiles, %u pages (%u plane 
> 0)).\n",
> -                   obj->base.size, rot_info->pitch, rot_info->height,
> -                   rot_info->pixel_format, rot_info->width_pages,
> -                   rot_info->height_pages, size_pages + size_pages_uv,
> +     DRM_DEBUG_KMS("Created rotated page mapping for object size %zu (%ux%u 
> tiles, %u pages (%u plane 0)).\n",
> +                   obj->base.size, rot_info->plane[0].width,
> +                   rot_info->plane[0].height, size_pages + size_pages_uv,
>                     size_pages);
>  
>       drm_free_large(page_addr_list);
> @@ -3444,11 +3441,9 @@ err_sg_alloc:
>  err_st_alloc:
>       drm_free_large(page_addr_list);
>  
> -     DRM_DEBUG_KMS(
> -                   "Failed to create rotated mapping for object size %zu! 
> (%d) (pitch=%u, height=%u, pixel_format=0x%x, %ux%u tiles, %u pages (%u plane 
> 0))\n",
> -                   obj->base.size, ret, rot_info->pitch, rot_info->height,
> -                   rot_info->pixel_format, rot_info->width_pages,
> -                   rot_info->height_pages, size_pages + size_pages_uv,
> +     DRM_DEBUG_KMS("Failed to create rotated mapping for object size %zu! 
> (%d) (%ux%u tiles, %u pages (%u plane 0))\n",
> +                   obj->base.size, ret, rot_info->plane[0].width,
> +                   rot_info->plane[0].height, size_pages + size_pages_uv,
>                     size_pages);
>       return ERR_PTR(ret);
>  }
> @@ -3600,7 +3595,7 @@ i915_ggtt_view_size(struct drm_i915_gem_object *obj,
>       if (view->type == I915_GGTT_VIEW_NORMAL) {
>               return obj->base.size;
>       } else if (view->type == I915_GGTT_VIEW_ROTATED) {
> -             return view->params.rotated.size;
> +             return intel_rotation_info_size(&view->params.rotated) << 
> PAGE_SHIFT;

Isn't this a hidden bugfix? before this was size, now it's size+size_uv.

If you agree then please add a blurb to the commit message (or better,
split this out into a tiny prep patch). Otherwise didn't spot anything,
with either approach

Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>

>       } else if (view->type == I915_GGTT_VIEW_PARTIAL) {
>               return view->params.partial.size << PAGE_SHIFT;
>       } else {
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h 
> b/drivers/gpu/drm/i915/i915_gem_gtt.h
> index f520c90e5377..4b8a378b9d3f 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> @@ -135,16 +135,13 @@ enum i915_ggtt_view_type {
>  };
>  
>  struct intel_rotation_info {
> -     unsigned int height;
> -     unsigned int pitch;
>       unsigned int uv_offset;
>       uint32_t pixel_format;
> -     uint64_t fb_modifier;
> -     unsigned int width_pages, height_pages;
> -     uint64_t size;
> -     unsigned int width_pages_uv, height_pages_uv;
> -     uint64_t size_uv;
>       unsigned int uv_start_page;
> +     struct {
> +             /* tiles */
> +             unsigned int width, height;
> +     } plane[2];
>  };
>  
>  struct i915_ggtt_view {
> diff --git a/drivers/gpu/drm/i915/intel_display.c 
> b/drivers/gpu/drm/i915/intel_display.c
> index 084c8ae3668f..899ffb1a9b10 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2291,6 +2291,17 @@ intel_fb_align_height(struct drm_device *dev, unsigned 
> int height,
>       return ALIGN(height, tile_height);
>  }
>  
> +unsigned int intel_rotation_info_size(const struct intel_rotation_info 
> *rot_info)
> +{
> +     unsigned int size = 0;
> +     int i;
> +
> +     for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++)
> +             size += rot_info->plane[i].width * rot_info->plane[i].height;
> +
> +     return size;
> +}
> +
>  static void
>  intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
>                       const struct drm_framebuffer *fb,
> @@ -2307,11 +2318,7 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
>  
>       *view = i915_ggtt_view_rotated;
>  
> -     info->height = fb->height;
> -     info->pixel_format = fb->pixel_format;
> -     info->pitch = fb->pitches[0];
>       info->uv_offset = fb->offsets[1];
> -     info->fb_modifier = fb->modifier[0];
>  
>       tile_size = intel_tile_size(dev_priv);
>  
> @@ -2319,18 +2326,16 @@ intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
>       intel_tile_dims(dev_priv, &tile_width, &tile_height,
>                       fb->modifier[0], cpp);
>  
> -     info->width_pages = DIV_ROUND_UP(fb->pitches[0], tile_width * cpp);
> -     info->height_pages = DIV_ROUND_UP(fb->height, tile_height);
> -     info->size = info->width_pages * info->height_pages * tile_size;
> +     info->plane[0].width = DIV_ROUND_UP(fb->pitches[0], tile_width * cpp);
> +     info->plane[0].height = DIV_ROUND_UP(fb->height, tile_height);
>  
>       if (info->pixel_format == DRM_FORMAT_NV12) {
>               cpp = drm_format_plane_cpp(fb->pixel_format, 1);
>               intel_tile_dims(dev_priv, &tile_width, &tile_height,
>                               fb->modifier[1], cpp);
>  
> -             info->width_pages_uv = DIV_ROUND_UP(fb->pitches[1], tile_width 
> * cpp);
> -             info->height_pages_uv = DIV_ROUND_UP(fb->height / 2, 
> tile_height);
> -             info->size_uv = info->width_pages_uv * info->height_pages_uv * 
> tile_size;
> +             info->plane[1].width = DIV_ROUND_UP(fb->pitches[1], tile_width 
> * cpp);
> +             info->plane[1].height = DIV_ROUND_UP(fb->height / 2, 
> tile_height);
>       }
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_drv.h 
> b/drivers/gpu/drm/i915/intel_drv.h
> index b9ef9d5f1041..f251f253cc99 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1059,6 +1059,7 @@ void i915_audio_component_cleanup(struct 
> drm_i915_private *dev_priv);
>  
>  /* intel_display.c */
>  extern const struct drm_plane_funcs intel_plane_funcs;
> +unsigned int intel_rotation_info_size(const struct intel_rotation_info 
> *rot_info);
>  bool intel_has_pending_fb_unpin(struct drm_device *dev);
>  int intel_pch_rawclk(struct drm_device *dev);
>  int intel_hrawclk(struct drm_device *dev);
> -- 
> 2.4.10
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to