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

2015-09-21 Thread Joonas Lahtinen
Hi,

On ma, 2015-09-21 at 10:45 +0100, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin 
> 
> 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 

Reviewed-by: Joonas Lahtinen 

> ---
>  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",
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


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

2015-09-21 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

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 
---
 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",
-- 
2.5.1

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


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

2015-08-03 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

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 
---
 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 96054a560f4f..b4c6ed5d02dd 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2722,15 +2722,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;
@@ -2741,12 +2744,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 *
@@ -2784,9 +2789,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",
-- 
2.4.6

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx