Loading drivers/media/platform/msm/cvp/cvp.c +13 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,17 @@ static int read_platform_resources(struct msm_cvp_core *core, return rc; } static void init_cycle_info(struct cvp_cycle_info *info) { memset(info->sum_fps, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->hi_ctrl_lim, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->lo_ctrl_lim, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->cycle, 0, HFI_MAX_HW_THREADS*sizeof(struct cvp_cycle_stat)); info->conf_freq = 0; mutex_init(&info->lock); } static int msm_cvp_initialize_core(struct platform_device *pdev, struct msm_cvp_core *core) { Loading @@ -132,6 +143,7 @@ static int msm_cvp_initialize_core(struct platform_device *pdev, INIT_DELAYED_WORK(&core->fw_unload_work, msm_cvp_fw_unload_handler); INIT_WORK(&core->ssr_work, msm_cvp_ssr_handler); init_cycle_info(&core->dyn_clk); return rc; } Loading Loading @@ -490,6 +502,7 @@ static int msm_cvp_remove(struct platform_device *pdev) sysfs_remove_group(&pdev->dev.kobj, &msm_cvp_core_attr_group); dev_set_drvdata(&pdev->dev, NULL); mutex_destroy(&core->lock); mutex_destroy(&core->dyn_clk.lock); kfree(core); return rc; } Loading drivers/media/platform/msm/cvp/cvp_hfi.c +27 −2 Original line number Diff line number Diff line Loading @@ -364,9 +364,34 @@ int get_hfi_version(void) return hfi->version; } unsigned int get_msg_size(void) unsigned int get_msg_size(struct cvp_hfi_msg_session_hdr *hdr) { struct msm_cvp_core *core; struct iris_hfi_device *device; u32 minor_ver; core = list_first_entry(&cvp_driver->cores, struct msm_cvp_core, list); if (core) device = core->device->hfi_device_data; else return 0; if (!device) { dprintk(CVP_ERR, "%s: NULL device\n", __func__); return 0; } minor_ver = (device->version & HFI_VERSION_MINOR_MASK) >> HFI_VERSION_MINOR_SHIFT; if (minor_ver < 2) return sizeof(struct cvp_hfi_msg_session_hdr); if (hdr->packet_type == HFI_MSG_SESSION_CVP_FD) return sizeof(struct cvp_hfi_msg_session_hdr_ext); else return sizeof(struct cvp_hfi_msg_session_hdr); } unsigned int get_msg_session_id(void *msg) Loading drivers/media/platform/msm/cvp/cvp_hfi_api.h +1 −1 Original line number Diff line number Diff line Loading @@ -369,7 +369,7 @@ 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 get_hfi_version(void); unsigned int get_msg_size(void); unsigned int get_msg_size(struct cvp_hfi_msg_session_hdr *hdr); unsigned int get_msg_session_id(void *msg); unsigned int get_msg_errorcode(void *msg); int get_msg_opconfigs(void *msg, unsigned int *session_id, Loading drivers/media/platform/msm/cvp/cvp_hfi_helper.h +23 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,29 @@ struct cvp_hfi_msg_session_hdr { u32 stream_idx; } __packed; #define HFI_MAX_HW_ACTIVATIONS_PER_FRAME (6) #define HFI_MAX_HW_THREADS (4) enum hfi_hw_thread { HFI_HW_FDU, HFI_HW_MPU, HFI_HW_OD, HFI_HW_ICA }; struct cvp_hfi_msg_session_hdr_ext { u32 size; u32 packet_type; u32 session_id; u32 error_type; struct cvp_hfi_client client_data; u32 stream_idx; u32 busy_cycles; u32 total_cycles; u32 hw_cycles[HFI_MAX_HW_THREADS][HFI_MAX_HW_ACTIVATIONS_PER_FRAME]; u32 fw_cycles[HFI_MAX_HW_ACTIVATIONS_PER_FRAME]; } __packed; struct cvp_hfi_buffer_mapping_type { u32 index; u32 device_addr; Loading drivers/media/platform/msm/cvp/hfi_response_handler.c +6 −4 Original line number Diff line number Diff line Loading @@ -313,7 +313,7 @@ static int hfi_process_session_set_buf_done(u32 device_id, struct cvp_hfi_msg_session_hdr *pkt = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; unsigned int pkt_size = get_msg_size(); unsigned int pkt_size = get_msg_size(pkt); if (!pkt || pkt->size < pkt_size) { dprintk(CVP_ERR, "bad packet/packet size %d\n", Loading Loading @@ -367,7 +367,7 @@ static int hfi_process_session_rel_buf_done(u32 device_id, struct cvp_hfi_msg_session_hdr *pkt = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; unsigned int pkt_size = get_msg_size(); unsigned int pkt_size = get_msg_size(pkt); if (!pkt || pkt->size < pkt_size) { dprintk(CVP_ERR, "bad packet/packet size %d\n", Loading @@ -393,6 +393,8 @@ static int hfi_process_session_cvp_operation_config(u32 device_id, { struct cvp_hfi_msg_session_op_cfg_packet *pkt = (struct cvp_hfi_msg_session_op_cfg_packet *)hdr; struct cvp_hfi_msg_session_hdr *lhdr = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; int signal; unsigned int conf_id, session_id, error_type; Loading @@ -400,7 +402,7 @@ static int hfi_process_session_cvp_operation_config(u32 device_id, if (!pkt) { dprintk(CVP_ERR, "%s: invalid param\n", __func__); return -EINVAL; } else if (pkt->size < get_msg_size()) { } else if (pkt->size < get_msg_size(lhdr)) { dprintk(CVP_ERR, "%s: bad_pkt_size\n", __func__); return -E2BIG; Loading Loading @@ -514,7 +516,7 @@ static int hfi_process_session_cvp_msg(u32 device_id, return -ENOMEM; } memcpy(&sess_msg->pkt, pkt, get_msg_size()); memcpy(&sess_msg->pkt, pkt, get_msg_size(pkt)); dprintk(CVP_HFI, "%s: Received msg %x cmd_done.status=%d sessionid=%x\n", Loading Loading
drivers/media/platform/msm/cvp/cvp.c +13 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,17 @@ static int read_platform_resources(struct msm_cvp_core *core, return rc; } static void init_cycle_info(struct cvp_cycle_info *info) { memset(info->sum_fps, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->hi_ctrl_lim, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->lo_ctrl_lim, 0, HFI_MAX_HW_THREADS*sizeof(u32)); memset(info->cycle, 0, HFI_MAX_HW_THREADS*sizeof(struct cvp_cycle_stat)); info->conf_freq = 0; mutex_init(&info->lock); } static int msm_cvp_initialize_core(struct platform_device *pdev, struct msm_cvp_core *core) { Loading @@ -132,6 +143,7 @@ static int msm_cvp_initialize_core(struct platform_device *pdev, INIT_DELAYED_WORK(&core->fw_unload_work, msm_cvp_fw_unload_handler); INIT_WORK(&core->ssr_work, msm_cvp_ssr_handler); init_cycle_info(&core->dyn_clk); return rc; } Loading Loading @@ -490,6 +502,7 @@ static int msm_cvp_remove(struct platform_device *pdev) sysfs_remove_group(&pdev->dev.kobj, &msm_cvp_core_attr_group); dev_set_drvdata(&pdev->dev, NULL); mutex_destroy(&core->lock); mutex_destroy(&core->dyn_clk.lock); kfree(core); return rc; } Loading
drivers/media/platform/msm/cvp/cvp_hfi.c +27 −2 Original line number Diff line number Diff line Loading @@ -364,9 +364,34 @@ int get_hfi_version(void) return hfi->version; } unsigned int get_msg_size(void) unsigned int get_msg_size(struct cvp_hfi_msg_session_hdr *hdr) { struct msm_cvp_core *core; struct iris_hfi_device *device; u32 minor_ver; core = list_first_entry(&cvp_driver->cores, struct msm_cvp_core, list); if (core) device = core->device->hfi_device_data; else return 0; if (!device) { dprintk(CVP_ERR, "%s: NULL device\n", __func__); return 0; } minor_ver = (device->version & HFI_VERSION_MINOR_MASK) >> HFI_VERSION_MINOR_SHIFT; if (minor_ver < 2) return sizeof(struct cvp_hfi_msg_session_hdr); if (hdr->packet_type == HFI_MSG_SESSION_CVP_FD) return sizeof(struct cvp_hfi_msg_session_hdr_ext); else return sizeof(struct cvp_hfi_msg_session_hdr); } unsigned int get_msg_session_id(void *msg) Loading
drivers/media/platform/msm/cvp/cvp_hfi_api.h +1 −1 Original line number Diff line number Diff line Loading @@ -369,7 +369,7 @@ 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 get_hfi_version(void); unsigned int get_msg_size(void); unsigned int get_msg_size(struct cvp_hfi_msg_session_hdr *hdr); unsigned int get_msg_session_id(void *msg); unsigned int get_msg_errorcode(void *msg); int get_msg_opconfigs(void *msg, unsigned int *session_id, Loading
drivers/media/platform/msm/cvp/cvp_hfi_helper.h +23 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,29 @@ struct cvp_hfi_msg_session_hdr { u32 stream_idx; } __packed; #define HFI_MAX_HW_ACTIVATIONS_PER_FRAME (6) #define HFI_MAX_HW_THREADS (4) enum hfi_hw_thread { HFI_HW_FDU, HFI_HW_MPU, HFI_HW_OD, HFI_HW_ICA }; struct cvp_hfi_msg_session_hdr_ext { u32 size; u32 packet_type; u32 session_id; u32 error_type; struct cvp_hfi_client client_data; u32 stream_idx; u32 busy_cycles; u32 total_cycles; u32 hw_cycles[HFI_MAX_HW_THREADS][HFI_MAX_HW_ACTIVATIONS_PER_FRAME]; u32 fw_cycles[HFI_MAX_HW_ACTIVATIONS_PER_FRAME]; } __packed; struct cvp_hfi_buffer_mapping_type { u32 index; u32 device_addr; Loading
drivers/media/platform/msm/cvp/hfi_response_handler.c +6 −4 Original line number Diff line number Diff line Loading @@ -313,7 +313,7 @@ static int hfi_process_session_set_buf_done(u32 device_id, struct cvp_hfi_msg_session_hdr *pkt = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; unsigned int pkt_size = get_msg_size(); unsigned int pkt_size = get_msg_size(pkt); if (!pkt || pkt->size < pkt_size) { dprintk(CVP_ERR, "bad packet/packet size %d\n", Loading Loading @@ -367,7 +367,7 @@ static int hfi_process_session_rel_buf_done(u32 device_id, struct cvp_hfi_msg_session_hdr *pkt = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; unsigned int pkt_size = get_msg_size(); unsigned int pkt_size = get_msg_size(pkt); if (!pkt || pkt->size < pkt_size) { dprintk(CVP_ERR, "bad packet/packet size %d\n", Loading @@ -393,6 +393,8 @@ static int hfi_process_session_cvp_operation_config(u32 device_id, { struct cvp_hfi_msg_session_op_cfg_packet *pkt = (struct cvp_hfi_msg_session_op_cfg_packet *)hdr; struct cvp_hfi_msg_session_hdr *lhdr = (struct cvp_hfi_msg_session_hdr *)hdr; struct msm_cvp_cb_cmd_done cmd_done = {0}; int signal; unsigned int conf_id, session_id, error_type; Loading @@ -400,7 +402,7 @@ static int hfi_process_session_cvp_operation_config(u32 device_id, if (!pkt) { dprintk(CVP_ERR, "%s: invalid param\n", __func__); return -EINVAL; } else if (pkt->size < get_msg_size()) { } else if (pkt->size < get_msg_size(lhdr)) { dprintk(CVP_ERR, "%s: bad_pkt_size\n", __func__); return -E2BIG; Loading Loading @@ -514,7 +516,7 @@ static int hfi_process_session_cvp_msg(u32 device_id, return -ENOMEM; } memcpy(&sess_msg->pkt, pkt, get_msg_size()); memcpy(&sess_msg->pkt, pkt, get_msg_size(pkt)); dprintk(CVP_HFI, "%s: Received msg %x cmd_done.status=%d sessionid=%x\n", Loading