Hi, On ma, 2015-09-21 at 10:45 +0100, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > > 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@xxxxxxxxx> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx