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

Commit fb244f46 authored by George Shen's avatar George Shen
Browse files

msm: cvp: Complete CVP feature support in kernel



Prepare to enable all CVP features by user mode.

Change-Id: I53104a4d44bcdbb3b31f2892431e17bdb7526a3c
Signed-off-by: default avatarGeorge Shen <sqiao@codeaurora.org>
parent 62a4f0ac
Loading
Loading
Loading
Loading
+123 −0
Original line number Diff line number Diff line
@@ -87,6 +87,118 @@ const struct msm_cvp_hfi_defs cvp_hfi_defs[] = {
		.buf_num = HFI_DS_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_OF_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_TME_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_TME_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_OF_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_TME_FRAME,
		.buf_offset = HFI_OF_BUFFERS_OFFSET,
		.buf_num = HFI_OF_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_ODT_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_ODT_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_ODT_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_ODT_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_ODT_FRAME,
		.buf_offset = HFI_ODT_BUFFERS_OFFSET,
		.buf_num = HFI_ODT_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_OD_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_OD_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_OD_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_OD_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_CV_OD_FRAME,
		.buf_offset = HFI_OD_BUFFERS_OFFSET,
		.buf_num = HFI_OD_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_NCC_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_NCC_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_NCC_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_NCC_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_NCC_FRAME,
		.buf_offset = HFI_NCC_BUFFERS_OFFSET,
		.buf_num = HFI_NCC_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_ICA_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_ICA_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_ICA_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_ICA_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_ICA_FRAME,
		.buf_offset = HFI_ICA_BUFFERS_OFFSET,
		.buf_num = HFI_ICA_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_HCD_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_HCD_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_HCD_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_HCD_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_HCD_FRAME,
		.buf_offset = HFI_HCD_BUFFERS_OFFSET,
		.buf_num = HFI_HCD_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_DCM_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_DCM_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_DCM_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_DCM_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_DCM_FRAME,
		.buf_offset = HFI_DCM_BUFFERS_OFFSET,
		.buf_num = HFI_DCM_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
	{
		.size = HFI_PYS_HCD_CONFIG_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_PYS_HCD_CONFIG,
		.buf_offset = 0,
		.buf_num = 0,
		.resp = HAL_SESSION_PYS_HCD_CONFIG_CMD_DONE,
	},
	{
		.size = HFI_PYS_HCD_FRAME_CMD_SIZE,
		.type = HFI_CMD_SESSION_CVP_PYS_HCD_FRAME,
		.buf_offset = HFI_PYS_HCD_BUFFERS_OFFSET,
		.buf_num = HFI_PYS_HCD_BUF_NUM,
		.resp = HAL_NO_RESP,
	},
};

static struct hal_device_data hal_ctxt;
@@ -204,6 +316,17 @@ int get_pkt_index(struct cvp_hal_session_cmd_pkt *hdr)
	return -EINVAL;
}

int get_signal_from_pkt_type(unsigned int type)
{
	int i, pkt_num = ARRAY_SIZE(cvp_hfi_defs);

	for (i = 0; i < pkt_num; i++)
		if (cvp_hfi_defs[i].type == type)
			return cvp_hfi_defs[i].resp;

	return -EINVAL;
}

static void __dump_packet(u8 *packet, enum cvp_msg_prio log_level)
{
	u32 c = 0, packet_size = *(u32 *)packet;
+26 −10
Original line number Diff line number Diff line
@@ -272,10 +272,6 @@
	(HFI_CMD_SESSION_CVP_START + 0x00B)
#define  HFI_CMD_SESSION_CVP_DFS_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x00C)
#define  HFI_CMD_SESSION_CVP_TME_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x00D)
#define  HFI_CMD_SESSION_CVP_TME_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x00E)
#define  HFI_CMD_SESSION_CVP_FTEXT\
	(HFI_CMD_SESSION_CVP_START + 0x00F)

@@ -292,12 +288,10 @@
	(HFI_CMD_SESSION_CVP_START + 0x014)

/* ===========USECASE OPERATIONS===============*/
#define HFI_CMD_SESSION_CVP_ODT\
	(HFI_CMD_SESSION_CVP_START + 0x015)
#define HFI_CMD_SESSION_CVP_PYS_HCD_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x016)
#define HFI_CMD_SESSION_CVP_PYS_HCD_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x017)
#define  HFI_CMD_SESSION_CVP_DCM_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x034)
#define  HFI_CMD_SESSION_CVP_DCM_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x035)

#define  HFI_CMD_SESSION_CVP_DME_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x039)
@@ -306,8 +300,30 @@
#define  HFI_CMD_SESSION_CVP_DME_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x03A)

#define  HFI_CMD_SESSION_CVP_CV_TME_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x047)
#define  HFI_CMD_SESSION_CVP_CV_TME_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x048)
#define  HFI_CMD_SESSION_CVP_CV_OD_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x049)
#define  HFI_CMD_SESSION_CVP_CV_OD_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x04A)
#define  HFI_CMD_SESSION_CVP_CV_ODT_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x04B)
#define  HFI_CMD_SESSION_CVP_CV_ODT_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x04C)

#define  HFI_CMD_SESSION_CVP_SET_PERSIST_BUFFERS\
	(HFI_CMD_SESSION_CVP_START + 0x04D)
#define HFI_CMD_SESSION_CVP_PYS_HCD_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x050)
#define HFI_CMD_SESSION_CVP_PYS_HCD_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x051)
#define  HFI_CMD_SESSION_CVP_ICA_FRAME\
	(HFI_CMD_SESSION_CVP_START + 0x100)
#define  HFI_CMD_SESSION_CVP_ICA_CONFIG\
	(HFI_CMD_SESSION_CVP_START + 0x101)


#define HFI_MSG_SYS_OX_START			\
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x0000)
+48 −0
Original line number Diff line number Diff line
@@ -76,6 +76,45 @@
#define HFI_DS_BUFFERS_OFFSET	48
#define HFI_DS_BUF_NUM	3

#define HFI_OF_CONFIG_CMD_SIZE 34
#define HFI_OF_FRAME_CMD_SIZE 24
#define HFI_OF_BUFFERS_OFFSET 8
#define HFI_OF_BUF_NUM 8

#define HFI_ODT_CONFIG_CMD_SIZE 23
#define HFI_ODT_FRAME_CMD_SIZE 33
#define HFI_ODT_BUFFERS_OFFSET 11
#define HFI_ODT_BUF_NUM 11

#define HFI_OD_CONFIG_CMD_SIZE 24
#define HFI_OD_FRAME_CMD_SIZE 12
#define HFI_OD_BUFFERS_OFFSET 6
#define HFI_OD_BUF_NUM 3

#define HFI_NCC_CONFIG_CMD_SIZE 47
#define HFI_NCC_FRAME_CMD_SIZE 22
#define HFI_NCC_BUFFERS_OFFSET 8
#define HFI_NCC_BUF_NUM 7

#define HFI_ICA_CONFIG_CMD_SIZE 127
#define HFI_ICA_FRAME_CMD_SIZE 14
#define HFI_ICA_BUFFERS_OFFSET 6
#define HFI_ICA_BUF_NUM 4

#define HFI_HCD_CONFIG_CMD_SIZE 46
#define HFI_HCD_FRAME_CMD_SIZE 18
#define HFI_HCD_BUFFERS_OFFSET 12
#define HFI_HCD_BUF_NUM 3

#define HFI_DCM_CONFIG_CMD_SIZE 20
#define HFI_DCM_FRAME_CMD_SIZE 19
#define HFI_DCM_BUFFERS_OFFSET 9
#define HFI_DCM_BUF_NUM 5

#define HFI_PYS_HCD_CONFIG_CMD_SIZE 661
#define HFI_PYS_HCD_FRAME_CMD_SIZE 86
#define HFI_PYS_HCD_BUFFERS_OFFSET 6
#define HFI_PYS_HCD_BUF_NUM 36

enum cvp_status {
	CVP_ERR_NONE = 0x0,
@@ -1135,6 +1174,14 @@ enum hal_command_response {
	HAL_SESSION_DME_CONFIG_CMD_DONE,
	HAL_SESSION_DME_BASIC_CONFIG_CMD_DONE,
	HAL_SESSION_DME_FRAME_CMD_DONE,
	HAL_SESSION_TME_CONFIG_CMD_DONE,
	HAL_SESSION_ODT_CONFIG_CMD_DONE,
	HAL_SESSION_OD_CONFIG_CMD_DONE,
	HAL_SESSION_NCC_CONFIG_CMD_DONE,
	HAL_SESSION_ICA_CONFIG_CMD_DONE,
	HAL_SESSION_HCD_CONFIG_CMD_DONE,
	HAL_SESSION_DCM_CONFIG_CMD_DONE,
	HAL_SESSION_PYS_HCD_CONFIG_CMD_DONE,
	HAL_SESSION_PERSIST_CMD_DONE,
	HAL_SESSION_PROPERTY_INFO,
	HAL_SESSION_ERROR,
@@ -1501,6 +1548,7 @@ void cvp_hfi_deinitialize(enum msm_cvp_hfi_type hfi_type,
			struct hfi_device *hdev);

int get_pkt_index(struct cvp_hal_session_cmd_pkt *hdr);
int get_signal_from_pkt_type(unsigned int type);
extern const struct msm_cvp_hfi_defs cvp_hfi_defs[];

#endif /*__CVP_HFI_API_H__ */
+6 −1
Original line number Diff line number Diff line
@@ -414,7 +414,12 @@ int cvp_create_pkt_cmd_session_send(
		return -EINVAL;

	def_idx = get_pkt_index(ptr);
	if (def_idx < 0)
	if (def_idx < 0 && ptr->size < MAX_HFI_PKT_SIZE * sizeof(u32)) {
		memcpy(out_pkt, in_pkt, ptr->size);
		return 0;
	}

	if (ptr->size > MAX_HFI_PKT_SIZE * sizeof(unsigned int))
		goto error_hfi_packet;

	if (cvp_hfi_defs[def_idx].type != ptr->packet_type)
+6 −11
Original line number Diff line number Diff line
@@ -662,6 +662,7 @@ static int hfi_process_session_cvp_operation_config(u32 device_id,
	struct msm_cvp_cb_info *info)
{
	struct msm_cvp_cb_cmd_done cmd_done = {0};
	int signal;

	if (!pkt) {
		dprintk(CVP_ERR, "%s: invalid param\n", __func__);
@@ -681,21 +682,14 @@ static int hfi_process_session_cvp_operation_config(u32 device_id,
		"%s: device_id=%d status=%d, sessionid=%x config=%x\n",
		__func__, device_id, cmd_done.status,
		cmd_done.session_id, pkt->op_conf_id);
	switch (pkt->op_conf_id) {
	case HFI_CMD_SESSION_CVP_DFS_CONFIG:
	info->response_type = HAL_SESSION_DFS_CONFIG_CMD_DONE;
		break;
	case HFI_CMD_SESSION_CVP_DME_CONFIG:
		info->response_type = HAL_SESSION_DME_CONFIG_CMD_DONE;
		break;
	case HFI_CMD_SESSION_CVP_DME_BASIC_CONFIG:
		info->response_type = HAL_SESSION_DME_BASIC_CONFIG_CMD_DONE;
		break;
	default:

	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;
	}

	info->response_type = signal;
	info->response.cmd = cmd_done;
	return 0;
}
@@ -998,6 +992,7 @@ int cvp_hfi_process_msg_packet(u32 device_id,
	default:
		dprintk(CVP_DBG, "Unable to parse message: %#x\n",
				msg_hdr->packet);
		pkt_func = (pkt_func_def)hfi_process_session_cvp_msg;
		break;
	}

Loading