Merge "msm: vidc: send dmabuf pointer instead of fd"

This commit is contained in:
qctecmdr 2019-07-27 14:33:08 -07:00 • committed by Gerrit - the friendly Code Review server
commit 5a31d042fe

View file

@ -7,6 +7,9 @@
#include "msm_cvp_external.h"
#include "msm_vidc_common.h"
#define LOWER32(a) ((u32)((u64)a))
#define UPPER32(a) ((u32)((u64)a >> 32))
static void print_cvp_buffer(u32 tag, const char *str,
struct msm_vidc_inst *inst, struct msm_cvp_buf *cbuf)
{
@ -22,6 +25,22 @@ static void print_cvp_buffer(u32 tag, const char *str,
cbuf->offset, cbuf->dbuf, cbuf->kvaddr);
}
static int fill_cvp_buffer(struct msm_cvp_buffer_type *dst,
struct msm_cvp_buf *src)
{
if (!dst || !src) {
dprintk(VIDC_ERR, "%s: invalid params\n", __func__);
return -EINVAL;
}
dst->buffer_addr = -1;
dst->reserved1 = LOWER32(src->dbuf);
dst->reserved2 = UPPER32(src->dbuf);
dst->size = src->size;
return 0;
}
static int msm_cvp_get_version_info(struct msm_vidc_inst *inst)
{
int rc;
@ -189,7 +208,6 @@ static int msm_cvp_allocate_buffer(struct msm_vidc_inst *inst,
int ion_flags = 0;
unsigned long heap_mask = 0;
struct dma_buf *dbuf;
int fd;
if (!inst || !inst->cvp || !buffer) {
dprintk(VIDC_ERR, "%s: invalid params\n", __func__);
@ -212,14 +230,7 @@ static int msm_cvp_allocate_buffer(struct msm_vidc_inst *inst,
goto error;
}
buffer->dbuf = dbuf;
fd = dma_buf_fd(dbuf, O_CLOEXEC);
if (fd < 0) {
dprintk(VIDC_ERR, "%s: failed to get fd\n", __func__);
rc = -ENOMEM;
goto error;
}
buffer->fd = fd;
buffer->fd = -1;
if (kernel_map) {
buffer->kvaddr = dma_buf_vmap(dbuf);
@ -539,10 +550,8 @@ static void msm_cvp_deinit_internal_buffers(struct msm_vidc_inst *inst)
HFI_CMD_SESSION_CVP_RELEASE_PERSIST_BUFFERS;
persist2_packet.session_id = cvp->session_id;
persist2_packet.cvp_op = CVP_DME;
persist2_packet.persist2_buffer.buffer_addr =
cvp->persist2_buffer.fd;
persist2_packet.persist2_buffer.size =
cvp->persist2_buffer.size;
fill_cvp_buffer(&persist2_packet.persist2_buffer,
&cvp->persist2_buffer);
arg = kzalloc(sizeof(struct cvp_kmd_arg), GFP_KERNEL);
if (arg) {
@ -610,8 +619,8 @@ static int msm_cvp_init_internal_buffers(struct msm_vidc_inst *inst)
persist2_packet.packet_type = HFI_CMD_SESSION_CVP_SET_PERSIST_BUFFERS;
persist2_packet.session_id = cvp->session_id;
persist2_packet.cvp_op = CVP_DME;
persist2_packet.persist2_buffer.buffer_addr = cvp->persist2_buffer.fd;
persist2_packet.persist2_buffer.size = cvp->persist2_buffer.size;
fill_cvp_buffer(&persist2_packet.persist2_buffer,
&cvp->persist2_buffer);
memset(arg, 0, sizeof(struct cvp_kmd_arg));
arg->type = CVP_KMD_HFI_PERSIST_CMD;
@ -831,6 +840,7 @@ static int msm_cvp_frame_process(struct msm_vidc_inst *inst,
cvp->fullres_buffer.fd = vb->planes[0].m.fd;
cvp->fullres_buffer.size = vb->planes[0].length;
cvp->fullres_buffer.offset = vb->planes[0].data_offset;
cvp->fullres_buffer.dbuf = mbuf->smem[0].dma_buf;
/* frame skip logic */
fps = max(inst->clk_data.operating_rate,
@ -875,25 +885,19 @@ static int msm_cvp_frame_process(struct msm_vidc_inst *inst,
frame->descmatch_threshold = 52;
frame->ncc_robustness_threshold = 0;
frame->fullres_srcbuffer.buffer_addr = cvp->fullres_buffer.fd;
frame->fullres_srcbuffer.size = cvp->fullres_buffer.size;
frame->videospatialtemporal_statsbuffer.buffer_addr =
cvp->output_buffer.fd;
frame->videospatialtemporal_statsbuffer.size =
cvp->output_buffer.size;
frame->src_buffer.buffer_addr = cvp->fullres_buffer.fd;
frame->src_buffer.size = cvp->fullres_buffer.size;
fill_cvp_buffer(&frame->fullres_srcbuffer,
&cvp->fullres_buffer);
fill_cvp_buffer(&frame->videospatialtemporal_statsbuffer,
&cvp->output_buffer);
fill_cvp_buffer(&frame->src_buffer, &cvp->fullres_buffer);
if (cvp->downscale) {
frame->src_buffer.buffer_addr = cvp->src_buffer.fd;
frame->src_buffer.size = cvp->src_buffer.size;
frame->ref_buffer.buffer_addr = cvp->ref_buffer.fd;
frame->ref_buffer.size = cvp->ref_buffer.size;
fill_cvp_buffer(&frame->src_buffer, &cvp->src_buffer);
fill_cvp_buffer(&frame->ref_buffer, &cvp->ref_buffer);
}
frame->srcframe_contextbuffer.buffer_addr = cvp->context_buffer.fd;
frame->srcframe_contextbuffer.size = cvp->context_buffer.size;
frame->refframe_contextbuffer.buffer_addr = cvp->refcontext_buffer.fd;
frame->refframe_contextbuffer.size = cvp->refcontext_buffer.size;
fill_cvp_buffer(&frame->srcframe_contextbuffer,
&cvp->context_buffer);
fill_cvp_buffer(&frame->refframe_contextbuffer,
&cvp->refcontext_buffer);
print_cvp_buffer(VIDC_LOW, "input frame", inst, &cvp->fullres_buffer);
rc = msm_cvp_private(cvp->priv, CVP_KMD_SEND_CMD_PKT, arg);