Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a31d042 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

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

parents 048032c0 ba78735a
Loading
Loading
Loading
Loading
+37 −33
Original line number Diff line number Diff line
@@ -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;
	}
	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->src_buffer, &cvp->src_buffer);
		fill_cvp_buffer(&frame->ref_buffer, &cvp->ref_buffer);
	}
	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);