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

Commit 05c9b8f7 authored by George Shen's avatar George Shen
Browse files

msm: cvp: Add support of new session control commands



CVP session create command allows user mode to set session
attributes before start using the session. CVP session delete
command allows user to shutdown session before close device.

Change-Id: I13ebf82f86733624f46f7bb876befbc7fb8ecc0c
Signed-off-by: default avatarGeorge Shen <sqiao@codeaurora.org>
parent 1041824b
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -31,7 +31,6 @@


#define HFI_CMD_SYS_OX_START		\
#define HFI_CMD_SYS_OX_START		\
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_CMD_START_OFFSET + 0x0000)
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_CMD_START_OFFSET + 0x0000)
#define HFI_CMD_SYS_SESSION_ABORT	(HFI_CMD_SYS_OX_START + 0x001)
#define HFI_CMD_SYS_PING		(HFI_CMD_SYS_OX_START + 0x002)
#define HFI_CMD_SYS_PING		(HFI_CMD_SYS_OX_START + 0x002)


#define HFI_CMD_SESSION_OX_START	\
#define HFI_CMD_SESSION_OX_START	\
@@ -149,7 +148,6 @@
#define HFI_MSG_SYS_OX_START			\
#define HFI_MSG_SYS_OX_START			\
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x0000)
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x0000)
#define HFI_MSG_SYS_PING_ACK	(HFI_MSG_SYS_OX_START + 0x2)
#define HFI_MSG_SYS_PING_ACK	(HFI_MSG_SYS_OX_START + 0x2)
#define HFI_MSG_SYS_SESSION_ABORT_DONE	(HFI_MSG_SYS_OX_START + 0x4)


#define HFI_MSG_SESSION_OX_START		\
#define HFI_MSG_SESSION_OX_START		\
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x1000)
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x1000)
+2 −0
Original line number Original line Diff line number Diff line
@@ -413,6 +413,7 @@ struct cvp_hfi_resource_syscache_info_type {
#define HFI_CMD_SYS_SESSION_INIT	(HFI_CMD_SYS_COMMON_START + 0x007)
#define HFI_CMD_SYS_SESSION_INIT	(HFI_CMD_SYS_COMMON_START + 0x007)
#define HFI_CMD_SYS_SESSION_END		(HFI_CMD_SYS_COMMON_START + 0x008)
#define HFI_CMD_SYS_SESSION_END		(HFI_CMD_SYS_COMMON_START + 0x008)
#define HFI_CMD_SYS_SET_BUFFERS		(HFI_CMD_SYS_COMMON_START + 0x009)
#define HFI_CMD_SYS_SET_BUFFERS		(HFI_CMD_SYS_COMMON_START + 0x009)
#define HFI_CMD_SYS_SESSION_ABORT	(HFI_CMD_SYS_COMMON_START + 0x00A)
#define HFI_CMD_SYS_TEST_START		(HFI_CMD_SYS_COMMON_START + 0x100)
#define HFI_CMD_SYS_TEST_START		(HFI_CMD_SYS_COMMON_START + 0x100)


#define HFI_CMD_SESSION_COMMON_START		\
#define HFI_CMD_SESSION_COMMON_START		\
@@ -437,6 +438,7 @@ struct cvp_hfi_resource_syscache_info_type {
#define HFI_MSG_SYS_IDLE		(HFI_MSG_SYS_COMMON_START + 0x8)
#define HFI_MSG_SYS_IDLE		(HFI_MSG_SYS_COMMON_START + 0x8)
#define HFI_MSG_SYS_COV                 (HFI_MSG_SYS_COMMON_START + 0x9)
#define HFI_MSG_SYS_COV                 (HFI_MSG_SYS_COMMON_START + 0x9)
#define HFI_MSG_SYS_PROPERTY_INFO	(HFI_MSG_SYS_COMMON_START + 0xA)
#define HFI_MSG_SYS_PROPERTY_INFO	(HFI_MSG_SYS_COMMON_START + 0xA)
#define HFI_MSG_SYS_SESSION_ABORT_DONE	(HFI_MSG_SYS_COMMON_START + 0xC)
#define HFI_MSG_SESSION_SYNC_DONE      (HFI_MSG_SESSION_OX_START + 0xD)
#define HFI_MSG_SESSION_SYNC_DONE      (HFI_MSG_SESSION_OX_START + 0xD)


#define HFI_MSG_SESSION_COMMON_START		\
#define HFI_MSG_SESSION_COMMON_START		\
+26 −13
Original line number Original line Diff line number Diff line
@@ -189,19 +189,32 @@
#define CVP_NOC_ERR_ERRLOG3_HIGH_OFFS	(CVP_NOC_BASE_OFFS + 0xBC)
#define CVP_NOC_ERR_ERRLOG3_HIGH_OFFS	(CVP_NOC_BASE_OFFS + 0xBC)


#define CVP_NOC_CORE_BASE_OFFS			0x00010000
#define CVP_NOC_CORE_BASE_OFFS			0x00010000
#define CVP_NOC_CORE_ERR_SWID_LOW_OFFS		(CVP_NOC_CORE_BASE_OFFS + 0x80)
#define CVP_NOC_CORE_ERR_SWID_LOW_OFFS \
#define CVP_NOC_CORE_ERR_SWID_HIGH_OFFS		(CVP_NOC_CORE_BASE_OFFS + 0x84)
		(CVP_NOC_CORE_BASE_OFFS + 0x1200)
#define CVP_NOC_CORE_ERR_MAINCTL_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0x88)
#define CVP_NOC_CORE_ERR_SWID_HIGH_OFFS \
#define CVP_NOC_CORE_ERR_ERRVLD_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0x90)
		(CVP_NOC_CORE_BASE_OFFS + 0x1204)
#define CVP_NOC_CORE_ERR_ERRCLR_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0x98)
#define CVP_NOC_CORE_ERR_MAINCTL_LOW_OFFS \
#define CVP_NOC_CORE_ERR_ERRLOG0_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xA0)
		(CVP_NOC_CORE_BASE_OFFS + 0x1208)
#define CVP_NOC_CORE_ERR_ERRLOG0_HIGH_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xA4)
#define CVP_NOC_CORE_ERR_ERRVLD_LOW_OFFS \
#define CVP_NOC_CORE_ERR_ERRLOG1_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xA8)
		(CVP_NOC_CORE_BASE_OFFS + 0x1210)
#define CVP_NOC_CORE_ERR_ERRLOG1_HIGH_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xAC)
#define CVP_NOC_CORE_ERR_ERRCLR_LOW_OFFS \
#define CVP_NOC_CORE_ERR_ERRLOG2_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xB0)
		(CVP_NOC_CORE_BASE_OFFS + 0x1218)
#define CVP_NOC_CORE_ERR_ERRLOG2_HIGH_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xB4)
#define CVP_NOC_CORE_ERR_ERRLOG0_LOW_OFFS \
#define CVP_NOC_CORE_ERR_ERRLOG3_LOW_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xB8)
		(CVP_NOC_CORE_BASE_OFFS + 0x1220)
#define CVP_NOC_CORE_ERR_ERRLOG3_HIGH_OFFS	(CVP_NOC_CORE_BASE_OFFS + 0xBC)
#define CVP_NOC_CORE_ERR_ERRLOG0_HIGH_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x1224)
#define CVP_NOC_CORE_ERR_ERRLOG1_LOW_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x1228)
#define CVP_NOC_CORE_ERR_ERRLOG1_HIGH_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x122C)
#define CVP_NOC_CORE_ERR_ERRLOG2_LOW_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x1230)
#define CVP_NOC_CORE_ERR_ERRLOG2_HIGH_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x1234)
#define CVP_NOC_CORE_ERR_ERRLOG3_LOW_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x1238)
#define CVP_NOC_CORE_ERR_ERRLOG3_HIGH_OFFS \
		(CVP_NOC_CORE_BASE_OFFS + 0x123C)




#define CVP_AON_WRAPPER_MVP_NOC_LPI_CONTROL	(CVP_AON_BASE_OFFS)
#define CVP_AON_WRAPPER_MVP_NOC_LPI_CONTROL	(CVP_AON_BASE_OFFS)
+7 −6
Original line number Original line Diff line number Diff line
@@ -201,18 +201,19 @@ inline int cvp_create_pkt_cmd_sys_session_init(
		struct cvp_hal_session *session)
		struct cvp_hal_session *session)
{
{
	int rc = 0;
	int rc = 0;
	struct msm_cvp_inst *inst = session->session_id;


	if (!pkt)
	if (!pkt || !inst)
		return -EINVAL;
		return -EINVAL;


	pkt->size = sizeof(struct cvp_hfi_cmd_sys_session_init_packet);
	pkt->size = sizeof(struct cvp_hfi_cmd_sys_session_init_packet);
	pkt->packet_type = HFI_CMD_SYS_SESSION_INIT;
	pkt->packet_type = HFI_CMD_SYS_SESSION_INIT;
	pkt->session_id = hash32_ptr(session);
	pkt->session_id = hash32_ptr(session);
	pkt->session_kmask = 0xFFFFFFFF;
	pkt->session_type = inst->prop.type;
	pkt->session_type = HFI_SESSION_CV;
	pkt->session_kmask = inst->prop.kernel_mask;
	pkt->session_prio = 0;
	pkt->session_prio = inst->prop.priority;
	pkt->is_secure = 0;
	pkt->is_secure = inst->prop.is_secure;
	pkt->dsp_ac_mask = 0;
	pkt->dsp_ac_mask = inst->prop.dsp_mask;


	return rc;
	return rc;
}
}
+167 −16
Original line number Original line Diff line number Diff line
@@ -16,15 +16,6 @@
#define MAX_CVP_ISE_CYCLES		(MSM_CVP_NOMINAL_CYCLES - \
#define MAX_CVP_ISE_CYCLES		(MSM_CVP_NOMINAL_CYCLES - \
		MSM_CVP_UHD60E_ISE_CYCLES)
		MSM_CVP_UHD60E_ISE_CYCLES)


struct msm_cvp_fence_thread_data {
	struct msm_cvp_inst *inst;
	unsigned int device_id;
	struct cvp_kmd_hfi_fence_packet in_fence_pkt;
	unsigned int arg_type;
};

static struct msm_cvp_fence_thread_data fence_thread_data;

void print_cvp_internal_buffer(u32 tag, const char *str,
void print_cvp_internal_buffer(u32 tag, const char *str,
		struct msm_cvp_inst *inst, struct msm_cvp_internal_buffer *cbuf)
		struct msm_cvp_inst *inst, struct msm_cvp_internal_buffer *cbuf)
{
{
@@ -614,7 +605,7 @@ static int msm_cvp_thread_fence_run(void *data)
	if (!inst) {
	if (!inst) {
		dprintk(CVP_ERR, "%s Wrong inst %pK\n", __func__, inst);
		dprintk(CVP_ERR, "%s Wrong inst %pK\n", __func__, inst);
		rc = -EINVAL;
		rc = -EINVAL;
		goto exit;
		return rc;
	}
	}
	in_fence_pkt = (struct cvp_kmd_hfi_fence_packet *)
	in_fence_pkt = (struct cvp_kmd_hfi_fence_packet *)
					&fence_thread_data->in_fence_pkt;
					&fence_thread_data->in_fence_pkt;
@@ -823,6 +814,7 @@ static int msm_cvp_thread_fence_run(void *data)
	}
	}


exit:
exit:
	kmem_cache_free(inst->fence_data_cache, fence_thread_data);
	cvp_put_inst(inst);
	cvp_put_inst(inst);
	do_exit(rc);
	do_exit(rc);
}
}
@@ -839,6 +831,7 @@ static int msm_cvp_session_process_hfi_fence(
	struct cvp_kmd_hfi_packet *in_pkt;
	struct cvp_kmd_hfi_packet *in_pkt;
	unsigned int signal, offset, buf_num, in_offset, in_buf_num;
	unsigned int signal, offset, buf_num, in_offset, in_buf_num;
	struct msm_cvp_inst *s;
	struct msm_cvp_inst *s;
	struct msm_cvp_fence_thread_data *fence_thread_data;


	dprintk(CVP_DBG, "%s: Enter inst = %#x", __func__, inst);
	dprintk(CVP_DBG, "%s: Enter inst = %#x", __func__, inst);


@@ -851,6 +844,14 @@ static int msm_cvp_session_process_hfi_fence(
	if (!s)
	if (!s)
		return -ECONNRESET;
		return -ECONNRESET;


	fence_thread_data = kmem_cache_alloc(inst->fence_data_cache,
			GFP_KERNEL);
	if (!fence_thread_data) {
		dprintk(CVP_ERR, "%s: fence_thread_data alloc failed\n",
				__func__);
		return -ENOMEM;
	}

	in_offset = arg->buf_offset;
	in_offset = arg->buf_offset;
	in_buf_num = arg->buf_num;
	in_buf_num = arg->buf_num;
	in_pkt = (struct cvp_kmd_hfi_packet *)&arg->data.hfi_pkt;
	in_pkt = (struct cvp_kmd_hfi_packet *)&arg->data.hfi_pkt;
@@ -878,15 +879,17 @@ static int msm_cvp_session_process_hfi_fence(
		goto exit;
		goto exit;


	thread_num = thread_num + 1;
	thread_num = thread_num + 1;
	fence_thread_data.inst = inst;
	fence_thread_data->inst = inst;
	fence_thread_data.device_id = (unsigned int)inst->core->id;
	fence_thread_data->device_id = (unsigned int)inst->core->id;
	memcpy(&fence_thread_data.in_fence_pkt, &arg->data.hfi_fence_pkt,
	memcpy(&fence_thread_data->in_fence_pkt, &arg->data.hfi_fence_pkt,
				sizeof(struct cvp_kmd_hfi_fence_packet));
				sizeof(struct cvp_kmd_hfi_fence_packet));
	fence_thread_data.arg_type = arg->type;
	fence_thread_data->arg_type = arg->type;
	snprintf(thread_fence_name, sizeof(thread_fence_name),
	snprintf(thread_fence_name, sizeof(thread_fence_name),
				"thread_fence_%d", thread_num);
				"thread_fence_%d", thread_num);
	thread = kthread_run(msm_cvp_thread_fence_run,
	thread = kthread_run(msm_cvp_thread_fence_run,
			&fence_thread_data, thread_fence_name);
			fence_thread_data, thread_fence_name);
	if (!thread)
		kmem_cache_free(inst->fence_data_cache, fence_thread_data);


exit:
exit:
	cvp_put_inst(s);
	cvp_put_inst(s);
@@ -1145,6 +1148,49 @@ static int msm_cvp_unregister_buffer(struct msm_cvp_inst *inst,
	return rc;
	return rc;
}
}


static int msm_cvp_session_create(struct msm_cvp_inst *inst)
{
	int rc = 0;

	if (!inst || !inst->core)
		return -EINVAL;

	if (inst->state != MSM_CVP_CORE_INIT_DONE ||
		inst->state > MSM_CVP_OPEN_DONE) {
		dprintk(CVP_ERR, "not ready create instance %d\n", inst->state);
		return -EINVAL;
	}

	rc = msm_cvp_comm_try_state(inst, MSM_CVP_OPEN_DONE);
	if (rc) {
		dprintk(CVP_ERR,
				"Failed to move instance to open done state\n");
		goto fail_init;
	}

	rc = cvp_comm_set_arp_buffers(inst);
	if (rc) {
		dprintk(CVP_ERR,
				"Failed to set ARP buffers\n");
		goto fail_init;
	}

fail_init:
	return rc;
}

static int session_state_check_init(struct msm_cvp_inst *inst)
{
	mutex_lock(&inst->lock);
	if (inst->state >= MSM_CVP_OPEN && inst->state < MSM_CVP_STOP) {
		mutex_unlock(&inst->lock);
		return 0;
	}
	mutex_unlock(&inst->lock);

	return msm_cvp_session_create(inst);
}

static int msm_cvp_session_start(struct msm_cvp_inst *inst,
static int msm_cvp_session_start(struct msm_cvp_inst *inst,
		struct cvp_kmd_arg *arg)
		struct cvp_kmd_arg *arg)
{
{
@@ -1210,7 +1256,9 @@ static int msm_cvp_session_ctrl(struct msm_cvp_inst *inst,
		rc = msm_cvp_session_start(inst, arg);
		rc = msm_cvp_session_start(inst, arg);
		break;
		break;
	case SESSION_CREATE:
	case SESSION_CREATE:
		rc = msm_cvp_session_create(inst);
	case SESSION_DELETE:
	case SESSION_DELETE:
		break;
	case SESSION_INFO:
	case SESSION_INFO:
	default:
	default:
		dprintk(CVP_ERR, "%s Unsupported session ctrl%d\n",
		dprintk(CVP_ERR, "%s Unsupported session ctrl%d\n",
@@ -1237,7 +1285,7 @@ static int msm_cvp_get_sysprop(struct msm_cvp_inst *inst,
	hfi = hdev->hfi_device_data;
	hfi = hdev->hfi_device_data;


	switch (props->prop_data.prop_type) {
	switch (props->prop_data.prop_type) {
	case CVP_HFI_VERSION:
	case CVP_KMD_PROP_HFI_VERSION:
	{
	{
		props->prop_data.data = hfi->version;
		props->prop_data.data = hfi->version;
		break;
		break;
@@ -1250,6 +1298,49 @@ static int msm_cvp_get_sysprop(struct msm_cvp_inst *inst,
	return rc;
	return rc;
}
}


static int msm_cvp_set_sysprop(struct msm_cvp_inst *inst,
		struct cvp_kmd_arg *arg)
{
	struct cvp_kmd_sys_properties *props = &arg->data.sys_properties;
	struct cvp_kmd_sys_property *prop_array;
	struct cvp_session_prop *session_prop;
	int i, rc = 0;

	if (!inst) {
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
		return -EINVAL;
	}

	prop_array = &arg->data.sys_properties.prop_data;
	session_prop = &inst->prop;

	for (i = 0; i < props->prop_num; i++) {
		switch (prop_array[i].prop_type) {
		case CVP_KMD_PROP_SESSION_TYPE:
			session_prop->type = prop_array[i].data;
			break;
		case CVP_KMD_PROP_SESSION_KERNELMASK:
			session_prop->kernel_mask = prop_array[i].data;
			break;
		case CVP_KMD_PROP_SESSION_PRIORITY:
			session_prop->priority = prop_array[i].data;
			break;
		case CVP_KMD_PROP_SESSION_SECURITY:
			session_prop->is_secure = prop_array[i].data;
			break;
		case CVP_KMD_PROP_SESSION_DSPMASK:
			session_prop->dsp_mask = prop_array[i].data;
			break;
		default:
			dprintk(CVP_ERR,
				"unrecognized sys property to set %d\n",
				prop_array[i].prop_type);
			rc = -EFAULT;
		}
	}
	return rc;
}

int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg)
int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg)
{
{
	int rc = 0;
	int rc = 0;
@@ -1260,6 +1351,18 @@ int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg)
	}
	}
	dprintk(CVP_DBG, "%s: arg->type = %x", __func__, arg->type);
	dprintk(CVP_DBG, "%s: arg->type = %x", __func__, arg->type);


	if (arg->type != CVP_KMD_SESSION_CONTROL &&
		arg->type != CVP_KMD_SET_SYS_PROPERTY &&
		arg->type != CVP_KMD_GET_SYS_PROPERTY) {

		rc = session_state_check_init(inst);
		if (rc) {
			dprintk(CVP_ERR, "session not ready for commands %d",
					arg->type);
			return rc;
		}
	}

	switch (arg->type) {
	switch (arg->type) {
	case CVP_KMD_GET_SESSION_INFO:
	case CVP_KMD_GET_SESSION_INFO:
	{
	{
@@ -1358,6 +1461,9 @@ int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg)
	case CVP_KMD_GET_SYS_PROPERTY:
	case CVP_KMD_GET_SYS_PROPERTY:
		rc = msm_cvp_get_sysprop(inst, arg);
		rc = msm_cvp_get_sysprop(inst, arg);
		break;
		break;
	case CVP_KMD_SET_SYS_PROPERTY:
		rc = msm_cvp_set_sysprop(inst, arg);
		break;
	default:
	default:
		dprintk(CVP_DBG, "%s: unknown arg type %#x\n",
		dprintk(CVP_DBG, "%s: unknown arg type %#x\n",
				__func__, arg->type);
				__func__, arg->type);
@@ -1371,6 +1477,8 @@ int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg)
int msm_cvp_session_deinit(struct msm_cvp_inst *inst)
int msm_cvp_session_deinit(struct msm_cvp_inst *inst)
{
{
	int rc = 0;
	int rc = 0;
	struct cvp_hal_session *session;
	struct msm_cvp_internal_buffer *cbuf, *dummy;


	if (!inst || !inst->core) {
	if (!inst || !inst->core) {
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
@@ -1379,6 +1487,12 @@ int msm_cvp_session_deinit(struct msm_cvp_inst *inst)
	dprintk(CVP_DBG, "%s: inst %pK (%#x)\n", __func__,
	dprintk(CVP_DBG, "%s: inst %pK (%#x)\n", __func__,
		inst, hash32_ptr(inst->session));
		inst, hash32_ptr(inst->session));


	session = (struct cvp_hal_session *)inst->session;
	if (!session) {
		dprintk(CVP_ERR, "%s: invalid session\n", __func__);
		return -EINVAL;
	}

	rc = msm_cvp_comm_try_state(inst, MSM_CVP_CLOSE_DONE);
	rc = msm_cvp_comm_try_state(inst, MSM_CVP_CLOSE_DONE);
	if (rc)
	if (rc)
		dprintk(CVP_ERR, "%s: close failed\n", __func__);
		dprintk(CVP_ERR, "%s: close failed\n", __func__);
@@ -1391,6 +1505,37 @@ int msm_cvp_session_deinit(struct msm_cvp_inst *inst)
		dprintk(CVP_ERR, "%s: failed to scale_clocks_and_bus\n",
		dprintk(CVP_ERR, "%s: failed to scale_clocks_and_bus\n",
			__func__);
			__func__);


	mutex_lock(&inst->cvpcpubufs.lock);
	list_for_each_entry_safe(cbuf, dummy, &inst->cvpcpubufs.list,
			list) {
		print_client_buffer(CVP_DBG, "remove from cvpcpubufs",
				inst, &cbuf->buf);
		msm_cvp_smem_unmap_dma_buf(inst, &cbuf->smem);
		list_del(&cbuf->list);
	}
	mutex_unlock(&inst->cvpcpubufs.lock);

	mutex_lock(&inst->cvpdspbufs.lock);
	list_for_each_entry_safe(cbuf, dummy, &inst->cvpdspbufs.list,
			list) {
		print_client_buffer(CVP_DBG, "remove from cvpdspbufs",
				inst, &cbuf->buf);
		rc = cvp_dsp_deregister_buffer(
			(uint32_t)cbuf->smem.device_addr,
			cbuf->buf.index, cbuf->buf.size,
			hash32_ptr(session));
		if (rc)
			dprintk(CVP_ERR,
				"%s: failed dsp deregistration fd=%d rc=%d",
				__func__, cbuf->buf.fd, rc);

		msm_cvp_smem_unmap_dma_buf(inst, &cbuf->smem);
		list_del(&cbuf->list);
	}
	mutex_unlock(&inst->cvpdspbufs.lock);

	msm_cvp_comm_free_freq_table(inst);

	return rc;
	return rc;
}
}


@@ -1412,5 +1557,11 @@ int msm_cvp_session_init(struct msm_cvp_inst *inst)
	inst->clk_data.ddr_bw = 1000;
	inst->clk_data.ddr_bw = 1000;
	inst->clk_data.sys_cache_bw = 1000;
	inst->clk_data.sys_cache_bw = 1000;


	inst->prop.type = HFI_SESSION_CV;
	inst->prop.kernel_mask = 0xFFFFFFFF;
	inst->prop.priority = 0;
	inst->prop.is_secure = 0;
	inst->prop.dsp_mask = 0;

	return rc;
	return rc;
}
}
Loading