Browse Source

msm: eva: Build EVA driver in eCRM

Enabling EVA build in CRM environment. The setup can be used
to sanity check future changes.

Change-Id: If18abf7212c768c07e550678109d90d0c8519478
Signed-off-by: George Shen <[email protected]>
George Shen 4 years ago
parent
commit
c5c6c1545c
6 changed files with 253 additions and 6 deletions
  1. 4 0
      Makefile
  2. 2 2
      config/waipioeva.conf
  3. 1 1
      config/waipioevaconf.h
  4. 245 0
      include/uapi/eva/media/msm_cvp_private.h
  5. 1 1
      msm/eva/msm_cvp.c
  6. 0 2
      readme.txt

+ 4 - 0
Makefile

@@ -8,4 +8,8 @@ LINUXINCLUDE    += -include $(srctree)/techpack/eva/config/waipioevaconf.h
 endif
 endif
 
+LINUXINCLUDE    += -I$(srctree)/techpack/eva/include \
+                   -I$(srctree)/techpack/eva/include/uapi \
+		   -I$(srctree)/techpack/eva/include/uapi/eva
+
 obj-y +=msm/

+ 2 - 2
config/waipioeva.conf

@@ -1,5 +1,5 @@
 ifeq ($(CONFIG_QGKI),y)
-export CONFIG_MSM_EVA=n
+export CONFIG_MSM_EVA=y
 else
-export CONFIG_MSM_EVA=n
+export CONFIG_MSM_EVA=m
 endif

+ 1 - 1
config/waipioevaconf.h

@@ -3,4 +3,4 @@
  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
  */
 
-#define CONFIG_MSM_EVA 0
+#define CONFIG_MSM_EVA 1

+ 245 - 0
include/uapi/eva/media/msm_cvp_private.h

@@ -0,0 +1,245 @@
+/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
+/*
+ * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
+ */
+#ifndef __MSM_CVP_PRIVATE_H__
+#define __MSM_CVP_PRIVATE_H__
+
+#include <linux/types.h>
+
+/* Commands type */
+#define CVP_KMD_CMD_BASE		0x10000000
+#define CVP_KMD_CMD_START		(CVP_KMD_CMD_BASE + 0x1000)
+
+/*
+ * userspace clients pass one of the below arguments type
+ * in struct cvp_kmd_arg (@type field).
+ */
+
+/*
+ * CVP_KMD_GET_SESSION_INFO - this argument type is used to
+ *          get the session information from driver. it passes
+ *          struct cvp_kmd_session_info {}
+ */
+#define CVP_KMD_GET_SESSION_INFO	(CVP_KMD_CMD_START + 1)
+
+/*
+ * CVP_KMD_REGISTER_BUFFER - this argument type is used to
+ *          register the buffer to driver. it passes
+ *          struct cvp_kmd_buffer {}
+ */
+#define CVP_KMD_REGISTER_BUFFER		(CVP_KMD_CMD_START + 3)
+
+/*
+ * CVP_KMD_REGISTER_BUFFER - this argument type is used to
+ *          unregister the buffer to driver. it passes
+ *          struct cvp_kmd_buffer {}
+ */
+#define CVP_KMD_UNREGISTER_BUFFER	(CVP_KMD_CMD_START + 4)
+
+#define CVP_KMD_UPDATE_POWER	(CVP_KMD_CMD_START + 17)
+
+#define CVP_KMD_SEND_CMD_PKT	(CVP_KMD_CMD_START + 64)
+
+#define CVP_KMD_RECEIVE_MSG_PKT	 (CVP_KMD_CMD_START + 65)
+
+#define CVP_KMD_SET_SYS_PROPERTY	(CVP_KMD_CMD_START + 66)
+
+#define CVP_KMD_GET_SYS_PROPERTY	(CVP_KMD_CMD_START + 67)
+
+#define CVP_KMD_SESSION_CONTROL		(CVP_KMD_CMD_START + 68)
+
+#define CVP_KMD_SEND_FENCE_CMD_PKT	(CVP_KMD_CMD_START + 69)
+
+#define CVP_KMD_FLUSH_ALL	(CVP_KMD_CMD_START + 70)
+
+#define CVP_KMD_FLUSH_FRAME	(CVP_KMD_CMD_START + 71)
+
+/* flags */
+#define CVP_KMD_FLAG_UNSECURE			0x00000000
+#define CVP_KMD_FLAG_SECURE			0x00000001
+
+/* buffer type */
+#define CVP_KMD_BUFTYPE_INPUT			0x00000001
+#define CVP_KMD_BUFTYPE_OUTPUT			0x00000002
+#define CVP_KMD_BUFTYPE_INTERNAL_1		0x00000003
+#define CVP_KMD_BUFTYPE_INTERNAL_2		0x00000004
+
+
+/**
+ * struct cvp_kmd_session_info - session information
+ * @session_id:    current session id
+ */
+struct cvp_kmd_session_info {
+	__u32 session_id;
+	__u32 reserved[10];
+};
+
+/**
+ * struct cvp_kmd_buffer - buffer information to be registered
+ * @index:         index of buffer
+ * @type:          buffer type
+ * @fd:            file descriptor of buffer
+ * @size:          allocated size of buffer
+ * @offset:        offset in fd from where usable data starts
+ * @pixelformat:   fourcc format
+ * @flags:         buffer flags
+ */
+struct cvp_kmd_buffer {
+	__u32 index;
+	__u32 type;
+	__u32 fd;
+	__u32 size;
+	__u32 offset;
+	__u32 pixelformat;
+	__u32 flags;
+	__u32 reserved[5];
+};
+
+/**
+ * struct cvp_kmd_send_cmd - sending generic HFI command
+ * @cmd_address_fd:   file descriptor of cmd_address
+ * @cmd_size:         allocated size of buffer
+ */
+struct cvp_kmd_send_cmd {
+	__u32 cmd_address_fd;
+	__u32 cmd_size;
+	__u32 reserved[10];
+};
+
+/**
+ * struct cvp_kmd_client_data - store generic client
+ *                              data
+ * @transactionid:  transaction id
+ * @client_data1:   client data to be used during callback
+ * @client_data2:   client data to be used during callback
+ */
+struct cvp_kmd_client_data {
+	__u32 transactionid;
+	__u32 client_data1;
+	__u32 client_data2;
+};
+
+
+#define	MAX_HFI_PKT_SIZE	470
+
+struct cvp_kmd_hfi_packet {
+	__u32 pkt_data[MAX_HFI_PKT_SIZE];
+};
+
+#define CVP_KMD_PROP_HFI_VERSION	1
+#define CVP_KMD_PROP_SESSION_TYPE	2
+#define CVP_KMD_PROP_SESSION_KERNELMASK	3
+#define CVP_KMD_PROP_SESSION_PRIORITY	4
+#define CVP_KMD_PROP_SESSION_SECURITY	5
+#define CVP_KMD_PROP_SESSION_DSPMASK	6
+
+#define CVP_KMD_PROP_PWR_FDU	0x10
+#define CVP_KMD_PROP_PWR_ICA	0x11
+#define CVP_KMD_PROP_PWR_OD	0x12
+#define CVP_KMD_PROP_PWR_MPU	0x13
+#define CVP_KMD_PROP_PWR_FW	0x14
+#define CVP_KMD_PROP_PWR_DDR	0x15
+#define CVP_KMD_PROP_PWR_SYSCACHE	0x16
+#define CVP_KMD_PROP_PWR_FDU_OP	0x17
+#define CVP_KMD_PROP_PWR_ICA_OP	0x18
+#define CVP_KMD_PROP_PWR_OD_OP	0x19
+#define CVP_KMD_PROP_PWR_MPU_OP	0x1A
+#define CVP_KMD_PROP_PWR_FW_OP	0x1B
+#define CVP_KMD_PROP_PWR_DDR_OP	0x1C
+#define CVP_KMD_PROP_PWR_SYSCACHE_OP	0x1D
+
+#define MAX_KMD_PROP_NUM_PER_PACKET		8
+#define MAX_KMD_PROP_TYPE	(CVP_KMD_PROP_PWR_SYSCACHE_OP + 1)
+
+struct cvp_kmd_sys_property {
+	__u32 prop_type;
+	__u32 data;
+};
+
+struct cvp_kmd_sys_properties {
+	__u32 prop_num;
+	struct cvp_kmd_sys_property prop_data[8];
+};
+
+#define SESSION_CREATE	1
+#define SESSION_DELETE	2
+#define SESSION_START	3
+#define SESSION_STOP	4
+#define SESSION_INFO	5
+
+struct cvp_kmd_session_control {
+	__u32 ctrl_type;
+	__u32 ctrl_data[8];
+};
+
+#define MAX_HFI_FENCE_SIZE	16
+#define MAX_HFI_FENCE_OFFSET	(MAX_HFI_PKT_SIZE-MAX_HFI_FENCE_SIZE)
+struct cvp_kmd_hfi_fence_packet {
+	__u32 pkt_data[MAX_HFI_FENCE_OFFSET];
+	__u32 fence_data[MAX_HFI_FENCE_SIZE];
+	__u64 frame_id;
+};
+
+struct cvp_kmd_fence {
+	__s32 h_synx;
+	__u32 secure_key;
+};
+
+struct cvp_kmd_fence_ctrl {
+	__u32 magic;
+	__u32 reserved;
+	__u64 frame_id;
+	__u32 num_fences;
+	__u32 output_index;
+	struct cvp_kmd_fence fences[MAX_HFI_FENCE_SIZE/2];
+};
+
+#define MAX_FENCE_DATA_SIZE	(MAX_HFI_FENCE_SIZE + 6)
+
+struct cvp_kmd_hfi_synx_packet {
+	__u32 pkt_data[MAX_HFI_PKT_SIZE];
+	union {
+		__u32 fence_data[MAX_FENCE_DATA_SIZE];
+		struct cvp_kmd_fence_ctrl fc;
+	};
+};
+
+/**
+ * struct cvp_kmd_arg
+ *
+ * @type:          command type
+ * @buf_offset:    offset to buffer list in the command
+ * @buf_num:       number of buffers in the command
+ * @session:       session information
+ * @req_power:     power information
+ * @regbuf:        buffer to be registered
+ * @unregbuf:      buffer to be unregistered
+ * @send_cmd:      sending generic HFI command
+
+ * @hfi_pkt:       HFI packet created by user library
+ * @sys_properties System properties read or set by user library
+ * @hfi_fence_pkt: HFI fence packet created by user library
+ */
+struct cvp_kmd_arg {
+	__u32 type;
+	__u32 buf_offset;
+	__u32 buf_num;
+	union cvp_data_t {
+		struct cvp_kmd_session_info session;
+		struct cvp_kmd_buffer regbuf;
+		struct cvp_kmd_buffer unregbuf;
+		struct cvp_kmd_send_cmd send_cmd;
+		struct cvp_kmd_hfi_packet hfi_pkt;
+		struct cvp_kmd_sys_properties sys_properties;
+		struct cvp_kmd_hfi_fence_packet hfi_fence_pkt;
+		struct cvp_kmd_hfi_synx_packet hfi_synx_pkt;
+		struct cvp_kmd_session_control session_ctrl;
+		__u64 frame_id;
+	} data;
+};
+
+struct cvp_kmd_request_power {
+	__u32 deprecated;
+};
+#endif

+ 1 - 1
msm/eva/msm_cvp.c

@@ -1122,7 +1122,7 @@ static int msm_cvp_set_sysprop(struct msm_cvp_inst *inst,
 		return -EINVAL;
 	}
 
-	if (props->prop_num >= MAX_KMD_PROP_NUM) {
+	if (props->prop_num >= MAX_KMD_PROP_NUM_PER_PACKET) {
 		dprintk(CVP_ERR, "Too many properties %d to set\n",
 			props->prop_num);
 		return -E2BIG;

+ 0 - 2
readme.txt

@@ -1,2 +0,0 @@
-kernel driver component for EVA (engine for video analytics)
-to be included in the vendor SI , and for EVA tech pack