Commit da4414ea authored by Benoit Parrot's avatar Benoit Parrot Committed by Mauro Carvalho Chehab

[media] media: ti-vpe: vpdma: add support for user specified stride

This patch introduce the needed vpdma API changes to support
user space specified stride instead of forcing a driver calculated
one.
Signed-off-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent f9fa0f2b
...@@ -801,17 +801,17 @@ static void dump_dtd(struct vpdma_dtd *dtd) ...@@ -801,17 +801,17 @@ static void dump_dtd(struct vpdma_dtd *dtd)
* flags: VPDMA flags to configure some descriptor fileds * flags: VPDMA flags to configure some descriptor fileds
*/ */
void vpdma_add_out_dtd(struct vpdma_desc_list *list, int width, void vpdma_add_out_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
int max_w, int max_h, enum vpdma_channel chan, u32 flags) int max_w, int max_h, enum vpdma_channel chan, u32 flags)
{ {
vpdma_rawchan_add_out_dtd(list, width, c_rect, fmt, dma_addr, vpdma_rawchan_add_out_dtd(list, width, stride, c_rect, fmt, dma_addr,
max_w, max_h, chan_info[chan].num, flags); max_w, max_h, chan_info[chan].num, flags);
} }
EXPORT_SYMBOL(vpdma_add_out_dtd); EXPORT_SYMBOL(vpdma_add_out_dtd);
void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width, void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
int max_w, int max_h, int raw_vpdma_chan, u32 flags) int max_w, int max_h, int raw_vpdma_chan, u32 flags)
{ {
...@@ -821,7 +821,6 @@ void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width, ...@@ -821,7 +821,6 @@ void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width,
int channel, next_chan; int channel, next_chan;
struct v4l2_rect rect = *c_rect; struct v4l2_rect rect = *c_rect;
int depth = fmt->depth; int depth = fmt->depth;
int stride;
struct vpdma_dtd *dtd; struct vpdma_dtd *dtd;
channel = next_chan = raw_vpdma_chan; channel = next_chan = raw_vpdma_chan;
...@@ -833,8 +832,6 @@ void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width, ...@@ -833,8 +832,6 @@ void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width,
depth = 8; depth = 8;
} }
stride = ALIGN((depth * width) >> 3, VPDMA_STRIDE_ALIGN);
dma_addr += rect.top * stride + (rect.left * depth >> 3); dma_addr += rect.top * stride + (rect.left * depth >> 3);
dtd = list->next; dtd = list->next;
...@@ -882,7 +879,7 @@ EXPORT_SYMBOL(vpdma_rawchan_add_out_dtd); ...@@ -882,7 +879,7 @@ EXPORT_SYMBOL(vpdma_rawchan_add_out_dtd);
* contribute to the client) * contribute to the client)
*/ */
void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width, void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
enum vpdma_channel chan, int field, u32 flags, int frame_width, enum vpdma_channel chan, int field, u32 flags, int frame_width,
int frame_height, int start_h, int start_v) int frame_height, int start_h, int start_v)
...@@ -892,7 +889,6 @@ void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width, ...@@ -892,7 +889,6 @@ void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width,
int depth = fmt->depth; int depth = fmt->depth;
int channel, next_chan; int channel, next_chan;
struct v4l2_rect rect = *c_rect; struct v4l2_rect rect = *c_rect;
int stride;
struct vpdma_dtd *dtd; struct vpdma_dtd *dtd;
channel = next_chan = chan_info[chan].num; channel = next_chan = chan_info[chan].num;
...@@ -904,8 +900,6 @@ void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width, ...@@ -904,8 +900,6 @@ void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width,
depth = 8; depth = 8;
} }
stride = ALIGN((depth * width) >> 3, VPDMA_STRIDE_ALIGN);
dma_addr += rect.top * stride + (rect.left * depth >> 3); dma_addr += rect.top * stride + (rect.left * depth >> 3);
dtd = list->next; dtd = list->next;
......
...@@ -242,16 +242,16 @@ void vpdma_add_sync_on_channel_ctd(struct vpdma_desc_list *list, ...@@ -242,16 +242,16 @@ void vpdma_add_sync_on_channel_ctd(struct vpdma_desc_list *list,
void vpdma_add_abort_channel_ctd(struct vpdma_desc_list *list, void vpdma_add_abort_channel_ctd(struct vpdma_desc_list *list,
int chan_num); int chan_num);
void vpdma_add_out_dtd(struct vpdma_desc_list *list, int width, void vpdma_add_out_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
int max_w, int max_h, enum vpdma_channel chan, u32 flags); int max_w, int max_h, enum vpdma_channel chan, u32 flags);
void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width, void vpdma_rawchan_add_out_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
int max_w, int max_h, int raw_vpdma_chan, u32 flags); int max_w, int max_h, int raw_vpdma_chan, u32 flags);
void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width, void vpdma_add_in_dtd(struct vpdma_desc_list *list, int width,
const struct v4l2_rect *c_rect, int stride, const struct v4l2_rect *c_rect,
const struct vpdma_data_format *fmt, dma_addr_t dma_addr, const struct vpdma_data_format *fmt, dma_addr_t dma_addr,
enum vpdma_channel chan, int field, u32 flags, int frame_width, enum vpdma_channel chan, int field, u32 flags, int frame_width,
int frame_height, int start_h, int start_v); int frame_height, int start_h, int start_v);
......
...@@ -1085,7 +1085,8 @@ static void add_out_dtd(struct vpe_ctx *ctx, int port) ...@@ -1085,7 +1085,8 @@ static void add_out_dtd(struct vpe_ctx *ctx, int port)
vpdma_set_max_size(ctx->dev->vpdma, VPDMA_MAX_SIZE1, vpdma_set_max_size(ctx->dev->vpdma, VPDMA_MAX_SIZE1,
MAX_W, MAX_H); MAX_W, MAX_H);
vpdma_add_out_dtd(&ctx->desc_list, q_data->width, &q_data->c_rect, vpdma_add_out_dtd(&ctx->desc_list, q_data->width,
q_data->bytesperline[VPE_LUMA], &q_data->c_rect,
vpdma_fmt, dma_addr, MAX_OUT_WIDTH_REG1, vpdma_fmt, dma_addr, MAX_OUT_WIDTH_REG1,
MAX_OUT_HEIGHT_REG1, p_data->channel, flags); MAX_OUT_HEIGHT_REG1, p_data->channel, flags);
} }
...@@ -1169,7 +1170,8 @@ static void add_in_dtd(struct vpe_ctx *ctx, int port) ...@@ -1169,7 +1170,8 @@ static void add_in_dtd(struct vpe_ctx *ctx, int port)
if (p_data->vb_part && fmt->fourcc == V4L2_PIX_FMT_NV12) if (p_data->vb_part && fmt->fourcc == V4L2_PIX_FMT_NV12)
frame_height /= 2; frame_height /= 2;
vpdma_add_in_dtd(&ctx->desc_list, q_data->width, &q_data->c_rect, vpdma_add_in_dtd(&ctx->desc_list, q_data->width,
q_data->bytesperline[VPE_LUMA], &q_data->c_rect,
vpdma_fmt, dma_addr, p_data->channel, field, flags, frame_width, vpdma_fmt, dma_addr, p_data->channel, field, flags, frame_width,
frame_height, 0, 0); frame_height, 0, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment