mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 05:17:10 +09:00
Revert "Change parameters for s5p_mfc_alloc_priv_buf() and s5p_mfc_release_priv_buf() functions. Instead of DMA device pointer and a base, provide common MFC device structure and memory bank context identifier."
This reverts commit 3dafb955c3.
This commit is contained in:
@@ -240,14 +240,12 @@ struct s5p_mfc_variant {
|
||||
* buffer accessed by driver
|
||||
* @dma: DMA address, only valid when kernel DMA API used
|
||||
* @size: size of the buffer
|
||||
* @ctx: memory context (bank) used for this allocation
|
||||
*/
|
||||
struct s5p_mfc_priv_buf {
|
||||
unsigned long ofs;
|
||||
void *virt;
|
||||
dma_addr_t dma;
|
||||
size_t size;
|
||||
unsigned int ctx;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,16 +37,12 @@ void s5p_mfc_init_regs(struct s5p_mfc_dev *dev)
|
||||
dev->mfc_regs = s5p_mfc_init_regs_v6_plus(dev);
|
||||
}
|
||||
|
||||
int s5p_mfc_alloc_priv_buf(struct s5p_mfc_dev *dev, unsigned int mem_ctx,
|
||||
struct s5p_mfc_priv_buf *b)
|
||||
int s5p_mfc_alloc_priv_buf(struct device *dev, dma_addr_t base,
|
||||
struct s5p_mfc_priv_buf *b)
|
||||
{
|
||||
struct device *mem_dev = dev->mem_dev[mem_ctx];
|
||||
dma_addr_t base = dev->dma_base[mem_ctx];
|
||||
|
||||
mfc_debug(3, "Allocating priv: %zu\n", b->size);
|
||||
|
||||
b->ctx = mem_ctx;
|
||||
b->virt = dma_alloc_coherent(mem_dev, b->size, &b->dma, GFP_KERNEL);
|
||||
b->virt = dma_alloc_coherent(dev, b->size, &b->dma, GFP_KERNEL);
|
||||
|
||||
if (!b->virt) {
|
||||
mfc_err("Allocating private buffer of size %zu failed\n",
|
||||
@@ -57,7 +53,7 @@ int s5p_mfc_alloc_priv_buf(struct s5p_mfc_dev *dev, unsigned int mem_ctx,
|
||||
if (b->dma < base) {
|
||||
mfc_err("Invalid memory configuration - buffer (%pad) is below base memory address(%pad)\n",
|
||||
&b->dma, &base);
|
||||
dma_free_coherent(mem_dev, b->size, b->virt, b->dma);
|
||||
dma_free_coherent(dev, b->size, b->virt, b->dma);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -65,13 +61,11 @@ int s5p_mfc_alloc_priv_buf(struct s5p_mfc_dev *dev, unsigned int mem_ctx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void s5p_mfc_release_priv_buf(struct s5p_mfc_dev *dev,
|
||||
struct s5p_mfc_priv_buf *b)
|
||||
void s5p_mfc_release_priv_buf(struct device *dev,
|
||||
struct s5p_mfc_priv_buf *b)
|
||||
{
|
||||
struct device *mem_dev = dev->mem_dev[b->ctx];
|
||||
|
||||
if (b->virt) {
|
||||
dma_free_coherent(mem_dev, b->size, b->virt, b->dma);
|
||||
dma_free_coherent(dev, b->size, b->virt, b->dma);
|
||||
b->virt = NULL;
|
||||
b->dma = 0;
|
||||
b->size = 0;
|
||||
|
||||
@@ -315,10 +315,10 @@ struct s5p_mfc_hw_ops {
|
||||
|
||||
void s5p_mfc_init_hw_ops(struct s5p_mfc_dev *dev);
|
||||
void s5p_mfc_init_regs(struct s5p_mfc_dev *dev);
|
||||
int s5p_mfc_alloc_priv_buf(struct s5p_mfc_dev *dev, unsigned int mem_ctx,
|
||||
struct s5p_mfc_priv_buf *b);
|
||||
void s5p_mfc_release_priv_buf(struct s5p_mfc_dev *dev,
|
||||
struct s5p_mfc_priv_buf *b);
|
||||
int s5p_mfc_alloc_priv_buf(struct device *dev, dma_addr_t base,
|
||||
struct s5p_mfc_priv_buf *b);
|
||||
void s5p_mfc_release_priv_buf(struct device *dev,
|
||||
struct s5p_mfc_priv_buf *b);
|
||||
|
||||
|
||||
#endif /* S5P_MFC_OPR_H_ */
|
||||
|
||||
@@ -41,7 +41,8 @@ static int s5p_mfc_alloc_dec_temp_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
int ret;
|
||||
|
||||
ctx->dsc.size = buf_size->dsc;
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->dsc);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->dsc);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate temporary buffer\n");
|
||||
return ret;
|
||||
@@ -57,7 +58,7 @@ static int s5p_mfc_alloc_dec_temp_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
/* Release temporary buffers for decoding */
|
||||
static void s5p_mfc_release_dec_desc_buffer_v5(struct s5p_mfc_ctx *ctx)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->dsc);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->dsc);
|
||||
}
|
||||
|
||||
/* Allocate codec buffers */
|
||||
@@ -172,7 +173,8 @@ static int s5p_mfc_alloc_codec_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
/* Allocate only if memory from bank 1 is necessary */
|
||||
if (ctx->bank1.size > 0) {
|
||||
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->bank1);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->bank1);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate Bank1 temporary buffer\n");
|
||||
return ret;
|
||||
@@ -181,10 +183,12 @@ static int s5p_mfc_alloc_codec_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
}
|
||||
/* Allocate only if memory from bank 2 is necessary */
|
||||
if (ctx->bank2.size > 0) {
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK2_CTX, &ctx->bank2);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK2_CTX],
|
||||
dev->dma_base[BANK2_CTX], &ctx->bank2);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate Bank2 temporary buffer\n");
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->bank1);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX],
|
||||
&ctx->bank1);
|
||||
return ret;
|
||||
}
|
||||
BUG_ON(ctx->bank2.dma & ((1 << MFC_BANK2_ALIGN_ORDER) - 1));
|
||||
@@ -195,8 +199,8 @@ static int s5p_mfc_alloc_codec_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
/* Release buffers allocated for codec */
|
||||
static void s5p_mfc_release_codec_buffers_v5(struct s5p_mfc_ctx *ctx)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->bank1);
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->bank2);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->bank1);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK2_CTX], &ctx->bank2);
|
||||
}
|
||||
|
||||
/* Allocate memory for instance data buffer */
|
||||
@@ -212,7 +216,8 @@ static int s5p_mfc_alloc_instance_buffer_v5(struct s5p_mfc_ctx *ctx)
|
||||
else
|
||||
ctx->ctx.size = buf_size->non_h264_ctx;
|
||||
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->ctx);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->ctx);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate instance buffer\n");
|
||||
return ret;
|
||||
@@ -225,10 +230,11 @@ static int s5p_mfc_alloc_instance_buffer_v5(struct s5p_mfc_ctx *ctx)
|
||||
|
||||
/* Initialize shared memory */
|
||||
ctx->shm.size = buf_size->shm;
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->shm);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->shm);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate shared memory buffer\n");
|
||||
s5p_mfc_release_priv_buf(dev, &ctx->ctx);
|
||||
s5p_mfc_release_priv_buf(dev->mem_dev[BANK1_CTX], &ctx->ctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -244,8 +250,8 @@ static int s5p_mfc_alloc_instance_buffer_v5(struct s5p_mfc_ctx *ctx)
|
||||
/* Release instance buffer */
|
||||
static void s5p_mfc_release_instance_buffer_v5(struct s5p_mfc_ctx *ctx)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->ctx);
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->shm);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->ctx);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->shm);
|
||||
}
|
||||
|
||||
static int s5p_mfc_alloc_dev_context_buffer_v5(struct s5p_mfc_dev *dev)
|
||||
|
||||
@@ -239,7 +239,8 @@ static int s5p_mfc_alloc_codec_buffers_v6(struct s5p_mfc_ctx *ctx)
|
||||
|
||||
/* Allocate only if memory from bank 1 is necessary */
|
||||
if (ctx->bank1.size > 0) {
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->bank1);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->bank1);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate Bank1 memory\n");
|
||||
return ret;
|
||||
@@ -252,7 +253,7 @@ static int s5p_mfc_alloc_codec_buffers_v6(struct s5p_mfc_ctx *ctx)
|
||||
/* Release buffers allocated for codec */
|
||||
static void s5p_mfc_release_codec_buffers_v6(struct s5p_mfc_ctx *ctx)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->bank1);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->bank1);
|
||||
}
|
||||
|
||||
/* Allocate memory for instance data buffer */
|
||||
@@ -291,7 +292,8 @@ static int s5p_mfc_alloc_instance_buffer_v6(struct s5p_mfc_ctx *ctx)
|
||||
break;
|
||||
}
|
||||
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &ctx->ctx);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &ctx->ctx);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate instance buffer\n");
|
||||
return ret;
|
||||
@@ -308,7 +310,7 @@ static int s5p_mfc_alloc_instance_buffer_v6(struct s5p_mfc_ctx *ctx)
|
||||
/* Release instance buffer */
|
||||
static void s5p_mfc_release_instance_buffer_v6(struct s5p_mfc_ctx *ctx)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(ctx->dev, &ctx->ctx);
|
||||
s5p_mfc_release_priv_buf(ctx->dev->mem_dev[BANK1_CTX], &ctx->ctx);
|
||||
}
|
||||
|
||||
/* Allocate context buffers for SYS_INIT */
|
||||
@@ -320,7 +322,8 @@ static int s5p_mfc_alloc_dev_context_buffer_v6(struct s5p_mfc_dev *dev)
|
||||
mfc_debug_enter();
|
||||
|
||||
dev->ctx_buf.size = buf_size->dev_ctx;
|
||||
ret = s5p_mfc_alloc_priv_buf(dev, BANK1_CTX, &dev->ctx_buf);
|
||||
ret = s5p_mfc_alloc_priv_buf(dev->mem_dev[BANK1_CTX],
|
||||
dev->dma_base[BANK1_CTX], &dev->ctx_buf);
|
||||
if (ret) {
|
||||
mfc_err("Failed to allocate device context buffer\n");
|
||||
return ret;
|
||||
@@ -337,7 +340,7 @@ static int s5p_mfc_alloc_dev_context_buffer_v6(struct s5p_mfc_dev *dev)
|
||||
/* Release context buffers for SYS_INIT */
|
||||
static void s5p_mfc_release_dev_context_buffer_v6(struct s5p_mfc_dev *dev)
|
||||
{
|
||||
s5p_mfc_release_priv_buf(dev, &dev->ctx_buf);
|
||||
s5p_mfc_release_priv_buf(dev->mem_dev[BANK1_CTX], &dev->ctx_buf);
|
||||
}
|
||||
|
||||
static int calc_plane(int width, int height)
|
||||
|
||||
Reference in New Issue
Block a user