[1/3,media] coda: use correct offset for mvcol buffer
Commit Message
The mvcol buffer needs to be placed behind the chroma plane(s), so
use the real offset including any required rounding.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
drivers/media/platform/coda/coda-bit.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Comments
On Wed, 2017-04-05 at 15:09 +0200, Lucas Stach wrote:
> The mvcol buffer needs to be placed behind the chroma plane(s), so
> use the real offset including any required rounding.
>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
regards
Philipp
> ---
> drivers/media/platform/coda/coda-bit.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
> index 466a44e4549e..36062fc494e3 100644
> --- a/drivers/media/platform/coda/coda-bit.c
> +++ b/drivers/media/platform/coda/coda-bit.c
> @@ -387,14 +387,16 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,
>
> /* Register frame buffers in the parameter buffer */
> for (i = 0; i < ctx->num_internal_frames; i++) {
> - u32 y, cb, cr;
> + u32 y, cb, cr, mvcol;
>
> /* Start addresses of Y, Cb, Cr planes */
> y = ctx->internal_frames[i].paddr;
> cb = y + ysize;
> cr = y + ysize + ysize/4;
> + mvcol = y + ysize + ysize/4 + ysize/4;
> if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP) {
> cb = round_up(cb, 4096);
> + mvcol = cb + ysize/2;
> cr = 0;
> /* Packed 20-bit MSB of base addresses */
> /* YYYYYCCC, CCyyyyyc, cccc.... */
> @@ -408,9 +410,7 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,
> /* mvcol buffer for h.264 */
> if (ctx->codec->src_fourcc == V4L2_PIX_FMT_H264 &&
> dev->devtype->product != CODA_DX6)
> - coda_parabuf_write(ctx, 96 + i,
> - ctx->internal_frames[i].paddr +
> - ysize + ysize/4 + ysize/4);
> + coda_parabuf_write(ctx, 96 + i, mvcol);
> }
>
> /* mvcol buffer for mpeg4 */
@@ -387,14 +387,16 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,
/* Register frame buffers in the parameter buffer */
for (i = 0; i < ctx->num_internal_frames; i++) {
- u32 y, cb, cr;
+ u32 y, cb, cr, mvcol;
/* Start addresses of Y, Cb, Cr planes */
y = ctx->internal_frames[i].paddr;
cb = y + ysize;
cr = y + ysize + ysize/4;
+ mvcol = y + ysize + ysize/4 + ysize/4;
if (ctx->tiled_map_type == GDI_TILED_FRAME_MB_RASTER_MAP) {
cb = round_up(cb, 4096);
+ mvcol = cb + ysize/2;
cr = 0;
/* Packed 20-bit MSB of base addresses */
/* YYYYYCCC, CCyyyyyc, cccc.... */
@@ -408,9 +410,7 @@ static int coda_alloc_framebuffers(struct coda_ctx *ctx,
/* mvcol buffer for h.264 */
if (ctx->codec->src_fourcc == V4L2_PIX_FMT_H264 &&
dev->devtype->product != CODA_DX6)
- coda_parabuf_write(ctx, 96 + i,
- ctx->internal_frames[i].paddr +
- ysize + ysize/4 + ysize/4);
+ coda_parabuf_write(ctx, 96 + i, mvcol);
}
/* mvcol buffer for mpeg4 */