drm/i915: Support appending to the rotated pages mapping
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@intel.com> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Родитель
fe47ea0cfa
Коммит
804beb4b5b
|
@ -3244,15 +3244,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;
|
||||
|
@ -3263,12 +3266,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 *
|
||||
|
@ -3306,9 +3311,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",
|
||||
|
|
Загрузка…
Ссылка в новой задаче