Loading msm/vidc/msm_v4l2_vidc.c +10 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #include <linux/module.h> Loading Loading @@ -492,6 +492,12 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev) core->id = MSM_VIDC_CORE_VENUS; vidc_driver->ctxt = kcalloc(core->platform_data->max_inst_count, sizeof(*vidc_driver->ctxt), GFP_KERNEL); if (!vidc_driver->ctxt) goto err_vidc_context; vidc_driver->num_ctxt = core->platform_data->max_inst_count; rc = v4l2_device_register(&pdev->dev, &core->v4l2_dev); if (rc) { d_vpr_e("Failed to register v4l2 device\n"); Loading Loading @@ -588,6 +594,8 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev) err_dec: v4l2_device_unregister(&core->v4l2_dev); err_v4l2_register: kfree(vidc_driver->ctxt); err_vidc_context: sysfs_remove_group(&pdev->dev.kobj, &msm_vidc_core_attr_group); err_core_init: dev_set_drvdata(&pdev->dev, NULL); Loading Loading @@ -660,6 +668,7 @@ static int msm_vidc_remove(struct platform_device *pdev) mutex_destroy(&core->resources.cb_lock); mutex_destroy(&core->lock); kfree(core); kfree(vidc_driver->ctxt); return rc; } Loading msm/vidc/msm_vidc_clocks.c +11 −15 Original line number Diff line number Diff line Loading @@ -1237,9 +1237,11 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) return -EINVAL; } latency.enable = false; hdev = inst->core->device; if (inst->clk_data.low_latency_mode) { pdata.video_work_mode = HFI_WORKMODE_1; latency.enable = true; goto decision_done; } Loading @@ -1259,20 +1261,25 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) } } else if (inst->session_type == MSM_VIDC_ENCODER) { pdata.video_work_mode = HFI_WORKMODE_1; /* For WORK_MODE_1, set Low Latency mode by default */ latency.enable = true; if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR_VFR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ) V4L2_MPEG_VIDEO_BITRATE_MODE_CQ) { pdata.video_work_mode = HFI_WORKMODE_2; latency.enable = false; } } else { return -EINVAL; } decision_done: s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); inst->clk_data.work_mode = pdata.video_work_mode; rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, HFI_PROPERTY_PARAM_WORK_MODE, Loading @@ -1280,22 +1287,12 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) if (rc) s_vpr_e(inst->sid, "Failed to configure Work Mode\n"); /* For WORK_MODE_1, set Low Latency mode by default to HW. */ latency.enable = false; if (inst->session_type == MSM_VIDC_ENCODER && inst->clk_data.work_mode == HFI_WORKMODE_1) { latency.enable = true; if (inst->session_type == MSM_VIDC_ENCODER && latency.enable) { rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, HFI_PROPERTY_PARAM_VENC_LOW_LATENCY_MODE, (void *)&latency, sizeof(latency)); } s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); rc = msm_comm_scale_clocks_and_bus(inst, 1); return rc; Loading Loading @@ -1401,8 +1398,7 @@ int msm_vidc_decide_work_mode_iris2(struct msm_vidc_inst *inst) } s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); pdata.video_work_mode, latency.enable); if (inst->session_type == MSM_VIDC_ENCODER) { rc = call_hfi_op(hdev, session_set_property, Loading msm/vidc/msm_vidc_common.c +0 −1 Original line number Diff line number Diff line Loading @@ -3014,7 +3014,6 @@ static int msm_comm_init_core(struct msm_vidc_inst *inst) core->state = VIDC_CORE_INIT; core->smmu_fault_handled = false; core->trigger_ssr = false; core->resources.max_inst_count = MAX_SUPPORTED_INSTANCES; core->resources.max_secure_inst_count = core->resources.max_secure_inst_count ? core->resources.max_secure_inst_count : Loading msm/vidc/msm_vidc_debug.c +11 −13 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #define CREATE_TRACE_POINTS Loading Loading @@ -31,8 +31,6 @@ int msm_vidc_vpp_delay; atomic_read(&__binfo->ref_count) >= 2 ? "video driver" : "firmware";\ }) struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES]; struct core_inst_pair { struct msm_vidc_core *core; struct msm_vidc_inst *inst; Loading Loading @@ -614,16 +612,16 @@ int get_sid(u32 *sid, u32 session_type) { int i; for (i = 0; i < MAX_SUPPORTED_INSTANCES; i++) { if (!ctxt[i].used) { ctxt[i].used = 1; for (i = 0; i < vidc_driver->num_ctxt; i++) { if (!vidc_driver->ctxt[i].used) { vidc_driver->ctxt[i].used = 1; *sid = i+1; update_log_ctxt(*sid, session_type, 0); break; } } return (i == MAX_SUPPORTED_INSTANCES); return (i == vidc_driver->num_ctxt); } inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) Loading @@ -632,7 +630,7 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) char type; u32 s_type = 0; if (!sid || sid > MAX_SUPPORTED_INSTANCES) { if (!sid || sid > vidc_driver->num_ctxt) { d_vpr_e("%s: invalid sid %#x\n", __func__, sid); } Loading Loading @@ -679,11 +677,11 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) break; } ctxt[sid-1].session_type = s_type; ctxt[sid-1].codec_type = fourcc; memcpy(&ctxt[sid-1].name, codec, 4); ctxt[sid-1].name[4] = type; ctxt[sid-1].name[5] = '\0'; vidc_driver->ctxt[sid-1].session_type = s_type; vidc_driver->ctxt[sid-1].codec_type = fourcc; memcpy(&vidc_driver->ctxt[sid-1].name, codec, 4); vidc_driver->ctxt[sid-1].name[4] = type; vidc_driver->ctxt[sid-1].name[5] = '\0'; } /* Mock all the missing parts for successful compilation starts here */ Loading msm/vidc/msm_vidc_debug.h +8 −16 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #ifndef __MSM_VIDC_DEBUG__ Loading Loading @@ -92,13 +92,6 @@ enum vidc_err_recovery_disable { VIDC_DISABLE_NON_NOC_ERR_RECOV = 0x0002 }; struct log_cookie { u32 used; u32 session_type; u32 codec_type; char name[20]; }; extern int msm_vidc_debug; extern int msm_vidc_fw_debug_mode; extern bool msm_vidc_fw_coverage; Loading @@ -109,7 +102,6 @@ extern bool msm_vidc_lossless_encode; extern bool msm_vidc_cvp_usage; extern int msm_vidc_err_recovery_disable; extern int msm_vidc_vpp_delay; extern struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES]; #define dprintk(__level, sid, __fmt, ...) \ do { \ Loading Loading @@ -237,10 +229,10 @@ static inline bool is_print_allowed(u32 sid, u32 level) if (!((msm_vidc_debug >> 8) & 0xF)) return true; if (!sid || sid > MAX_SUPPORTED_INSTANCES) if (!sid || sid > vidc_driver->num_ctxt) return true; if (ctxt[sid-1].session_type & msm_vidc_debug) if (vidc_driver->ctxt[sid-1].session_type & msm_vidc_debug) return true; return false; Loading @@ -248,21 +240,21 @@ static inline bool is_print_allowed(u32 sid, u32 level) static inline char *get_codec_name(u32 sid) { if (!sid || sid > MAX_SUPPORTED_INSTANCES) if (!sid || sid > vidc_driver->num_ctxt) return "....."; return ctxt[sid-1].name; return vidc_driver->ctxt[sid-1].name; } static inline void put_sid(u32 sid) { if (!sid || sid > MAX_SUPPORTED_INSTANCES) { if (!sid || sid > vidc_driver->num_ctxt) { d_vpr_e("%s: invalid sid %#x\n", __func__, sid); return; } if (ctxt[sid-1].used) ctxt[sid-1].used = 0; if (vidc_driver->ctxt[sid-1].used) vidc_driver->ctxt[sid-1].used = 0; } static inline void tic(struct msm_vidc_inst *i, enum profiling_points p, Loading Loading
msm/vidc/msm_v4l2_vidc.c +10 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #include <linux/module.h> Loading Loading @@ -492,6 +492,12 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev) core->id = MSM_VIDC_CORE_VENUS; vidc_driver->ctxt = kcalloc(core->platform_data->max_inst_count, sizeof(*vidc_driver->ctxt), GFP_KERNEL); if (!vidc_driver->ctxt) goto err_vidc_context; vidc_driver->num_ctxt = core->platform_data->max_inst_count; rc = v4l2_device_register(&pdev->dev, &core->v4l2_dev); if (rc) { d_vpr_e("Failed to register v4l2 device\n"); Loading Loading @@ -588,6 +594,8 @@ static int msm_vidc_probe_vidc_device(struct platform_device *pdev) err_dec: v4l2_device_unregister(&core->v4l2_dev); err_v4l2_register: kfree(vidc_driver->ctxt); err_vidc_context: sysfs_remove_group(&pdev->dev.kobj, &msm_vidc_core_attr_group); err_core_init: dev_set_drvdata(&pdev->dev, NULL); Loading Loading @@ -660,6 +668,7 @@ static int msm_vidc_remove(struct platform_device *pdev) mutex_destroy(&core->resources.cb_lock); mutex_destroy(&core->lock); kfree(core); kfree(vidc_driver->ctxt); return rc; } Loading
msm/vidc/msm_vidc_clocks.c +11 −15 Original line number Diff line number Diff line Loading @@ -1237,9 +1237,11 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) return -EINVAL; } latency.enable = false; hdev = inst->core->device; if (inst->clk_data.low_latency_mode) { pdata.video_work_mode = HFI_WORKMODE_1; latency.enable = true; goto decision_done; } Loading @@ -1259,20 +1261,25 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) } } else if (inst->session_type == MSM_VIDC_ENCODER) { pdata.video_work_mode = HFI_WORKMODE_1; /* For WORK_MODE_1, set Low Latency mode by default */ latency.enable = true; if (inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR_VFR || inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CQ) V4L2_MPEG_VIDEO_BITRATE_MODE_CQ) { pdata.video_work_mode = HFI_WORKMODE_2; latency.enable = false; } } else { return -EINVAL; } decision_done: s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); inst->clk_data.work_mode = pdata.video_work_mode; rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, HFI_PROPERTY_PARAM_WORK_MODE, Loading @@ -1280,22 +1287,12 @@ static int msm_vidc_decide_work_mode_ar50_lt(struct msm_vidc_inst *inst) if (rc) s_vpr_e(inst->sid, "Failed to configure Work Mode\n"); /* For WORK_MODE_1, set Low Latency mode by default to HW. */ latency.enable = false; if (inst->session_type == MSM_VIDC_ENCODER && inst->clk_data.work_mode == HFI_WORKMODE_1) { latency.enable = true; if (inst->session_type == MSM_VIDC_ENCODER && latency.enable) { rc = call_hfi_op(hdev, session_set_property, (void *)inst->session, HFI_PROPERTY_PARAM_VENC_LOW_LATENCY_MODE, (void *)&latency, sizeof(latency)); } s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); rc = msm_comm_scale_clocks_and_bus(inst, 1); return rc; Loading Loading @@ -1401,8 +1398,7 @@ int msm_vidc_decide_work_mode_iris2(struct msm_vidc_inst *inst) } s_vpr_h(inst->sid, "Configuring work mode = %u low latency = %u", pdata.video_work_mode, latency.enable); pdata.video_work_mode, latency.enable); if (inst->session_type == MSM_VIDC_ENCODER) { rc = call_hfi_op(hdev, session_set_property, Loading
msm/vidc/msm_vidc_common.c +0 −1 Original line number Diff line number Diff line Loading @@ -3014,7 +3014,6 @@ static int msm_comm_init_core(struct msm_vidc_inst *inst) core->state = VIDC_CORE_INIT; core->smmu_fault_handled = false; core->trigger_ssr = false; core->resources.max_inst_count = MAX_SUPPORTED_INSTANCES; core->resources.max_secure_inst_count = core->resources.max_secure_inst_count ? core->resources.max_secure_inst_count : Loading
msm/vidc/msm_vidc_debug.c +11 −13 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #define CREATE_TRACE_POINTS Loading Loading @@ -31,8 +31,6 @@ int msm_vidc_vpp_delay; atomic_read(&__binfo->ref_count) >= 2 ? "video driver" : "firmware";\ }) struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES]; struct core_inst_pair { struct msm_vidc_core *core; struct msm_vidc_inst *inst; Loading Loading @@ -614,16 +612,16 @@ int get_sid(u32 *sid, u32 session_type) { int i; for (i = 0; i < MAX_SUPPORTED_INSTANCES; i++) { if (!ctxt[i].used) { ctxt[i].used = 1; for (i = 0; i < vidc_driver->num_ctxt; i++) { if (!vidc_driver->ctxt[i].used) { vidc_driver->ctxt[i].used = 1; *sid = i+1; update_log_ctxt(*sid, session_type, 0); break; } } return (i == MAX_SUPPORTED_INSTANCES); return (i == vidc_driver->num_ctxt); } inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) Loading @@ -632,7 +630,7 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) char type; u32 s_type = 0; if (!sid || sid > MAX_SUPPORTED_INSTANCES) { if (!sid || sid > vidc_driver->num_ctxt) { d_vpr_e("%s: invalid sid %#x\n", __func__, sid); } Loading Loading @@ -679,11 +677,11 @@ inline void update_log_ctxt(u32 sid, u32 session_type, u32 fourcc) break; } ctxt[sid-1].session_type = s_type; ctxt[sid-1].codec_type = fourcc; memcpy(&ctxt[sid-1].name, codec, 4); ctxt[sid-1].name[4] = type; ctxt[sid-1].name[5] = '\0'; vidc_driver->ctxt[sid-1].session_type = s_type; vidc_driver->ctxt[sid-1].codec_type = fourcc; memcpy(&vidc_driver->ctxt[sid-1].name, codec, 4); vidc_driver->ctxt[sid-1].name[4] = type; vidc_driver->ctxt[sid-1].name[5] = '\0'; } /* Mock all the missing parts for successful compilation starts here */ Loading
msm/vidc/msm_vidc_debug.h +8 −16 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved. */ #ifndef __MSM_VIDC_DEBUG__ Loading Loading @@ -92,13 +92,6 @@ enum vidc_err_recovery_disable { VIDC_DISABLE_NON_NOC_ERR_RECOV = 0x0002 }; struct log_cookie { u32 used; u32 session_type; u32 codec_type; char name[20]; }; extern int msm_vidc_debug; extern int msm_vidc_fw_debug_mode; extern bool msm_vidc_fw_coverage; Loading @@ -109,7 +102,6 @@ extern bool msm_vidc_lossless_encode; extern bool msm_vidc_cvp_usage; extern int msm_vidc_err_recovery_disable; extern int msm_vidc_vpp_delay; extern struct log_cookie ctxt[MAX_SUPPORTED_INSTANCES]; #define dprintk(__level, sid, __fmt, ...) \ do { \ Loading Loading @@ -237,10 +229,10 @@ static inline bool is_print_allowed(u32 sid, u32 level) if (!((msm_vidc_debug >> 8) & 0xF)) return true; if (!sid || sid > MAX_SUPPORTED_INSTANCES) if (!sid || sid > vidc_driver->num_ctxt) return true; if (ctxt[sid-1].session_type & msm_vidc_debug) if (vidc_driver->ctxt[sid-1].session_type & msm_vidc_debug) return true; return false; Loading @@ -248,21 +240,21 @@ static inline bool is_print_allowed(u32 sid, u32 level) static inline char *get_codec_name(u32 sid) { if (!sid || sid > MAX_SUPPORTED_INSTANCES) if (!sid || sid > vidc_driver->num_ctxt) return "....."; return ctxt[sid-1].name; return vidc_driver->ctxt[sid-1].name; } static inline void put_sid(u32 sid) { if (!sid || sid > MAX_SUPPORTED_INSTANCES) { if (!sid || sid > vidc_driver->num_ctxt) { d_vpr_e("%s: invalid sid %#x\n", __func__, sid); return; } if (ctxt[sid-1].used) ctxt[sid-1].used = 0; if (vidc_driver->ctxt[sid-1].used) vidc_driver->ctxt[sid-1].used = 0; } static inline void tic(struct msm_vidc_inst *i, enum profiling_points p, Loading