Loading drivers/media/platform/msm/cvp/cvp_hfi.c +6 −0 Original line number Diff line number Diff line Loading @@ -367,6 +367,11 @@ int set_feature_bitmask(int pkt_idx, unsigned long *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; } Loading Loading @@ -3048,6 +3053,7 @@ static void **get_session_id(struct msm_cvp_cb_info *info) case HAL_SESSION_DFS_FRAME_CMD_DONE: case HAL_SESSION_DME_FRAME_CMD_DONE: case HAL_SESSION_ICA_FRAME_CMD_DONE: case HAL_SESSION_FD_FRAME_CMD_DONE: case HAL_SESSION_PERSIST_CMD_DONE: case HAL_SESSION_FD_CONFIG_CMD_DONE: case HAL_SESSION_MODEL_BUF_CMD_DONE: Loading drivers/media/platform/msm/cvp/cvp_hfi_api.h +2 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ #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 Loading Loading @@ -256,6 +257,7 @@ enum hal_command_response { HAL_SESSION_PERSIST_CMD_DONE, HAL_SESSION_MODEL_BUF_CMD_DONE, HAL_SESSION_ICA_FRAME_CMD_DONE, HAL_SESSION_FD_FRAME_CMD_DONE, HAL_SESSION_PROPERTY_INFO, HAL_SESSION_ERROR, HAL_RESPONSE_UNUSED = 0x10000000, Loading drivers/media/platform/msm/cvp/hfi_response_handler.c +37 −1 Original line number Diff line number Diff line Loading @@ -467,7 +467,8 @@ static int hfi_process_session_cvp_msg(u32 device_id, 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_ICA) || pkt->packet_type == HFI_MSG_SESSION_CVP_ICA || pkt->packet_type == HFI_MSG_SESSION_CVP_FD) return _deprecated_hfi_msg_process(device_id, pkt, info, inst); Loading Loading @@ -565,6 +566,34 @@ static int hfi_process_session_cvp_ica(u32 device_id, 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, Loading @@ -588,6 +617,12 @@ static int _deprecated_hfi_msg_process(u32 device_id, return hfi_process_session_cvp_ica( device_id, (void *)pkt, info); if (pkt->packet_type == HFI_MSG_SESSION_CVP_FD) if (test_and_clear_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; Loading Loading @@ -717,6 +752,7 @@ int cvp_hfi_process_msg_packet(u32 device_id, case HFI_MSG_SESSION_CVP_DS: case HFI_MSG_SESSION_CVP_DFS: case HFI_MSG_SESSION_CVP_DME: case HFI_MSG_SESSION_CVP_FD: pkt_func = (pkt_func_def)hfi_process_session_cvp_msg; break; default: Loading drivers/media/platform/msm/cvp/msm_cvp.c +83 −0 Original line number Diff line number Diff line Loading @@ -1060,6 +1060,88 @@ static int msm_cvp_thread_fence_run(void *data) } break; } case HFI_CMD_SESSION_CVP_FD_FRAME: { int in_fence_num = fence[0]; int out_fence_num = fence[1]; int start_out = in_fence_num + 1; for (i = 1; i < in_fence_num + 1; i++) { if (fence[(i<<1)]) { rc = synx_import(fence[(i<<1)], fence[((i<<1)+1)], &synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_import %d failed\n", __func__, i<<1); goto exit; } rc = synx_wait(synx_obj, timeout_ms); if (rc) { dprintk(CVP_ERR, "%s: synx_wait %d failed\n", __func__, i<<1); goto exit; } rc = synx_release(synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_release %d failed\n", __func__, i<<1); goto exit; } } } rc = call_hfi_op(hdev, session_send, (void *)inst->session, in_pkt); if (rc) { dprintk(CVP_ERR, "%s: Failed in call_hfi_op %d, %x\n", __func__, in_pkt->pkt_data[0], in_pkt->pkt_data[1]); synx_state = SYNX_STATE_SIGNALED_ERROR; } if (synx_state != SYNX_STATE_SIGNALED_ERROR) { rc = wait_for_sess_signal_receipt(inst, HAL_SESSION_FD_FRAME_CMD_DONE); if (rc) { dprintk(CVP_ERR, "%s: wait for signal failed, rc %d\n", __func__, rc); synx_state = SYNX_STATE_SIGNALED_ERROR; } } for (i = start_out; i < start_out + out_fence_num; i++) { if (fence[(i<<1)]) { rc = synx_import(fence[(i<<1)], fence[((i<<1)+1)], &synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_import %d failed\n", __func__, i<<1); goto exit; } rc = synx_signal(synx_obj, synx_state); if (rc) { dprintk(CVP_ERR, "%s: synx_signal %d failed\n", __func__, i<<1); goto exit; } rc = synx_release(synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_release %d failed\n", __func__, i<<1); goto exit; } } } break; } default: dprintk(CVP_ERR, "%s: unknown hfi cmd type 0x%x\n", __func__, fence_thread_data->arg_type); Loading Loading @@ -1751,6 +1833,7 @@ int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg) 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_FD_FRAME_CMD: case CVP_KMD_HFI_PERSIST_CMD: { struct cvp_kmd_hfi_packet *in_pkt = Loading drivers/media/platform/msm/cvp/msm_cvp_common.c +1 −0 Original line number Diff line number Diff line Loading @@ -773,6 +773,7 @@ void cvp_handle_cmd_response(enum hal_command_response cmd, void *data) case HAL_SESSION_FD_CONFIG_CMD_DONE: case HAL_SESSION_MODEL_BUF_CMD_DONE: case HAL_SESSION_ICA_FRAME_CMD_DONE: case HAL_SESSION_FD_FRAME_CMD_DONE: cvp_handle_session_cmd_done(cmd, data); break; default: Loading Loading
drivers/media/platform/msm/cvp/cvp_hfi.c +6 −0 Original line number Diff line number Diff line Loading @@ -367,6 +367,11 @@ int set_feature_bitmask(int pkt_idx, unsigned long *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; } Loading Loading @@ -3048,6 +3053,7 @@ static void **get_session_id(struct msm_cvp_cb_info *info) case HAL_SESSION_DFS_FRAME_CMD_DONE: case HAL_SESSION_DME_FRAME_CMD_DONE: case HAL_SESSION_ICA_FRAME_CMD_DONE: case HAL_SESSION_FD_FRAME_CMD_DONE: case HAL_SESSION_PERSIST_CMD_DONE: case HAL_SESSION_FD_CONFIG_CMD_DONE: case HAL_SESSION_MODEL_BUF_CMD_DONE: Loading
drivers/media/platform/msm/cvp/cvp_hfi_api.h +2 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ #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 Loading Loading @@ -256,6 +257,7 @@ enum hal_command_response { HAL_SESSION_PERSIST_CMD_DONE, HAL_SESSION_MODEL_BUF_CMD_DONE, HAL_SESSION_ICA_FRAME_CMD_DONE, HAL_SESSION_FD_FRAME_CMD_DONE, HAL_SESSION_PROPERTY_INFO, HAL_SESSION_ERROR, HAL_RESPONSE_UNUSED = 0x10000000, Loading
drivers/media/platform/msm/cvp/hfi_response_handler.c +37 −1 Original line number Diff line number Diff line Loading @@ -467,7 +467,8 @@ static int hfi_process_session_cvp_msg(u32 device_id, 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_ICA) || pkt->packet_type == HFI_MSG_SESSION_CVP_ICA || pkt->packet_type == HFI_MSG_SESSION_CVP_FD) return _deprecated_hfi_msg_process(device_id, pkt, info, inst); Loading Loading @@ -565,6 +566,34 @@ static int hfi_process_session_cvp_ica(u32 device_id, 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, Loading @@ -588,6 +617,12 @@ static int _deprecated_hfi_msg_process(u32 device_id, return hfi_process_session_cvp_ica( device_id, (void *)pkt, info); if (pkt->packet_type == HFI_MSG_SESSION_CVP_FD) if (test_and_clear_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; Loading Loading @@ -717,6 +752,7 @@ int cvp_hfi_process_msg_packet(u32 device_id, case HFI_MSG_SESSION_CVP_DS: case HFI_MSG_SESSION_CVP_DFS: case HFI_MSG_SESSION_CVP_DME: case HFI_MSG_SESSION_CVP_FD: pkt_func = (pkt_func_def)hfi_process_session_cvp_msg; break; default: Loading
drivers/media/platform/msm/cvp/msm_cvp.c +83 −0 Original line number Diff line number Diff line Loading @@ -1060,6 +1060,88 @@ static int msm_cvp_thread_fence_run(void *data) } break; } case HFI_CMD_SESSION_CVP_FD_FRAME: { int in_fence_num = fence[0]; int out_fence_num = fence[1]; int start_out = in_fence_num + 1; for (i = 1; i < in_fence_num + 1; i++) { if (fence[(i<<1)]) { rc = synx_import(fence[(i<<1)], fence[((i<<1)+1)], &synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_import %d failed\n", __func__, i<<1); goto exit; } rc = synx_wait(synx_obj, timeout_ms); if (rc) { dprintk(CVP_ERR, "%s: synx_wait %d failed\n", __func__, i<<1); goto exit; } rc = synx_release(synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_release %d failed\n", __func__, i<<1); goto exit; } } } rc = call_hfi_op(hdev, session_send, (void *)inst->session, in_pkt); if (rc) { dprintk(CVP_ERR, "%s: Failed in call_hfi_op %d, %x\n", __func__, in_pkt->pkt_data[0], in_pkt->pkt_data[1]); synx_state = SYNX_STATE_SIGNALED_ERROR; } if (synx_state != SYNX_STATE_SIGNALED_ERROR) { rc = wait_for_sess_signal_receipt(inst, HAL_SESSION_FD_FRAME_CMD_DONE); if (rc) { dprintk(CVP_ERR, "%s: wait for signal failed, rc %d\n", __func__, rc); synx_state = SYNX_STATE_SIGNALED_ERROR; } } for (i = start_out; i < start_out + out_fence_num; i++) { if (fence[(i<<1)]) { rc = synx_import(fence[(i<<1)], fence[((i<<1)+1)], &synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_import %d failed\n", __func__, i<<1); goto exit; } rc = synx_signal(synx_obj, synx_state); if (rc) { dprintk(CVP_ERR, "%s: synx_signal %d failed\n", __func__, i<<1); goto exit; } rc = synx_release(synx_obj); if (rc) { dprintk(CVP_ERR, "%s: synx_release %d failed\n", __func__, i<<1); goto exit; } } } break; } default: dprintk(CVP_ERR, "%s: unknown hfi cmd type 0x%x\n", __func__, fence_thread_data->arg_type); Loading Loading @@ -1751,6 +1833,7 @@ int msm_cvp_handle_syscall(struct msm_cvp_inst *inst, struct cvp_kmd_arg *arg) 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_FD_FRAME_CMD: case CVP_KMD_HFI_PERSIST_CMD: { struct cvp_kmd_hfi_packet *in_pkt = Loading
drivers/media/platform/msm/cvp/msm_cvp_common.c +1 −0 Original line number Diff line number Diff line Loading @@ -773,6 +773,7 @@ void cvp_handle_cmd_response(enum hal_command_response cmd, void *data) case HAL_SESSION_FD_CONFIG_CMD_DONE: case HAL_SESSION_MODEL_BUF_CMD_DONE: case HAL_SESSION_ICA_FRAME_CMD_DONE: case HAL_SESSION_FD_FRAME_CMD_DONE: cvp_handle_session_cmd_done(cmd, data); break; default: Loading