Merge "msm: cvp: Fence path for Lahaina"

This commit is contained in:
qctecmdr 2019-12-17 21:46:53 -08:00 • committed by Gerrit - the friendly Code Review server
commit ea80f74288
11 changed files with 543 additions and 890 deletions

View file

@ -34,6 +34,7 @@
#define FIRMWARE_SIZE 0X00A00000
#define REG_ADDR_OFFSET_BITMASK 0x000FFFFF
#define QDSS_IOVA_START 0x80001000
#define MIN_PAYLOAD_SIZE 3
const struct msm_cvp_hfi_defs cvp_hfi_defs[] = {
{
@ -346,32 +347,6 @@ int get_pkt_index(struct cvp_hal_session_cmd_pkt *hdr)
return -EINVAL;
}
int set_feature_bitmask(int pkt_idx, unsigned long *bitmask)
{
if (!bitmask) {
dprintk(CVP_ERR, "%s: invalid bitmask\n", __func__);
return -EINVAL;
}
if (cvp_hfi_defs[pkt_idx].type == HFI_CMD_SESSION_CVP_DME_FRAME) {
set_bit(DME_BIT_OFFSET, bitmask);
return 0;
}
if (cvp_hfi_defs[pkt_idx].type == HFI_CMD_SESSION_CVP_ICA_FRAME) {
set_bit(ICA_BIT_OFFSET, bitmask);
return 0;
}
if (cvp_hfi_defs[pkt_idx].type == HFI_CMD_SESSION_CVP_FD_FRAME) {
set_bit(FD_BIT_OFFSET, bitmask);
return 0;
}
dprintk(CVP_ERR, "%s: invalid pkt_idx %d\n", __func__, pkt_idx);
return -EINVAL;
}
int get_hfi_version(void)
{
struct msm_cvp_core *core;
@ -1201,20 +1176,13 @@ static int __tzbsp_set_cvp_state(enum tzbsp_subsys_state state)
int rc = 0;
rc = qcom_scm_set_remote_state(state, TZBSP_CVP_PAS_ID);
dprintk(CVP_DBG, "Set state %d, resp %d\n", state, rc);
if (rc < 0) {
if (rc) {
dprintk(CVP_ERR, "Failed qcom_scm_set_remote_state %d\n", rc);
return rc;
}
dprintk(CVP_DBG, "Set state %d, resp %d\n", state, rc);
if (rc) {
dprintk(CVP_ERR,
"Failed to set cvp core state to suspend: %d\n",
rc);
return -EINVAL;
}
return 0;
}
@ -2896,15 +2864,35 @@ static void __flush_debug_queue(struct iris_hfi_device *device, u8 *packet)
log_level = CVP_ERR;
}
while (!__iface_dbgq_read(device, packet)) {
struct cvp_hfi_msg_sys_coverage_packet *pkt =
(struct cvp_hfi_msg_sys_coverage_packet *) packet;
#define SKIP_INVALID_PKT(pkt_size, payload_size, pkt_hdr_size) ({ \
if (pkt_size < pkt_hdr_size || \
payload_size < MIN_PAYLOAD_SIZE || \
payload_size > \
(pkt_size - pkt_hdr_size + sizeof(u8))) { \
dprintk(CVP_ERR, \
"%s: invalid msg size - %d\n", \
__func__, pkt->msg_size); \
continue; \
} \
})
if (pkt->packet_type == HFI_MSG_SYS_COV) {
dprintk(CVP_ERR, "STM_LOG not supported\n");
} else {
while (!__iface_dbgq_read(device, packet)) {
struct cvp_hfi_packet_header *pkt =
(struct cvp_hfi_packet_header *) packet;
if (pkt->size < sizeof(struct cvp_hfi_packet_header)) {
dprintk(CVP_ERR, "Invalid pkt size - %s\n",
__func__);
continue;
}
if (pkt->packet_type == HFI_MSG_SYS_DEBUG) {
struct cvp_hfi_msg_sys_debug_packet *pkt =
(struct cvp_hfi_msg_sys_debug_packet *) packet;
SKIP_INVALID_PKT(pkt->size,
pkt->msg_size, sizeof(*pkt));
/*
* All fw messages starts with new line character. This
* causes dprintk to print this message in two lines
@ -2912,9 +2900,11 @@ static void __flush_debug_queue(struct iris_hfi_device *device, u8 *packet)
* from the message fixes this to print it in a single
* line.
*/
pkt->rg_msg_data[pkt->msg_size-1] = '\0';
dprintk(log_level, "%s", &pkt->rg_msg_data[1]);
}
}
#undef SKIP_INVALID_PKT
if (local_packet)
kfree(packet);

View file

@ -98,12 +98,6 @@
#define HFI_MODEL_BUFFERS_OFFSET 7
#define HFI_MODEL_BUF_NUM 1
#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)
#define ICA_BIT_OFFSET (CVP_KMD_HFI_ICA_FRAME_CMD - CVP_KMD_CMD_START)
#define FD_BIT_OFFSET (CVP_KMD_HFI_FD_FRAME_CMD - CVP_KMD_CMD_START)
#define HFI_VERSION_MAJOR_MASK 0xFF000000
#define HFI_VERSION_MAJOR_SHFIT 24
#define HFI_VERSION_MINOR_MASK 0x00FFFFE0
@ -428,7 +422,6 @@ void cvp_hfi_deinitialize(enum msm_cvp_hfi_type hfi_type,
int get_pkt_index(struct cvp_hal_session_cmd_pkt *hdr);
int get_signal_from_pkt_type(unsigned int type);
int set_feature_bitmask(int pkt_index, unsigned long *bitmask);
int get_hfi_version(void);
unsigned int get_msg_size(void);
unsigned int get_msg_session_id(void *msg);

View file

@ -285,11 +285,16 @@ struct cvp_hfi_client {
u32 transaction_id;
u32 data1;
u32 data2;
u32 kdata1;
u32 kdata2;
union {
u64 kdata;
struct {
u32 kdata1;
u32 kdata2;
};
};
u32 reserved1;
u32 reserved2;
};
} __packed;
struct cvp_hfi_client_d {
u32 transaction_id;
@ -317,7 +322,7 @@ struct cvp_hfi_cmd_session_set_buffers_packet {
u32 session_id;
struct cvp_hfi_client client_data;
struct cvp_hfi_buf_type buf_type;
};
} __packed;
struct cvp_hfi_cmd_session_set_buffers_packet_d {
u32 size;
@ -337,7 +342,7 @@ struct cvp_session_release_buffers_packet {
u32 buffer_type;
u32 num_buffers;
u32 buffer_idx;
};
} __packed;
struct cvp_session_release_buffers_packet_d {
u32 size;
@ -355,7 +360,7 @@ struct cvp_hfi_cmd_session_hdr {
u32 session_id;
struct cvp_hfi_client client_data;
u32 stream_idx;
};
} __packed;
struct cvp_hfi_msg_session_hdr {
u32 size;
@ -364,7 +369,7 @@ struct cvp_hfi_msg_session_hdr {
u32 error_type;
struct cvp_hfi_client client_data;
u32 stream_idx;
};
} __packed;
struct cvp_hfi_msg_session_hdr_d {
u32 size;
@ -415,7 +420,7 @@ struct cvp_hfi_msg_session_op_cfg_packet {
struct cvp_hfi_client client_data;
u32 stream_idx;
u32 op_conf_id;
};
} __packed;
struct cvp_hfi_msg_release_buffer_ref_event_packet {
u32 packet_buffer;
@ -479,13 +484,9 @@ struct cvp_hfi_msg_sys_debug_packet {
u8 rg_msg_data[1];
};
struct cvp_hfi_msg_sys_coverage_packet {
struct cvp_hfi_packet_header {
u32 size;
u32 packet_type;
u32 msg_size;
u32 time_stamp_hi;
u32 time_stamp_lo;
u8 rg_msg_data[1];
};
struct cvp_hfi_sfr_struct {

View file

@ -17,11 +17,6 @@
extern struct msm_cvp_drv *cvp_driver;
static int _deprecated_hfi_msg_process(u32 device_id,
struct cvp_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;
@ -450,6 +445,7 @@ static int hfi_process_session_cvp_msg(u32 device_id,
struct msm_cvp_inst *inst = NULL;
struct msm_cvp_core *core;
void *session_id;
struct cvp_session_queue *sq;
if (!pkt) {
dprintk(CVP_ERR, "%s: invalid param\n", __func__);
@ -467,24 +463,10 @@ static int hfi_process_session_cvp_msg(u32 device_id,
return -EINVAL;
}
if (inst->deprecate_bitmask) {
if (pkt->packet_type == HFI_MSG_SESSION_CVP_DME
|| pkt->packet_type == HFI_MSG_SESSION_CVP_ICA
|| pkt->packet_type == HFI_MSG_SESSION_CVP_FD) {
u64 ktid;
u32 kdata1, kdata2;
kdata1 = pkt->client_data.kdata1;
kdata2 = pkt->client_data.kdata2;
ktid = ((u64)kdata2 << 32) | kdata1;
msm_cvp_unmap_buf_cpu(inst, ktid);
return _deprecated_hfi_msg_process(device_id,
pkt, info, inst);
}
dprintk(CVP_ERR, "Invalid deprecate_bitmask %#x\n",
inst->deprecate_bitmask);
}
if (pkt->client_data.kdata & FENCE_BIT)
sq = &inst->session_queue_fence;
else
sq = &inst->session_queue;
sess_msg = kmem_cache_alloc(cvp_driver->msg_cache, GFP_KERNEL);
if (sess_msg == NULL) {
@ -499,139 +481,27 @@ static int hfi_process_session_cvp_msg(u32 device_id,
__func__, pkt->packet_type,
hfi_map_err_status(get_msg_errorcode(pkt)), session_id);
spin_lock(&inst->session_queue.lock);
if (inst->session_queue.msg_count >= MAX_NUM_MSGS_PER_SESSION) {
spin_lock(&sq->lock);
if (sq->msg_count >= MAX_NUM_MSGS_PER_SESSION) {
dprintk(CVP_ERR, "Reached session queue size limit\n");
goto error_handle_msg;
}
list_add_tail(&sess_msg->node, &inst->session_queue.msgs);
inst->session_queue.msg_count++;
spin_unlock(&inst->session_queue.lock);
list_add_tail(&sess_msg->node, &sq->msgs);
sq->msg_count++;
spin_unlock(&sq->lock);
wake_up_all(&inst->session_queue.wq);
wake_up_all(&sq->wq);
info->response_type = HAL_NO_RESP;
return 0;
error_handle_msg:
spin_unlock(&inst->session_queue.lock);
spin_unlock(&sq->lock);
kmem_cache_free(cvp_driver->msg_cache, sess_msg);
return -ENOMEM;
}
static int hfi_process_session_cvp_dme(u32 device_id,
struct cvp_hfi_msg_session_hdr *pkt,
struct msm_cvp_cb_info *info)
{
struct msm_cvp_cb_cmd_done cmd_done = {0};
if (!pkt) {
dprintk(CVP_ERR, "%s: invalid param\n", __func__);
return -EINVAL;
} else if (pkt->size < get_msg_size()) {
dprintk(CVP_ERR, "%s: bad_pkt_size %d\n", __func__, pkt->size);
return -E2BIG;
}
cmd_done.device_id = device_id;
cmd_done.session_id = (void *)(uintptr_t)get_msg_session_id(pkt);
cmd_done.status = hfi_map_err_status(get_msg_errorcode(pkt));
cmd_done.size = 0;
dprintk(CVP_DBG,
"%s: device_id=%d cmd_done.status=%d sessionid=%#x\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;
return 0;
}
static int hfi_process_session_cvp_ica(u32 device_id,
struct cvp_hfi_msg_session_hdr *pkt,
struct msm_cvp_cb_info *info)
{
struct msm_cvp_cb_cmd_done cmd_done = {0};
if (!pkt) {
dprintk(CVP_ERR, "%s: invalid param\n", __func__);
return -EINVAL;
} else if (pkt->size < get_msg_size()) {
dprintk(CVP_ERR, "%s: bad_pkt_size %d\n", __func__, pkt->size);
return -E2BIG;
}
cmd_done.device_id = device_id;
cmd_done.session_id = (void *)(uintptr_t)get_msg_session_id(pkt);
cmd_done.status = hfi_map_err_status(get_msg_errorcode(pkt));
cmd_done.size = 0;
dprintk(CVP_DBG,
"%s: device_id=%d cmd_done.status=%d sessionid=%#x\n",
__func__, device_id, cmd_done.status, cmd_done.session_id);
info->response_type = HAL_SESSION_ICA_FRAME_CMD_DONE;
info->response.cmd = cmd_done;
return 0;
}
static int hfi_process_session_cvp_fd(u32 device_id,
struct cvp_hfi_msg_session_hdr *pkt,
struct msm_cvp_cb_info *info)
{
struct msm_cvp_cb_cmd_done cmd_done = {0};
if (!pkt) {
dprintk(CVP_ERR, "%s: invalid param\n", __func__);
return -EINVAL;
} else if (pkt->size < get_msg_size()) {
dprintk(CVP_ERR, "%s: bad_pkt_size %d\n", __func__, pkt->size);
return -E2BIG;
}
cmd_done.device_id = device_id;
cmd_done.session_id = (void *)(uintptr_t)get_msg_session_id(pkt);
cmd_done.status = hfi_map_err_status(get_msg_errorcode(pkt));
cmd_done.size = 0;
dprintk(CVP_DBG,
"%s: device_id=%d cmd_done.status=%d sessionid=%#x\n",
__func__, device_id, cmd_done.status, cmd_done.session_id);
info->response_type = HAL_SESSION_FD_FRAME_CMD_DONE;
info->response.cmd = cmd_done;
return 0;
}
static int _deprecated_hfi_msg_process(u32 device_id,
struct cvp_hfi_msg_session_hdr *pkt,
struct msm_cvp_cb_info *info,
struct msm_cvp_inst *inst)
{
if (pkt->packet_type == HFI_MSG_SESSION_CVP_DME)
if (test_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_ICA)
if (test_bit(ICA_BIT_OFFSET,
&inst->deprecate_bitmask))
return hfi_process_session_cvp_ica(
device_id, (void *)pkt, info);
if (pkt->packet_type == HFI_MSG_SESSION_CVP_FD)
if (test_bit(FD_BIT_OFFSET,
&inst->deprecate_bitmask))
return hfi_process_session_cvp_fd(
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 cvp_hfi_msg_sys_property_info_packet *pkt)
{

File diff suppressed because it is too large Load diff

View file

@ -406,54 +406,6 @@ int wait_for_sess_signal_receipt(struct msm_cvp_inst *inst,
return rc;
}
int wait_for_sess_signal_receipt_fence(struct msm_cvp_inst *inst,
enum hal_command_response cmd)
{
int rc = 0;
struct cvp_hfi_device *hdev;
int retry = FENCE_WAIT_SIGNAL_RETRY_TIMES;
if (!IS_HAL_SESSION_CMD(cmd)) {
dprintk(CVP_ERR, "Invalid inst cmd response: %d\n", cmd);
return -EINVAL;
}
hdev = (struct cvp_hfi_device *)(inst->core->device);
while (retry) {
rc = wait_for_completion_timeout(
&inst->completions[SESSION_MSG_INDEX(cmd)],
msecs_to_jiffies(FENCE_WAIT_SIGNAL_TIMEOUT));
if (!rc) {
enum cvp_event_t event;
unsigned long flags = 0;
spin_lock_irqsave(&inst->event_handler.lock, flags);
event = inst->event_handler.event;
spin_unlock_irqrestore(
&inst->event_handler.lock, flags);
if (event == CVP_SSR_EVENT) {
dprintk(CVP_WARN, "%s: SSR triggered\n",
__func__);
return -ECONNRESET;
}
--retry;
} else {
rc = 0;
break;
}
}
if (!retry) {
dprintk(CVP_WARN, "Wait interrupted or timed out: %d\n",
SESSION_MSG_INDEX(cmd));
call_hfi_op(hdev, flush_debug_queue, hdev->hfi_device_data);
dump_hfi_queue(hdev->hfi_device_data);
rc = -EIO;
}
return rc;
}
static int wait_for_state(struct msm_cvp_inst *inst,
enum instance_state flipped_state,
enum instance_state desired_state,
@ -774,13 +726,6 @@ static void handle_session_close(enum hal_command_response cmd, void *data)
cvp_put_inst(inst);
}
static void handle_operation_config(enum hal_command_response cmd, void *data)
{
dprintk(CVP_ERR,
"%s: is called\n",
__func__);
}
void cvp_handle_cmd_response(enum hal_command_response cmd, void *data)
{
dprintk(CVP_DBG, "Command response = %d\n", cmd);
@ -794,9 +739,6 @@ void cvp_handle_cmd_response(enum hal_command_response cmd, void *data)
case HAL_SESSION_INIT_DONE:
handle_session_init_done(cmd, data);
break;
case HAL_SESSION_CVP_OPERATION_CONFIG:
handle_operation_config(cmd, data);
break;
case HAL_SESSION_RELEASE_RESOURCE_DONE:
handle_release_res_done(cmd, data);
break;

View file

@ -41,8 +41,6 @@ void print_cvp_buffer(u32 tag, const char *str,
struct msm_cvp_internal_buffer *cbuf);
int wait_for_sess_signal_receipt(struct msm_cvp_inst *inst,
enum hal_command_response cmd);
int wait_for_sess_signal_receipt_fence(struct msm_cvp_inst *inst,
enum hal_command_response cmd);
int cvp_comm_set_arp_buffers(struct msm_cvp_inst *inst);
int cvp_comm_release_persist_buffers(struct msm_cvp_inst *inst);
void print_client_buffer(u32 tag, const char *str,

View file

@ -220,7 +220,7 @@ static bool msm_cvp_check_for_inst_overload(struct msm_cvp_core *core)
return overload;
}
static int _init_session_queue(struct msm_cvp_inst *inst)
static int __init_session_queue(struct msm_cvp_inst *inst)
{
spin_lock_init(&inst->session_queue.lock);
INIT_LIST_HEAD(&inst->session_queue.msgs);
@ -230,6 +230,21 @@ static int _init_session_queue(struct msm_cvp_inst *inst)
return 0;
}
static void __init_fence_queue(struct msm_cvp_inst *inst)
{
spin_lock_init(&inst->fence_cmd_queue.lock);
INIT_LIST_HEAD(&inst->fence_cmd_queue.wait_list);
INIT_LIST_HEAD(&inst->fence_cmd_queue.sched_list);
init_waitqueue_head(&inst->fence_cmd_queue.wq);
inst->fence_cmd_queue.state = QUEUE_ACTIVE;
spin_lock_init(&inst->session_queue_fence.lock);
INIT_LIST_HEAD(&inst->session_queue_fence.msgs);
inst->session_queue_fence.msg_count = 0;
init_waitqueue_head(&inst->session_queue_fence.wq);
inst->session_queue_fence.state = QUEUE_ACTIVE;
}
static void _deinit_session_queue(struct msm_cvp_inst *inst)
{
struct cvp_session_msg *msg, *tmpmsg;
@ -295,7 +310,6 @@ void *msm_cvp_open(int core_id, int session_type)
pr_info(CVP_DBG_TAG "Opening cvp instance: %pK\n", "info", inst);
mutex_init(&inst->sync_lock);
mutex_init(&inst->lock);
mutex_init(&inst->fence_lock);
spin_lock_init(&inst->event_handler.lock);
INIT_MSM_CVP_LIST(&inst->persistbufs);
@ -316,7 +330,6 @@ 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 = 0;
inst->deprecate_bitmask = 0;
for (i = SESSION_MSG_INDEX(SESSION_MSG_START);
i <= SESSION_MSG_INDEX(SESSION_MSG_END); i++) {
@ -329,7 +342,9 @@ void *msm_cvp_open(int core_id, int session_type)
list_add_tail(&inst->list, &core->instances);
mutex_unlock(&core->lock);
rc = _init_session_queue(inst);
__init_fence_queue(inst);
rc = __init_session_queue(inst);
if (rc)
goto fail_init;
@ -351,7 +366,6 @@ fail_init:
mutex_unlock(&core->lock);
mutex_destroy(&inst->sync_lock);
mutex_destroy(&inst->lock);
mutex_destroy(&inst->fence_lock);
DEINIT_MSM_CVP_LIST(&inst->persistbufs);
DEINIT_MSM_CVP_LIST(&inst->cvpcpubufs);
@ -400,7 +414,6 @@ int msm_cvp_destroy(struct msm_cvp_inst *inst)
mutex_destroy(&inst->sync_lock);
mutex_destroy(&inst->lock);
mutex_destroy(&inst->fence_lock);
msm_cvp_debugfs_deinit_inst(inst);
_deinit_session_queue(inst);

View file

@ -23,6 +23,7 @@
#include <media/msm_media_info.h>
#include <media/msm_cvp_private.h>
#include "cvp_hfi_api.h"
#include <synx_api.h>
#define MAX_SUPPORTED_INSTANCES 16
#define MAX_NAME_LENGTH 64
@ -30,6 +31,11 @@
#define MAX_DSP_INIT_ATTEMPTS 16
#define FENCE_WAIT_SIGNAL_TIMEOUT 100
#define FENCE_WAIT_SIGNAL_RETRY_TIMES 20
#define FENCE_BIT (1ULL << 63)
#define FENCE_DME_ICA_ENABLED_IDX 0
#define FENCE_DME_DS_IDX 1
#define FENCE_DME_OUTPUT_IDX 7
#define SYS_MSG_START HAL_SYS_INIT_DONE
#define SYS_MSG_END HAL_SYS_ERROR
@ -265,6 +271,7 @@ struct cvp_session_prop {
u32 priority;
u32 is_secure;
u32 dsp_mask;
u32 fthread_nr;
u32 fdu_cycles;
u32 od_cycles;
u32 mpu_cycles;
@ -281,6 +288,14 @@ struct cvp_session_prop {
u32 ddr_op_cache;
};
struct cvp_fence_queue {
spinlock_t lock;
enum queue_state state;
struct list_head wait_list;
wait_queue_head_t wq;
struct list_head sched_list;
};
enum cvp_event_t {
CVP_NO_EVENT,
CVP_SSR_EVENT = 1,
@ -331,6 +346,7 @@ struct msm_cvp_inst {
struct msm_cvp_core *core;
enum session_type session_type;
struct cvp_session_queue session_queue;
struct cvp_session_queue session_queue_fence;
struct cvp_session_event event_handler;
void *session;
enum instance_state state;
@ -346,11 +362,11 @@ struct msm_cvp_inst {
enum msm_cvp_modes flags;
struct msm_cvp_capability capability;
struct kref kref;
unsigned long deprecate_bitmask;
struct cvp_kmd_request_power power;
struct cvp_session_prop prop;
u32 cur_cmd_type;
struct mutex fence_lock;
struct synx_session synx_session_id;
struct cvp_fence_queue fence_cmd_queue;
};
struct msm_cvp_fence_thread_data {
@ -360,6 +376,18 @@ struct msm_cvp_fence_thread_data {
unsigned int arg_type;
};
struct cvp_fence_type {
s32 h_synx;
u32 secure_key;
};
struct cvp_fence_command {
struct list_head list;
u32 type;
u32 synx[MAX_HFI_FENCE_SIZE/2];
struct cvp_hfi_cmd_session_hdr *pkt;
};
extern struct msm_cvp_drv *cvp_driver;
void cvp_handle_cmd_response(enum hal_command_response cmd, void *data);
@ -367,12 +395,6 @@ int msm_cvp_trigger_ssr(struct msm_cvp_core *core,
enum hal_ssr_trigger_type type);
int msm_cvp_noc_error_info(struct msm_cvp_core *core);
enum msm_cvp_flags {
MSM_CVP_FLAG_DEFERRED = BIT(0),
MSM_CVP_FLAG_RBR_PENDING = BIT(1),
MSM_CVP_FLAG_QUEUED = BIT(2),
};
struct msm_cvp_internal_buffer {
struct list_head list;
struct msm_cvp_smem smem;

View file

@ -165,37 +165,6 @@ static int _copy_sysprop_to_user(struct cvp_kmd_arg *kp,
}
static void _set_deprecate_bitmask(struct cvp_kmd_arg *kp,
struct msm_cvp_inst *inst)
{
dprintk(CVP_INFO, "%s: kp->type = %#x\n", __func__, kp->type);
switch (kp->type) {
case CVP_KMD_HFI_DFS_FRAME_CMD:
{
set_bit(DFS_BIT_OFFSET, &inst->deprecate_bitmask);
break;
}
case CVP_KMD_HFI_DME_FRAME_CMD:
{
set_bit(DME_BIT_OFFSET, &inst->deprecate_bitmask);
break;
}
case CVP_KMD_HFI_DME_FRAME_FENCE_CMD:
{
set_bit(DME_BIT_OFFSET, &inst->deprecate_bitmask);
break;
}
case CVP_KMD_HFI_FD_FRAME_CMD:
{
set_bit(FD_BIT_OFFSET, &inst->deprecate_bitmask);
break;
}
default:
break;
}
}
static void print_hfi_short(struct cvp_kmd_arg __user *up)
{
struct cvp_kmd_hfi_packet *pkt;
@ -262,8 +231,6 @@ static int convert_from_user(struct cvp_kmd_arg *kp,
if (get_user(kp->type, &up->type))
return -EFAULT;
_set_deprecate_bitmask(kp, inst);
if (get_user(kp->buf_offset, &up->buf_offset) ||
get_user(kp->buf_num, &up->buf_num))
return -EFAULT;
@ -336,27 +303,7 @@ static int convert_from_user(struct cvp_kmd_arg *kp,
return -EFAULT;
break;
}
case CVP_KMD_HFI_SEND_CMD:
{
struct cvp_kmd_send_cmd *k, *u;
k = &kp->data.send_cmd;
u = &up->data.send_cmd;
if (get_user(k->cmd_address_fd, &u->cmd_address_fd) ||
get_user(k->cmd_size, &u->cmd_size))
return -EFAULT;
for (i = 0; i < 10; i++)
if (get_user(k->reserved[i], &u->reserved[i]))
return -EFAULT;
break;
}
case CVP_KMD_SEND_CMD_PKT:
case CVP_KMD_HFI_DFS_CONFIG_CMD:
case CVP_KMD_HFI_DFS_FRAME_CMD:
case CVP_KMD_HFI_DME_CONFIG_CMD:
case CVP_KMD_HFI_DME_FRAME_CMD:
case CVP_KMD_HFI_PERSIST_CMD:
case CVP_KMD_HFI_FD_FRAME_CMD:
{
if (_get_pkt_hdr_from_user(up, &pkt_hdr)) {
dprintk(CVP_ERR, "Invalid syscall: %x, %x, %x\n",
@ -368,7 +315,6 @@ static int convert_from_user(struct cvp_kmd_arg *kp,
break;
}
case CVP_KMD_SEND_FENCE_CMD_PKT:
case CVP_KMD_HFI_DME_FRAME_FENCE_CMD:
{
if (_get_fence_pkt_hdr_from_user(up, &pkt_hdr)) {
dprintk(CVP_ERR, "Invalid syscall: %x, %x, %x\n",
@ -387,14 +333,9 @@ static int convert_from_user(struct cvp_kmd_arg *kp,
return -EFAULT;
}
set_feature_bitmask(pkt_idx, &inst->deprecate_bitmask);
rc = _copy_fence_pkt_from_user(kp, up, (pkt_hdr.size >> 2));
break;
}
case CVP_KMD_HFI_DFS_FRAME_CMD_RESPONSE:
case CVP_KMD_HFI_DME_FRAME_CMD_RESPONSE:
case CVP_KMD_HFI_PERSIST_CMD_RESPONSE:
case CVP_KMD_RECEIVE_MSG_PKT:
break;
case CVP_KMD_SESSION_CONTROL:
@ -529,33 +470,7 @@ static int convert_to_user(struct cvp_kmd_arg *kp, unsigned long arg)
return -EFAULT;
break;
}
case CVP_KMD_HFI_SEND_CMD:
{
struct cvp_kmd_send_cmd *k, *u;
dprintk(CVP_DBG, "%s: CVP_KMD_HFI_SEND_CMD\n",
__func__);
k = &kp->data.send_cmd;
u = &up->data.send_cmd;
if (put_user(k->cmd_address_fd, &u->cmd_address_fd) ||
put_user(k->cmd_size, &u->cmd_size))
return -EFAULT;
for (i = 0; i < 10; i++)
if (put_user(k->reserved[i], &u->reserved[i]))
return -EFAULT;
break;
}
case CVP_KMD_SEND_CMD_PKT:
case CVP_KMD_HFI_DFS_CONFIG_CMD:
case CVP_KMD_HFI_DFS_FRAME_CMD:
case CVP_KMD_HFI_DFS_FRAME_CMD_RESPONSE:
case CVP_KMD_HFI_DME_CONFIG_CMD:
case CVP_KMD_HFI_DME_FRAME_CMD:
case CVP_KMD_HFI_DME_FRAME_CMD_RESPONSE:
case CVP_KMD_HFI_PERSIST_CMD:
case CVP_KMD_HFI_PERSIST_CMD_RESPONSE:
case CVP_KMD_HFI_FD_FRAME_CMD:
{
if (_get_pkt_hdr_from_user(up, &pkt_hdr))
return -EFAULT;
@ -566,7 +481,6 @@ static int convert_to_user(struct cvp_kmd_arg *kp, unsigned long arg)
break;
}
case CVP_KMD_SEND_FENCE_CMD_PKT:
case CVP_KMD_HFI_DME_FRAME_FENCE_CMD:
{
if (_get_fence_pkt_hdr_from_user(up, &pkt_hdr))
return -EFAULT;

View file

@ -8,12 +8,6 @@
#define MAX_DFS_HFI_PARAMS 20
#define HFI_MAX_PLANES 4
#define BASE_PRIVATE_CVP 36
/* VIDIOC private cvp command */
#define VIDIOC_CVP_CMD \
_IOWR('V', BASE_PRIVATE_CVP, struct cvp_kmd_arg)
/* Commands type */
#define CVP_KMD_CMD_BASE 0x10000000
#define CVP_KMD_CMD_START (CVP_KMD_CMD_BASE + 0x1000)
@ -51,30 +45,6 @@
*/
#define CVP_KMD_UNREGISTER_BUFFER (CVP_KMD_CMD_START + 4)
#define CVP_KMD_HFI_SEND_CMD (CVP_KMD_CMD_START + 5)
#define CVP_KMD_HFI_DFS_CONFIG_CMD (CVP_KMD_CMD_START + 6)
#define CVP_KMD_HFI_DFS_FRAME_CMD (CVP_KMD_CMD_START + 7)
#define CVP_KMD_HFI_DFS_FRAME_CMD_RESPONSE (CVP_KMD_CMD_START + 8)
#define CVP_KMD_HFI_DME_CONFIG_CMD (CVP_KMD_CMD_START + 9)
#define CVP_KMD_HFI_DME_FRAME_CMD (CVP_KMD_CMD_START + 10)
#define CVP_KMD_HFI_DME_FRAME_CMD_RESPONSE (CVP_KMD_CMD_START + 11)
#define CVP_KMD_HFI_PERSIST_CMD (CVP_KMD_CMD_START + 12)
#define CVP_KMD_HFI_PERSIST_CMD_RESPONSE (CVP_KMD_CMD_START + 13)
#define CVP_KMD_HFI_DME_FRAME_FENCE_CMD (CVP_KMD_CMD_START + 14)
#define CVP_KMD_HFI_ICA_FRAME_CMD (CVP_KMD_CMD_START + 15)
#define CVP_KMD_HFI_FD_FRAME_CMD (CVP_KMD_CMD_START + 16)
#define CVP_KMD_UPDATE_POWER (CVP_KMD_CMD_START + 17)
#define CVP_KMD_SEND_CMD_PKT (CVP_KMD_CMD_START + 64)
@ -87,7 +57,11 @@
#define CVP_KMD_SESSION_CONTROL (CVP_KMD_CMD_START + 68)
#define CVP_KMD_SEND_FENCE_CMD_PKT (0x10001000 + 69)
#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
@ -275,8 +249,8 @@ struct cvp_kmd_hfi_fence_packet {
/**
* struct cvp_kmd_arg - argument passed with VIDIOC_CVP_CMD
* To be deprecated
* struct cvp_kmd_arg
*
* @type: command type
* @buf_offset: offset to buffer list in the command
* @buf_num: number of buffers in the command