|
|
|
@ -3348,6 +3348,7 @@ i915_gem_obj_lookup_or_create_ggtt_vma(struct drm_i915_gem_object *obj, |
|
|
|
|
static struct scatterlist * |
|
|
|
|
rotate_pages(const dma_addr_t *in, unsigned int offset, |
|
|
|
|
unsigned int width, unsigned int height, |
|
|
|
|
unsigned int stride, |
|
|
|
|
struct sg_table *st, struct scatterlist *sg) |
|
|
|
|
{ |
|
|
|
|
unsigned int column, row; |
|
|
|
@ -3359,7 +3360,7 @@ rotate_pages(const dma_addr_t *in, unsigned int offset, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (column = 0; column < width; column++) { |
|
|
|
|
src_idx = width * (height - 1) + column; |
|
|
|
|
src_idx = stride * (height - 1) + column; |
|
|
|
|
for (row = 0; row < height; row++) { |
|
|
|
|
st->nents++; |
|
|
|
|
/* We don't need the pages, but need to initialize
|
|
|
|
@ -3370,7 +3371,7 @@ rotate_pages(const dma_addr_t *in, unsigned int offset, |
|
|
|
|
sg_dma_address(sg) = in[offset + src_idx]; |
|
|
|
|
sg_dma_len(sg) = PAGE_SIZE; |
|
|
|
|
sg = sg_next(sg); |
|
|
|
|
src_idx -= width; |
|
|
|
|
src_idx -= stride; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -3423,6 +3424,7 @@ intel_rotate_fb_obj_pages(struct i915_ggtt_view *ggtt_view, |
|
|
|
|
/* Rotate the pages. */ |
|
|
|
|
sg = rotate_pages(page_addr_list, 0, |
|
|
|
|
rot_info->width_pages, rot_info->height_pages, |
|
|
|
|
rot_info->width_pages, |
|
|
|
|
st, NULL); |
|
|
|
|
|
|
|
|
|
/* Append the UV plane if NV12. */ |
|
|
|
@ -3438,6 +3440,7 @@ intel_rotate_fb_obj_pages(struct i915_ggtt_view *ggtt_view, |
|
|
|
|
rotate_pages(page_addr_list, uv_start_page, |
|
|
|
|
rot_info->width_pages_uv, |
|
|
|
|
rot_info->height_pages_uv, |
|
|
|
|
rot_info->width_pages_uv, |
|
|
|
|
st, sg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|