Loading drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c +21 −0 Original line number Diff line number Diff line Loading @@ -2486,6 +2486,24 @@ static int __cam_isp_ctx_link_resume(struct cam_context *ctx) return rc; } static int __cam_isp_ctx_handle_sof_freeze_evt( struct cam_context *ctx) { int rc = 0; struct cam_isp_hw_cmd_args hw_cmd_args; struct cam_isp_context *ctx_isp = (struct cam_isp_context *) ctx->ctx_priv; hw_cmd_args.ctxt_to_hw_map = ctx_isp->hw_ctx; hw_cmd_args.cmd_type = CAM_ISP_HW_MGR_CMD_SOF_DEBUG; hw_cmd_args.u.sof_irq_enable = 1; rc = ctx->hw_mgr_intf->hw_cmd(ctx->hw_mgr_intf->hw_mgr_priv, &hw_cmd_args); return rc; } static int __cam_isp_ctx_process_evt(struct cam_context *ctx, struct cam_req_mgr_link_evt_data *link_evt_data) { Loading @@ -2501,6 +2519,9 @@ static int __cam_isp_ctx_process_evt(struct cam_context *ctx, case CAM_REQ_MGR_LINK_EVT_RESUME: __cam_isp_ctx_link_resume(ctx); break; case CAM_REQ_MGR_LINK_EVT_SOF_FREEZE: __cam_isp_ctx_handle_sof_freeze_evt(ctx); break; default: CAM_WARN(CAM_ISP, "Unknown event from CRM"); break; Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +49 −0 Original line number Diff line number Diff line Loading @@ -2699,6 +2699,52 @@ static int cam_ife_mgr_resume_hw(struct cam_ife_hw_mgr_ctx *ctx) return cam_ife_mgr_bw_control(ctx, CAM_VFE_BW_CONTROL_INCLUDE); } static int cam_ife_mgr_sof_irq_debug( struct cam_ife_hw_mgr_ctx *ctx, uint32_t sof_irq_enable) { int rc = 0; uint32_t i = 0; struct cam_ife_hw_mgr_res *hw_mgr_res = NULL; struct cam_hw_intf *hw_intf = NULL; struct cam_isp_resource_node *rsrc_node = NULL; list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_csid, list) { for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) { if (!hw_mgr_res->hw_res[i]) continue; hw_intf = hw_mgr_res->hw_res[i]->hw_intf; if (hw_intf->hw_ops.process_cmd) { rc |= hw_intf->hw_ops.process_cmd( hw_intf->hw_priv, CAM_IFE_CSID_SOF_IRQ_DEBUG, &sof_irq_enable, sizeof(sof_irq_enable)); } } } list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_src, list) { for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) { if (!hw_mgr_res->hw_res[i]) continue; rsrc_node = hw_mgr_res->hw_res[i]; if (rsrc_node->process_cmd && (rsrc_node->res_id == CAM_ISP_HW_VFE_IN_CAMIF)) { rc |= hw_mgr_res->hw_res[i]->process_cmd( hw_mgr_res->hw_res[i], CAM_ISP_HW_CMD_SOF_IRQ_DEBUG, &sof_irq_enable, sizeof(sof_irq_enable)); } } } return rc; } static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args) { int rc = 0; Loading Loading @@ -2730,6 +2776,9 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args) case CAM_ISP_HW_MGR_CMD_RESUME_HW: cam_ife_mgr_resume_hw(ctx); break; case CAM_ISP_HW_MGR_CMD_SOF_DEBUG: cam_ife_mgr_sof_irq_debug(ctx, hw_cmd_args->u.sof_irq_enable); break; default: CAM_ERR(CAM_ISP, "Invalid HW mgr command:0x%x", hw_cmd_args->cmd_type); Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/include/cam_isp_hw_mgr_intf.h +2 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ enum cam_isp_hw_mgr_command { CAM_ISP_HW_MGR_CMD_IS_RDI_ONLY_CONTEXT, CAM_ISP_HW_MGR_CMD_PAUSE_HW, CAM_ISP_HW_MGR_CMD_RESUME_HW, CAM_ISP_HW_MGR_CMD_SOF_DEBUG, CAM_ISP_HW_MGR_CMD_MAX, }; Loading @@ -195,6 +196,7 @@ struct cam_isp_hw_cmd_args { uint32_t cmd_type; union { uint32_t is_rdi_only_context; uint32_t sof_irq_enable; } u; }; Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +59 −1 Original line number Diff line number Diff line Loading @@ -2476,6 +2476,61 @@ static int cam_ife_csid_write(void *hw_priv, return -EINVAL; } static int cam_ife_csid_sof_irq_debug( struct cam_ife_csid_hw *csid_hw, void *cmd_args) { int i = 0; uint32_t val = 0; bool sof_irq_enable = false; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; csid_reg = csid_hw->csid_info->csid_reg; soc_info = &csid_hw->hw_info->soc_info; if (*((uint32_t *)cmd_args) == 1) sof_irq_enable = true; val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_irq_mask_addr); if (val) { if (sof_irq_enable) val |= CSID_PATH_INFO_INPUT_SOF; else val &= ~CSID_PATH_INFO_INPUT_SOF; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_irq_mask_addr); val = 0; } for (i = 0; i < csid_reg->cmn_reg->no_rdis; i++) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[i]->csid_rdi_irq_mask_addr); if (val) { if (sof_irq_enable) val |= CSID_PATH_INFO_INPUT_SOF; else val &= ~CSID_PATH_INFO_INPUT_SOF; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[i]->csid_rdi_irq_mask_addr); val = 0; } } if (sof_irq_enable) csid_hw->csid_debug |= CSID_DEBUG_ENABLE_SOF_IRQ; else csid_hw->csid_debug &= ~CSID_DEBUG_ENABLE_SOF_IRQ; CAM_INFO(CAM_ISP, "SOF freeze: CSID SOF irq %s", (sof_irq_enable == true) ? "enabled" : "disabled"); return 0; } static int cam_ife_csid_process_cmd(void *hw_priv, uint32_t cmd_type, void *cmd_args, uint32_t arg_size) { Loading @@ -2498,6 +2553,9 @@ static int cam_ife_csid_process_cmd(void *hw_priv, case CAM_IFE_CSID_SET_CSID_DEBUG: rc = cam_ife_csid_set_csid_debug(csid_hw, cmd_args); break; case CAM_IFE_CSID_SOF_IRQ_DEBUG: rc = cam_ife_csid_sof_irq_debug(csid_hw, cmd_args); break; default: CAM_ERR(CAM_ISP, "CSID:%d unsupported cmd:%d", csid_hw->hw_intf->hw_idx, cmd_type); Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/include/cam_ife_csid_hw_intf.h +1 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,7 @@ struct cam_csid_get_time_stamp_args { enum cam_ife_csid_cmd_type { CAM_IFE_CSID_CMD_GET_TIME_STAMP, CAM_IFE_CSID_SET_CSID_DEBUG, CAM_IFE_CSID_SOF_IRQ_DEBUG, CAM_IFE_CSID_CMD_MAX, }; Loading Loading
drivers/media/platform/msm/camera/cam_isp/cam_isp_context.c +21 −0 Original line number Diff line number Diff line Loading @@ -2486,6 +2486,24 @@ static int __cam_isp_ctx_link_resume(struct cam_context *ctx) return rc; } static int __cam_isp_ctx_handle_sof_freeze_evt( struct cam_context *ctx) { int rc = 0; struct cam_isp_hw_cmd_args hw_cmd_args; struct cam_isp_context *ctx_isp = (struct cam_isp_context *) ctx->ctx_priv; hw_cmd_args.ctxt_to_hw_map = ctx_isp->hw_ctx; hw_cmd_args.cmd_type = CAM_ISP_HW_MGR_CMD_SOF_DEBUG; hw_cmd_args.u.sof_irq_enable = 1; rc = ctx->hw_mgr_intf->hw_cmd(ctx->hw_mgr_intf->hw_mgr_priv, &hw_cmd_args); return rc; } static int __cam_isp_ctx_process_evt(struct cam_context *ctx, struct cam_req_mgr_link_evt_data *link_evt_data) { Loading @@ -2501,6 +2519,9 @@ static int __cam_isp_ctx_process_evt(struct cam_context *ctx, case CAM_REQ_MGR_LINK_EVT_RESUME: __cam_isp_ctx_link_resume(ctx); break; case CAM_REQ_MGR_LINK_EVT_SOF_FREEZE: __cam_isp_ctx_handle_sof_freeze_evt(ctx); break; default: CAM_WARN(CAM_ISP, "Unknown event from CRM"); break; Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +49 −0 Original line number Diff line number Diff line Loading @@ -2699,6 +2699,52 @@ static int cam_ife_mgr_resume_hw(struct cam_ife_hw_mgr_ctx *ctx) return cam_ife_mgr_bw_control(ctx, CAM_VFE_BW_CONTROL_INCLUDE); } static int cam_ife_mgr_sof_irq_debug( struct cam_ife_hw_mgr_ctx *ctx, uint32_t sof_irq_enable) { int rc = 0; uint32_t i = 0; struct cam_ife_hw_mgr_res *hw_mgr_res = NULL; struct cam_hw_intf *hw_intf = NULL; struct cam_isp_resource_node *rsrc_node = NULL; list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_csid, list) { for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) { if (!hw_mgr_res->hw_res[i]) continue; hw_intf = hw_mgr_res->hw_res[i]->hw_intf; if (hw_intf->hw_ops.process_cmd) { rc |= hw_intf->hw_ops.process_cmd( hw_intf->hw_priv, CAM_IFE_CSID_SOF_IRQ_DEBUG, &sof_irq_enable, sizeof(sof_irq_enable)); } } } list_for_each_entry(hw_mgr_res, &ctx->res_list_ife_src, list) { for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) { if (!hw_mgr_res->hw_res[i]) continue; rsrc_node = hw_mgr_res->hw_res[i]; if (rsrc_node->process_cmd && (rsrc_node->res_id == CAM_ISP_HW_VFE_IN_CAMIF)) { rc |= hw_mgr_res->hw_res[i]->process_cmd( hw_mgr_res->hw_res[i], CAM_ISP_HW_CMD_SOF_IRQ_DEBUG, &sof_irq_enable, sizeof(sof_irq_enable)); } } } return rc; } static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args) { int rc = 0; Loading Loading @@ -2730,6 +2776,9 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args) case CAM_ISP_HW_MGR_CMD_RESUME_HW: cam_ife_mgr_resume_hw(ctx); break; case CAM_ISP_HW_MGR_CMD_SOF_DEBUG: cam_ife_mgr_sof_irq_debug(ctx, hw_cmd_args->u.sof_irq_enable); break; default: CAM_ERR(CAM_ISP, "Invalid HW mgr command:0x%x", hw_cmd_args->cmd_type); Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/include/cam_isp_hw_mgr_intf.h +2 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ enum cam_isp_hw_mgr_command { CAM_ISP_HW_MGR_CMD_IS_RDI_ONLY_CONTEXT, CAM_ISP_HW_MGR_CMD_PAUSE_HW, CAM_ISP_HW_MGR_CMD_RESUME_HW, CAM_ISP_HW_MGR_CMD_SOF_DEBUG, CAM_ISP_HW_MGR_CMD_MAX, }; Loading @@ -195,6 +196,7 @@ struct cam_isp_hw_cmd_args { uint32_t cmd_type; union { uint32_t is_rdi_only_context; uint32_t sof_irq_enable; } u; }; Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +59 −1 Original line number Diff line number Diff line Loading @@ -2476,6 +2476,61 @@ static int cam_ife_csid_write(void *hw_priv, return -EINVAL; } static int cam_ife_csid_sof_irq_debug( struct cam_ife_csid_hw *csid_hw, void *cmd_args) { int i = 0; uint32_t val = 0; bool sof_irq_enable = false; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; csid_reg = csid_hw->csid_info->csid_reg; soc_info = &csid_hw->hw_info->soc_info; if (*((uint32_t *)cmd_args) == 1) sof_irq_enable = true; val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_irq_mask_addr); if (val) { if (sof_irq_enable) val |= CSID_PATH_INFO_INPUT_SOF; else val &= ~CSID_PATH_INFO_INPUT_SOF; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_irq_mask_addr); val = 0; } for (i = 0; i < csid_reg->cmn_reg->no_rdis; i++) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[i]->csid_rdi_irq_mask_addr); if (val) { if (sof_irq_enable) val |= CSID_PATH_INFO_INPUT_SOF; else val &= ~CSID_PATH_INFO_INPUT_SOF; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[i]->csid_rdi_irq_mask_addr); val = 0; } } if (sof_irq_enable) csid_hw->csid_debug |= CSID_DEBUG_ENABLE_SOF_IRQ; else csid_hw->csid_debug &= ~CSID_DEBUG_ENABLE_SOF_IRQ; CAM_INFO(CAM_ISP, "SOF freeze: CSID SOF irq %s", (sof_irq_enable == true) ? "enabled" : "disabled"); return 0; } static int cam_ife_csid_process_cmd(void *hw_priv, uint32_t cmd_type, void *cmd_args, uint32_t arg_size) { Loading @@ -2498,6 +2553,9 @@ static int cam_ife_csid_process_cmd(void *hw_priv, case CAM_IFE_CSID_SET_CSID_DEBUG: rc = cam_ife_csid_set_csid_debug(csid_hw, cmd_args); break; case CAM_IFE_CSID_SOF_IRQ_DEBUG: rc = cam_ife_csid_sof_irq_debug(csid_hw, cmd_args); break; default: CAM_ERR(CAM_ISP, "CSID:%d unsupported cmd:%d", csid_hw->hw_intf->hw_idx, cmd_type); Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/include/cam_ife_csid_hw_intf.h +1 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,7 @@ struct cam_csid_get_time_stamp_args { enum cam_ife_csid_cmd_type { CAM_IFE_CSID_CMD_GET_TIME_STAMP, CAM_IFE_CSID_SET_CSID_DEBUG, CAM_IFE_CSID_SOF_IRQ_DEBUG, CAM_IFE_CSID_CMD_MAX, }; Loading