Commit 650b939e authored by Philipp Zabel's avatar Philipp Zabel Committed by Mauro Carvalho Chehab

[media] coda: move parameter buffer in together with context buffer allocation

The parameter buffer is a per-context buffer, so we can allocate and free it
together with the other context buffers during REQBUFS.
Since this was the last context buffer allocated in coda-common.c, we can now
move coda_alloc_context_buf into coda-bit.c.
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarKamil Debski <k.debski@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent ad532d37
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "coda.h" #include "coda.h"
#define CODA_PARA_BUF_SIZE (10 * 1024)
#define CODA7_PS_BUF_SIZE 0x28000 #define CODA7_PS_BUF_SIZE 0x28000
#define CODA9_PS_SAVE_SIZE (512 * 1024) #define CODA9_PS_SAVE_SIZE (512 * 1024)
...@@ -300,6 +301,14 @@ static void coda_parabuf_write(struct coda_ctx *ctx, int index, u32 value) ...@@ -300,6 +301,14 @@ static void coda_parabuf_write(struct coda_ctx *ctx, int index, u32 value)
p[index ^ 1] = value; p[index ^ 1] = value;
} }
static inline int coda_alloc_context_buf(struct coda_ctx *ctx,
struct coda_aux_buf *buf, size_t size,
const char *name)
{
return coda_alloc_aux_buf(ctx->dev, buf, size, name, ctx->debugfs_entry);
}
static void coda_free_framebuffers(struct coda_ctx *ctx) static void coda_free_framebuffers(struct coda_ctx *ctx)
{ {
int i; int i;
...@@ -380,6 +389,7 @@ static void coda_free_context_buffers(struct coda_ctx *ctx) ...@@ -380,6 +389,7 @@ static void coda_free_context_buffers(struct coda_ctx *ctx)
coda_free_aux_buf(dev, &ctx->psbuf); coda_free_aux_buf(dev, &ctx->psbuf);
if (dev->devtype->product != CODA_DX6) if (dev->devtype->product != CODA_DX6)
coda_free_aux_buf(dev, &ctx->workbuf); coda_free_aux_buf(dev, &ctx->workbuf);
coda_free_aux_buf(dev, &ctx->parabuf);
} }
static int coda_alloc_context_buffers(struct coda_ctx *ctx, static int coda_alloc_context_buffers(struct coda_ctx *ctx,
...@@ -389,6 +399,15 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx, ...@@ -389,6 +399,15 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx,
size_t size; size_t size;
int ret; int ret;
if (!ctx->parabuf.vaddr) {
ret = coda_alloc_context_buf(ctx, &ctx->parabuf,
CODA_PARA_BUF_SIZE, "parabuf");
if (ret < 0) {
v4l2_err(&dev->v4l2_dev, "failed to allocate parabuf");
return ret;
}
}
if (dev->devtype->product == CODA_DX6) if (dev->devtype->product == CODA_DX6)
return 0; return 0;
...@@ -402,7 +421,7 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx, ...@@ -402,7 +421,7 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx,
v4l2_err(&dev->v4l2_dev, v4l2_err(&dev->v4l2_dev,
"failed to allocate %d byte slice buffer", "failed to allocate %d byte slice buffer",
ctx->slicebuf.size); ctx->slicebuf.size);
return ret; goto err;
} }
} }
......
...@@ -46,7 +46,6 @@ ...@@ -46,7 +46,6 @@
#define CODADX6_MAX_INSTANCES 4 #define CODADX6_MAX_INSTANCES 4
#define CODA_MAX_FORMATS 4 #define CODA_MAX_FORMATS 4
#define CODA_PARA_BUF_SIZE (10 * 1024)
#define CODA_ISRAM_SIZE (2048 * 2) #define CODA_ISRAM_SIZE (2048 * 2)
#define MIN_W 176 #define MIN_W 176
...@@ -1715,14 +1714,6 @@ static int coda_open(struct file *file) ...@@ -1715,14 +1714,6 @@ static int coda_open(struct file *file)
ctx->fh.ctrl_handler = &ctx->ctrls; ctx->fh.ctrl_handler = &ctx->ctrls;
if (ctx->use_bit) {
ret = coda_alloc_context_buf(ctx, &ctx->parabuf,
CODA_PARA_BUF_SIZE, "parabuf");
if (ret < 0) {
v4l2_err(&dev->v4l2_dev, "failed to allocate parabuf");
goto err_dma_alloc;
}
}
mutex_init(&ctx->bitstream_mutex); mutex_init(&ctx->bitstream_mutex);
mutex_init(&ctx->buffer_mutex); mutex_init(&ctx->buffer_mutex);
INIT_LIST_HEAD(&ctx->buffer_meta_list); INIT_LIST_HEAD(&ctx->buffer_meta_list);
...@@ -1736,8 +1727,6 @@ static int coda_open(struct file *file) ...@@ -1736,8 +1727,6 @@ static int coda_open(struct file *file)
return 0; return 0;
err_dma_alloc:
v4l2_ctrl_handler_free(&ctx->ctrls);
err_ctrls_setup: err_ctrls_setup:
v4l2_m2m_ctx_release(ctx->fh.m2m_ctx); v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
err_ctx_init: err_ctx_init:
...@@ -1783,7 +1772,6 @@ static int coda_release(struct file *file) ...@@ -1783,7 +1772,6 @@ static int coda_release(struct file *file)
if (ctx->dev->devtype->product == CODA_DX6) if (ctx->dev->devtype->product == CODA_DX6)
coda_free_aux_buf(dev, &ctx->workbuf); coda_free_aux_buf(dev, &ctx->workbuf);
coda_free_aux_buf(dev, &ctx->parabuf);
v4l2_ctrl_handler_free(&ctx->ctrls); v4l2_ctrl_handler_free(&ctx->ctrls);
clk_disable_unprepare(dev->clk_ahb); clk_disable_unprepare(dev->clk_ahb);
clk_disable_unprepare(dev->clk_per); clk_disable_unprepare(dev->clk_per);
......
...@@ -249,13 +249,6 @@ int coda_alloc_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf, ...@@ -249,13 +249,6 @@ int coda_alloc_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf,
size_t size, const char *name, struct dentry *parent); size_t size, const char *name, struct dentry *parent);
void coda_free_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf); void coda_free_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf);
static inline int coda_alloc_context_buf(struct coda_ctx *ctx,
struct coda_aux_buf *buf, size_t size,
const char *name)
{
return coda_alloc_aux_buf(ctx->dev, buf, size, name, ctx->debugfs_entry);
}
int coda_encoder_queue_init(void *priv, struct vb2_queue *src_vq, int coda_encoder_queue_init(void *priv, struct vb2_queue *src_vq,
struct vb2_queue *dst_vq); struct vb2_queue *dst_vq);
int coda_decoder_queue_init(void *priv, struct vb2_queue *src_vq, int coda_decoder_queue_init(void *priv, struct vb2_queue *src_vq,
......
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