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

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

Merge "msm: cvp: Support backward compatibility of some CVP features"

parents 0be260f1 f9779d24
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ const struct msm_cvp_hfi_defs cvp_hfi_defs[] = {
		.type = HFI_CMD_SESSION_CVP_SET_PERSIST_BUFFERS,
		.buf_offset = HFI_PERSIST_BUFFERS_OFFSET,
		.buf_num = HFI_PERSIST_BUF_NUM,
		.resp = HAL_NO_RESP,
		.resp = HAL_SESSION_PERSIST_CMD_DONE,
	},
	{
		.size = HFI_DS_CMD_SIZE,
@@ -109,7 +109,7 @@ const struct msm_cvp_hfi_defs cvp_hfi_defs[] = {
		.resp = HAL_SESSION_ODT_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_ODT_CONFIG_CMD_SIZE,
		.size = HFI_ODT_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_ODT_FRAME,
		.buf_offset = HFI_ODT_BUFFERS_OFFSET,
		.buf_num = HFI_ODT_BUF_NUM,
@@ -3031,6 +3031,14 @@ static void **get_session_id(struct msm_cvp_cb_info *info)
	case HAL_SESSION_UNREGISTER_BUFFER_DONE:
	case HAL_SESSION_DFS_CONFIG_CMD_DONE:
	case HAL_SESSION_DME_CONFIG_CMD_DONE:
	case HAL_SESSION_TME_CONFIG_CMD_DONE:
	case HAL_SESSION_ODT_CONFIG_CMD_DONE:
	case HAL_SESSION_OD_CONFIG_CMD_DONE:
	case HAL_SESSION_NCC_CONFIG_CMD_DONE:
	case HAL_SESSION_ICA_CONFIG_CMD_DONE:
	case HAL_SESSION_HCD_CONFIG_CMD_DONE:
	case HAL_SESSION_DCM_CONFIG_CMD_DONE:
	case HAL_SESSION_PYS_HCD_CONFIG_CMD_DONE:
	case HAL_SESSION_DME_BASIC_CONFIG_CMD_DONE:
	case HAL_SESSION_DFS_FRAME_CMD_DONE:
	case HAL_SESSION_DME_FRAME_CMD_DONE:
+70 −18
Original line number Diff line number Diff line
@@ -16,8 +16,17 @@
#include "cvp_hfi.h"
#include "msm_cvp_common.h"

#define DFS_BIT_OFFSET (CVP_KMD_HFI_DFS_FRAME_CMD - CVP_KMD_CMD_START)
#define DME_BIT_OFFSET (CVP_KMD_HFI_DME_FRAME_CMD - CVP_KMD_CMD_START)
#define PERSIST_BIT_OFFSET (CVP_KMD_HFI_PERSIST_CMD - CVP_KMD_CMD_START)

extern struct msm_cvp_drv *cvp_driver;

static int _deprecated_hfi_msg_process(u32 device_id,
	struct hfi_msg_session_hdr *pkt,
	struct msm_cvp_cb_info *info,
	struct msm_cvp_inst *inst);

static enum cvp_status hfi_map_err_status(u32 hfi_err)
{
	enum cvp_status cvp_err;
@@ -215,9 +224,8 @@ static int hfi_process_sys_init_done(u32 device_id,
		return -E2BIG;
	}
	if (!pkt->num_properties) {
		dprintk(CVP_ERR,
		dprintk(CVP_DBG,
				"hal_process_sys_init_done: no_properties\n");
		status = CVP_ERR_FAIL;
		goto err_no_prop;
	}

@@ -679,11 +687,16 @@ static int hfi_process_session_cvp_operation_config(u32 device_id,
	cmd_done.size = 0;

	dprintk(CVP_DBG,
		"%s: device_id=%d status=%d, sessionid=%x config=%x\n",
		"%s: device_id=%d status=%d, sessionid=%pK config=%x\n",
		__func__, device_id, cmd_done.status,
		cmd_done.session_id, pkt->op_conf_id);

	if (pkt->packet_type == HFI_MSG_SESSION_CVP_SET_PERSIST_BUFFERS)
		signal = get_signal_from_pkt_type(
				HFI_CMD_SESSION_CVP_SET_PERSIST_BUFFERS);
	else
		signal = get_signal_from_pkt_type(pkt->op_conf_id);

	if (signal < 0) {
		dprintk(CVP_ERR, "%s Invalid op config id\n", __func__);
		return -EINVAL;
@@ -715,7 +728,7 @@ static int hfi_process_session_cvp_dfs(u32 device_id,
	cmd_done.size = 0;

	dprintk(CVP_DBG,
		"%s: device_id=%d cmd_done.status=%d sessionid=%x\n",
		"%s: device_id=%d cmd_done.status=%d sessionid=%pK\n",
		__func__, device_id, cmd_done.status, cmd_done.session_id);
	info->response_type = HAL_SESSION_DFS_FRAME_CMD_DONE;
	info->response.cmd = cmd_done;
@@ -724,7 +737,7 @@ static int hfi_process_session_cvp_dfs(u32 device_id,
}

static struct msm_cvp_inst *cvp_get_inst_from_id(struct msm_cvp_core *core,
	void *session_id)
	unsigned int session_id)
{
	struct msm_cvp_inst *inst = NULL;
	bool match = false;
@@ -734,7 +747,7 @@ static struct msm_cvp_inst *cvp_get_inst_from_id(struct msm_cvp_core *core,

	mutex_lock(&core->lock);
	list_for_each_entry(inst, &core->instances, list) {
		if (hash32_ptr(inst->session) == (unsigned int)session_id) {
		if (hash32_ptr(inst->session) == session_id) {
			match = true;
			break;
		}
@@ -765,13 +778,25 @@ static int hfi_process_session_cvp_msg(u32 device_id,
	}
	session_id = (void *)(uintptr_t)pkt->session_id;
	core = list_first_entry(&cvp_driver->cores, struct msm_cvp_core, list);
	inst = cvp_get_inst_from_id(core, session_id);
	inst = cvp_get_inst_from_id(core, (unsigned int)session_id);

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

	if (inst->deprecate_bitmask) {
		if (pkt->packet_type == HFI_MSG_SESSION_CVP_DFS
			|| pkt->packet_type == HFI_MSG_SESSION_CVP_DME
			|| pkt->packet_type ==
				HFI_MSG_SESSION_CVP_SET_PERSIST_BUFFERS)
			return _deprecated_hfi_msg_process(device_id,
				pkt, info, inst);

		dprintk(CVP_ERR, "Invalid deprecate_bitmask %lx\n",
					inst->deprecate_bitmask);
	}

	sess_msg = kmem_cache_alloc(inst->session_queue.msg_cache, GFP_KERNEL);
	if (sess_msg == NULL) {
		dprintk(CVP_ERR, "%s runs out msg cache memory\n", __func__);
@@ -780,6 +805,11 @@ static int hfi_process_session_cvp_msg(u32 device_id,

	memcpy(&sess_msg->pkt, pkt, sizeof(struct hfi_msg_session_hdr));

	dprintk(CVP_DBG,
		"%s: Received msg %x cmd_done.status=%d sessionid=%x\n",
		__func__, pkt->packet_type,
		hfi_map_err_status(pkt->error_type), session_id);

	spin_lock(&inst->session_queue.lock);
	if (inst->session_queue.msg_count >= MAX_NUM_MSGS_PER_SESSION) {
		dprintk(CVP_ERR, "Reached session queue size limit\n");
@@ -821,7 +851,7 @@ static int hfi_process_session_cvp_dme(u32 device_id,
	cmd_done.size = 0;

	dprintk(CVP_DBG,
		"%s: device_id=%d cmd_done.status=%d sessionid=%x\n",
		"%s: device_id=%d cmd_done.status=%d sessionid=%pK\n",
		__func__, device_id, cmd_done.status, cmd_done.session_id);
	info->response_type = HAL_SESSION_DME_FRAME_CMD_DONE;
	info->response.cmd = cmd_done;
@@ -850,7 +880,7 @@ static int hfi_process_session_cvp_persist(u32 device_id,
	cmd_done.size = 0;

	dprintk(CVP_DBG,
		"%s: device_id=%d cmd_done.status=%d sessionid=%x\n",
		"%s: device_id=%d cmd_done.status=%d sessionid=%pK\n",
		__func__, device_id, cmd_done.status, cmd_done.session_id);
	info->response_type = HAL_SESSION_PERSIST_CMD_DONE,
	info->response.cmd = cmd_done;
@@ -858,6 +888,34 @@ static int hfi_process_session_cvp_persist(u32 device_id,
	return 0;
}

static int _deprecated_hfi_msg_process(u32 device_id,
	struct hfi_msg_session_hdr *pkt,
	struct msm_cvp_cb_info *info,
	struct msm_cvp_inst *inst)
{
	if (pkt->packet_type == HFI_MSG_SESSION_CVP_DFS)
		if (test_and_clear_bit(DFS_BIT_OFFSET,
				&inst->deprecate_bitmask))
			return hfi_process_session_cvp_dfs(
					device_id, (void *)pkt, info);

	if (pkt->packet_type == HFI_MSG_SESSION_CVP_DME)
		if (test_and_clear_bit(DME_BIT_OFFSET,
				&inst->deprecate_bitmask))
			return hfi_process_session_cvp_dme(
					device_id, (void *)pkt, info);

	if (pkt->packet_type == HFI_MSG_SESSION_CVP_SET_PERSIST_BUFFERS)
		if (test_and_clear_bit(PERSIST_BIT_OFFSET,
				&inst->deprecate_bitmask))
			return hfi_process_session_cvp_persist(
					device_id, (void *)pkt, info);

	dprintk(CVP_ERR, "Deprecatd MSG doesn't match bitmask %x %lx\n",
			pkt->packet_type, inst->deprecate_bitmask);
	return -EINVAL;
}

static void hfi_process_sys_get_prop_image_version(
		struct hfi_msg_sys_property_info_packet *pkt)
{
@@ -974,19 +1032,13 @@ int cvp_hfi_process_msg_packet(u32 device_id,
		pkt_func = (pkt_func_def)hfi_process_session_abort_done;
		break;
	case HFI_MSG_SESSION_CVP_OPERATION_CONFIG:
	case HFI_MSG_SESSION_CVP_SET_PERSIST_BUFFERS:
		pkt_func =
			(pkt_func_def)hfi_process_session_cvp_operation_config;
		break;
	case HFI_MSG_SESSION_CVP_DS:
	case HFI_MSG_SESSION_CVP_DFS:
		pkt_func = (pkt_func_def)hfi_process_session_cvp_dfs;
		break;
	case HFI_MSG_SESSION_CVP_DME:
		pkt_func = (pkt_func_def)hfi_process_session_cvp_dme;
		break;
	case HFI_MSG_SESSION_CVP_SET_PERSIST_BUFFERS:
		pkt_func = (pkt_func_def)hfi_process_session_cvp_persist;
		break;
	case HFI_MSG_SESSION_CVP_DS:
		pkt_func = (pkt_func_def)hfi_process_session_cvp_msg;
		break;
	default:
+3 −3
Original line number Diff line number Diff line
@@ -520,7 +520,7 @@ static int msm_cvp_session_process_hfi_fence(
	int rc = 0;
	char thread_fence_name[32];

	dprintk(CVP_DBG, "%s:: Enter inst = %d", __func__, inst);
	dprintk(CVP_DBG, "%s:: Enter inst = %pK", __func__, inst);
	if (!inst || !inst->core || !arg) {
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
		return -EINVAL;
@@ -567,7 +567,7 @@ static int msm_cvp_session_cvp_dme_frame_response(
{
	int rc = 0;

	dprintk(CVP_DBG, "%s:: Enter inst = %d", __func__, inst);
	dprintk(CVP_DBG, "%s:: Enter inst = %pK", __func__, inst);

	if (!inst || !inst->core || !dme_frame) {
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
@@ -588,7 +588,7 @@ static int msm_cvp_session_cvp_persist_response(
{
	int rc = 0;

	dprintk(CVP_DBG, "%s:: Enter inst = %d", __func__, inst);
	dprintk(CVP_DBG, "%s:: Enter inst = %pK", __func__, inst);

	if (!inst || !inst->core || !pbuf_cmd) {
		dprintk(CVP_ERR, "%s: invalid params\n", __func__);
+8 −0
Original line number Diff line number Diff line
@@ -806,6 +806,14 @@ void cvp_handle_cmd_response(enum hal_command_response cmd, void *data)
	case HAL_SESSION_DME_BASIC_CONFIG_CMD_DONE:
	case HAL_SESSION_DME_FRAME_CMD_DONE:
	case HAL_SESSION_PERSIST_CMD_DONE:
	case HAL_SESSION_TME_CONFIG_CMD_DONE:
	case HAL_SESSION_ODT_CONFIG_CMD_DONE:
	case HAL_SESSION_OD_CONFIG_CMD_DONE:
	case HAL_SESSION_NCC_CONFIG_CMD_DONE:
	case HAL_SESSION_ICA_CONFIG_CMD_DONE:
	case HAL_SESSION_HCD_CONFIG_CMD_DONE:
	case HAL_SESSION_DCM_CONFIG_CMD_DONE:
	case HAL_SESSION_PYS_HCD_CONFIG_CMD_DONE:
		cvp_handle_session_cmd_done(cmd, data);
		break;
	default:
+2 −1
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ void *msm_cvp_open(int core_id, int session_type)
		goto err_invalid_core;
	}

	pr_info(CVP_DBG_TAG "Opening video instance: %pK, %d\n",
	pr_info(CVP_DBG_TAG "Opening CVP instance: %pK, %d\n",
		"info", inst, session_type);
	mutex_init(&inst->sync_lock);
	mutex_init(&inst->bufq[CAPTURE_PORT].lock);
@@ -590,6 +590,7 @@ void *msm_cvp_open(int core_id, int session_type)
	inst->clk_data.sys_cache_bw = 0;
	inst->clk_data.bitrate = 0;
	inst->clk_data.core_id = CVP_CORE_ID_DEFAULT;
	inst->deprecate_bitmask = 0;

	for (i = SESSION_MSG_INDEX(SESSION_MSG_START);
		i <= SESSION_MSG_INDEX(SESSION_MSG_END); i++) {
Loading