[Intel-gfx] [PATCH 2/4] drm/i915: Support appending to the rotated pages mapping

Joonas Lahtinen joonas.lahtinen at linux.intel.com
Mon Sep 21 04:07:46 PDT 2015


Hi,

On ma, 2015-09-21 at 10:45 +0100, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> 
> By providing a start offset into the source array of pages, and
> returning the
> end position in the scatter-gather table, we will be able to append
> the UV
> plane to the rotated mapping in later patches.
> 
> v2: Rebase.
> 
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Reviewed-by: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>

> ---
>  drivers/gpu/drm/i915/i915_gem_gtt.c | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c
> b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 87862813cfde..59c934fb9230 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -3234,15 +3234,18 @@ i915_gem_obj_lookup_or_create_ggtt_vma(struct
> drm_i915_gem_object *obj,
>  
>  }
>  
> -static void
> -rotate_pages(dma_addr_t *in, unsigned int width, unsigned int
> height,
> -	     struct sg_table *st)
> +static struct scatterlist *
> +rotate_pages(dma_addr_t *in, unsigned int offset,
> +	     unsigned int width, unsigned int height,
> +	     struct sg_table *st, struct scatterlist *sg)
>  {
>  	unsigned int column, row;
>  	unsigned int src_idx;
> -	struct scatterlist *sg = st->sgl;
>  
> -	st->nents = 0;
> +	if (!sg) {
> +		st->nents = 0;
> +		sg = st->sgl;
> +	}
>  
>  	for (column = 0; column < width; column++) {
>  		src_idx = width * (height - 1) + column;
> @@ -3253,12 +3256,14 @@ rotate_pages(dma_addr_t *in, unsigned int
> width, unsigned int height,
>  			 * The only thing we need are DMA addresses.
>  			 */
>  			sg_set_page(sg, NULL, PAGE_SIZE, 0);
> -			sg_dma_address(sg) = in[src_idx];
> +			sg_dma_address(sg) = in[offset + src_idx];
>  			sg_dma_len(sg) = PAGE_SIZE;
>  			sg = sg_next(sg);
>  			src_idx -= width;
>  		}
>  	}
> +
> +	return sg;
>  }
>  
>  static struct sg_table *
> @@ -3296,9 +3301,9 @@ intel_rotate_fb_obj_pages(struct i915_ggtt_view
> *ggtt_view,
>  	}
>  
>  	/* Rotate the pages. */
> -	rotate_pages(page_addr_list,
> +	rotate_pages(page_addr_list, 0,
>  		     rot_info->width_pages, rot_info->height_pages,
> -		     st);
> +		     st, NULL);
>  
>  	DRM_DEBUG_KMS(
>  		      "Created rotated page mapping for object size
> %zu (pitch=%u, height=%u, pixel_format=0x%x, %ux%u tiles, %u
> pages).\n",


More information about the Intel-gfx mailing list