Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +50 −1 Original line number Diff line number Diff line Loading @@ -2162,7 +2162,8 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args) struct cam_isp_stop_args stop_isp; struct cam_ife_hw_mgr_ctx *ctx; struct cam_ife_hw_mgr_res *hw_mgr_res; uint32_t i; struct cam_isp_resource_node *rsrc_node = NULL; uint32_t i, camif_debug; if (!hw_mgr_priv || !start_isp) { CAM_ERR(CAM_ISP, "Invalid arguments"); Loading Loading @@ -2196,6 +2197,24 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args) sizeof(g_ife_hw_mgr.debug_cfg.csid_debug)); } camif_debug = g_ife_hw_mgr.debug_cfg.camif_debug; 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_SET_CAMIF_DEBUG, &camif_debug, sizeof(camif_debug)); } } } rc = cam_ife_hw_mgr_init_hw(ctx); if (rc) { CAM_ERR(CAM_ISP, "Init failed"); Loading Loading @@ -4265,6 +4284,28 @@ DEFINE_SIMPLE_ATTRIBUTE(cam_ife_csid_debug, cam_ife_get_csid_debug, cam_ife_set_csid_debug, "%16llu"); static int cam_ife_set_camif_debug(void *data, u64 val) { g_ife_hw_mgr.debug_cfg.camif_debug = val; CAM_DBG(CAM_ISP, "Set camif enable_diag_sensor_status value :%lld", val); return 0; } static int cam_ife_get_camif_debug(void *data, u64 *val) { *val = g_ife_hw_mgr.debug_cfg.camif_debug; CAM_DBG(CAM_ISP, "Set camif enable_diag_sensor_status value :%lld", g_ife_hw_mgr.debug_cfg.csid_debug); return 0; } DEFINE_SIMPLE_ATTRIBUTE(cam_ife_camif_debug, cam_ife_get_camif_debug, cam_ife_set_camif_debug, "%16llu"); static int cam_ife_hw_mgr_debug_register(void) { g_ife_hw_mgr.debug_cfg.dentry = debugfs_create_dir("camera_ife", Loading @@ -4290,6 +4331,14 @@ static int cam_ife_hw_mgr_debug_register(void) CAM_ERR(CAM_ISP, "failed to create enable_recovery"); goto err; } if (!debugfs_create_file("ife_camif_debug", 0644, g_ife_hw_mgr.debug_cfg.dentry, NULL, &cam_ife_camif_debug)) { CAM_ERR(CAM_ISP, "failed to create cam_ife_camif_debug"); goto err; } g_ife_hw_mgr.debug_cfg.enable_recovery = 0; return 0; Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.h +5 −3 Original line number Diff line number Diff line Loading @@ -83,13 +83,15 @@ struct ctx_base_info { * * @dentry: Debugfs entry * @csid_debug: csid debug information * @enable_recovery enable recovery * @enable_recovery: enable recovery * @enable_diag_sensor_status: enable sensor diagnosis status * */ struct cam_ife_hw_mgr_debug { struct dentry *dentry; uint64_t csid_debug; uint32_t enable_recovery; uint32_t camif_debug; }; /** Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid170.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -286,6 +286,8 @@ static struct cam_ife_csid_common_reg_offset .crop_shift = 16, .ipp_irq_mask_all = 0x7FFF, .rdi_irq_mask_all = 0x7FFF, .measure_en_hbi_vbi_cnt_mask = 0xC, .format_measure_en_val = 1, }; struct cam_ife_csid_reg_offset cam_ife_csid_170_reg_offset = { Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +124 −1 Original line number Diff line number Diff line Loading @@ -1443,9 +1443,23 @@ static int cam_ife_csid_init_config_ipp_path( val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_cfg0_addr); val |= (1 << csid_reg->cmn_reg->path_en_shift_val); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) val |= csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_cfg0_addr); /* Enable the HBI/VBI counter */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure_cfg0_addr); val |= csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure_cfg0_addr); } /* configure the rx packet capture based on csid debug set */ val = 0; if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE) Loading Loading @@ -1484,8 +1498,10 @@ static int cam_ife_csid_deinit_ipp_path( struct cam_isp_resource_node *res) { int rc = 0; uint32_t val = 0; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; struct cam_ife_csid_ipp_reg_offset *ipp_reg; csid_reg = csid_hw->csid_info->csid_reg; soc_info = &csid_hw->hw_info->soc_info; Loading @@ -1503,8 +1519,26 @@ static int cam_ife_csid_deinit_ipp_path( csid_hw->hw_intf->hw_idx, res->res_id); rc = -EINVAL; goto end; } ipp_reg = csid_reg->ipp_reg; val = cam_io_r_mb(soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_cfg0_addr); if (val & csid_reg->cmn_reg->format_measure_en_val) { val &= ~csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_cfg0_addr); /* Disable the HBI/VBI counter */ val = cam_io_r_mb(soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_format_measure_cfg0_addr); val &= ~csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_format_measure_cfg0_addr); } end: res->res_state = CAM_ISP_RESOURCE_STATE_RESERVED; return rc; } Loading Loading @@ -1649,6 +1683,7 @@ static int cam_ife_csid_init_config_rdi_path( struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; uint32_t path_format = 0, plain_fmt = 0, val = 0, id; uint32_t format_measure_addr; path_data = (struct cam_ife_csid_path_cfg *) res->res_priv; csid_reg = csid_hw->csid_info->csid_reg; Loading Loading @@ -1742,9 +1777,24 @@ static int cam_ife_csid_init_config_rdi_path( csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); val |= (1 << csid_reg->cmn_reg->path_en_shift_val); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) val |= csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); format_measure_addr = csid_reg->rdi_reg[id]->csid_rdi_format_measure_cfg0_addr; /* Enable the HBI/VBI counter */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + format_measure_addr); val |= csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + format_measure_addr); } /* configure the rx packet capture based on csid debug set */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE) val = ((1 << Loading Loading @@ -1780,7 +1830,7 @@ static int cam_ife_csid_deinit_rdi_path( struct cam_isp_resource_node *res) { int rc = 0; uint32_t id; uint32_t id, val, format_measure_addr; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; Loading @@ -1797,6 +1847,24 @@ static int cam_ife_csid_deinit_rdi_path( return -EINVAL; } format_measure_addr = csid_reg->rdi_reg[id]->csid_rdi_format_measure_cfg0_addr; if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); val &= ~csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); /* Disable the HBI/VBI counter */ val = cam_io_r_mb(soc_info->reg_map[0].mem_base + format_measure_addr); val &= ~csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + format_measure_addr); } res->res_state = CAM_ISP_RESOURCE_STATE_RESERVED; return rc; } Loading Loading @@ -1899,6 +1967,55 @@ static int cam_ife_csid_disable_rdi_path( return rc; } static int cam_ife_csid_get_hbi_vbi( struct cam_ife_csid_hw *csid_hw, struct cam_isp_resource_node *res) { uint32_t hbi, vbi; const struct cam_ife_csid_reg_offset *csid_reg; const struct cam_ife_csid_rdi_reg_offset *rdi_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 (res->res_type != CAM_ISP_RESOURCE_PIX_PATH || res->res_id >= CAM_IFE_PIX_PATH_RES_MAX) { CAM_ERR(CAM_ISP, "CSID:%d Invalid res_type:%d res id%d", csid_hw->hw_intf->hw_idx, res->res_type, res->res_id); return -EINVAL; } if (csid_hw->hw_info->hw_state != CAM_HW_STATE_POWER_UP) { CAM_ERR(CAM_ISP, "CSID:%d Invalid dev state :%d", csid_hw->hw_intf->hw_idx, csid_hw->hw_info->hw_state); return -EINVAL; } if (res->res_id == CAM_IFE_PIX_PATH_RES_IPP) { hbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure1_addr); vbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure2_addr); } else { rdi_reg = csid_reg->rdi_reg[res->res_id]; hbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + rdi_reg->csid_rdi_format_measure1_addr); vbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + rdi_reg->csid_rdi_format_measure2_addr); } CAM_INFO_RATE_LIMIT(CAM_ISP, "Resource %u HBI: 0x%x", res->res_id, hbi); CAM_INFO_RATE_LIMIT(CAM_ISP, "Resource %u VBI: 0x%x", res->res_id, vbi); return 0; } static int cam_ife_csid_get_time_stamp( struct cam_ife_csid_hw *csid_hw, void *cmd_args) { Loading Loading @@ -2552,6 +2669,7 @@ static int cam_ife_csid_process_cmd(void *hw_priv, int rc = 0; struct cam_ife_csid_hw *csid_hw; struct cam_hw_info *csid_hw_info; struct cam_isp_resource_node *res = NULL; if (!hw_priv || !cmd_args) { CAM_ERR(CAM_ISP, "CSID: Invalid arguments"); Loading @@ -2564,6 +2682,11 @@ static int cam_ife_csid_process_cmd(void *hw_priv, switch (cmd_type) { case CAM_IFE_CSID_CMD_GET_TIME_STAMP: rc = cam_ife_csid_get_time_stamp(csid_hw, cmd_args); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { res = ((struct cam_csid_get_time_stamp_args *) cmd_args)->node_res; cam_ife_csid_get_hbi_vbi(csid_hw, res); } break; case CAM_IFE_CSID_SET_CSID_DEBUG: rc = cam_ife_csid_set_csid_debug(csid_hw, cmd_args); Loading drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.h +4 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ #define CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE BIT(4) #define CSID_DEBUG_ENABLE_LONG_PKT_CAPTURE BIT(5) #define CSID_DEBUG_ENABLE_CPHY_PKT_CAPTURE BIT(6) #define CSID_DEBUG_ENABLE_HBI_VBI_INFO BIT(7) /* enum cam_csid_path_halt_mode select the path halt mode control */ enum cam_csid_path_halt_mode { Loading Loading @@ -285,6 +287,8 @@ struct cam_ife_csid_common_reg_offset { uint32_t crop_shift; uint32_t ipp_irq_mask_all; uint32_t rdi_irq_mask_all; uint32_t measure_en_hbi_vbi_cnt_mask; uint32_t format_measure_en_val; }; /** Loading Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +50 −1 Original line number Diff line number Diff line Loading @@ -2162,7 +2162,8 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args) struct cam_isp_stop_args stop_isp; struct cam_ife_hw_mgr_ctx *ctx; struct cam_ife_hw_mgr_res *hw_mgr_res; uint32_t i; struct cam_isp_resource_node *rsrc_node = NULL; uint32_t i, camif_debug; if (!hw_mgr_priv || !start_isp) { CAM_ERR(CAM_ISP, "Invalid arguments"); Loading Loading @@ -2196,6 +2197,24 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args) sizeof(g_ife_hw_mgr.debug_cfg.csid_debug)); } camif_debug = g_ife_hw_mgr.debug_cfg.camif_debug; 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_SET_CAMIF_DEBUG, &camif_debug, sizeof(camif_debug)); } } } rc = cam_ife_hw_mgr_init_hw(ctx); if (rc) { CAM_ERR(CAM_ISP, "Init failed"); Loading Loading @@ -4265,6 +4284,28 @@ DEFINE_SIMPLE_ATTRIBUTE(cam_ife_csid_debug, cam_ife_get_csid_debug, cam_ife_set_csid_debug, "%16llu"); static int cam_ife_set_camif_debug(void *data, u64 val) { g_ife_hw_mgr.debug_cfg.camif_debug = val; CAM_DBG(CAM_ISP, "Set camif enable_diag_sensor_status value :%lld", val); return 0; } static int cam_ife_get_camif_debug(void *data, u64 *val) { *val = g_ife_hw_mgr.debug_cfg.camif_debug; CAM_DBG(CAM_ISP, "Set camif enable_diag_sensor_status value :%lld", g_ife_hw_mgr.debug_cfg.csid_debug); return 0; } DEFINE_SIMPLE_ATTRIBUTE(cam_ife_camif_debug, cam_ife_get_camif_debug, cam_ife_set_camif_debug, "%16llu"); static int cam_ife_hw_mgr_debug_register(void) { g_ife_hw_mgr.debug_cfg.dentry = debugfs_create_dir("camera_ife", Loading @@ -4290,6 +4331,14 @@ static int cam_ife_hw_mgr_debug_register(void) CAM_ERR(CAM_ISP, "failed to create enable_recovery"); goto err; } if (!debugfs_create_file("ife_camif_debug", 0644, g_ife_hw_mgr.debug_cfg.dentry, NULL, &cam_ife_camif_debug)) { CAM_ERR(CAM_ISP, "failed to create cam_ife_camif_debug"); goto err; } g_ife_hw_mgr.debug_cfg.enable_recovery = 0; return 0; Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.h +5 −3 Original line number Diff line number Diff line Loading @@ -83,13 +83,15 @@ struct ctx_base_info { * * @dentry: Debugfs entry * @csid_debug: csid debug information * @enable_recovery enable recovery * @enable_recovery: enable recovery * @enable_diag_sensor_status: enable sensor diagnosis status * */ struct cam_ife_hw_mgr_debug { struct dentry *dentry; uint64_t csid_debug; uint32_t enable_recovery; uint32_t camif_debug; }; /** Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid170.h +3 −1 Original line number Diff line number Diff line /* Copyright (c) 2017, The Linux Foundation. All rights reserved. /* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -286,6 +286,8 @@ static struct cam_ife_csid_common_reg_offset .crop_shift = 16, .ipp_irq_mask_all = 0x7FFF, .rdi_irq_mask_all = 0x7FFF, .measure_en_hbi_vbi_cnt_mask = 0xC, .format_measure_en_val = 1, }; struct cam_ife_csid_reg_offset cam_ife_csid_170_reg_offset = { Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +124 −1 Original line number Diff line number Diff line Loading @@ -1443,9 +1443,23 @@ static int cam_ife_csid_init_config_ipp_path( val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_cfg0_addr); val |= (1 << csid_reg->cmn_reg->path_en_shift_val); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) val |= csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_cfg0_addr); /* Enable the HBI/VBI counter */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure_cfg0_addr); val |= csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure_cfg0_addr); } /* configure the rx packet capture based on csid debug set */ val = 0; if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE) Loading Loading @@ -1484,8 +1498,10 @@ static int cam_ife_csid_deinit_ipp_path( struct cam_isp_resource_node *res) { int rc = 0; uint32_t val = 0; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; struct cam_ife_csid_ipp_reg_offset *ipp_reg; csid_reg = csid_hw->csid_info->csid_reg; soc_info = &csid_hw->hw_info->soc_info; Loading @@ -1503,8 +1519,26 @@ static int cam_ife_csid_deinit_ipp_path( csid_hw->hw_intf->hw_idx, res->res_id); rc = -EINVAL; goto end; } ipp_reg = csid_reg->ipp_reg; val = cam_io_r_mb(soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_cfg0_addr); if (val & csid_reg->cmn_reg->format_measure_en_val) { val &= ~csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_cfg0_addr); /* Disable the HBI/VBI counter */ val = cam_io_r_mb(soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_format_measure_cfg0_addr); val &= ~csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + ipp_reg->csid_ipp_format_measure_cfg0_addr); } end: res->res_state = CAM_ISP_RESOURCE_STATE_RESERVED; return rc; } Loading Loading @@ -1649,6 +1683,7 @@ static int cam_ife_csid_init_config_rdi_path( struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; uint32_t path_format = 0, plain_fmt = 0, val = 0, id; uint32_t format_measure_addr; path_data = (struct cam_ife_csid_path_cfg *) res->res_priv; csid_reg = csid_hw->csid_info->csid_reg; Loading Loading @@ -1742,9 +1777,24 @@ static int cam_ife_csid_init_config_rdi_path( csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); val |= (1 << csid_reg->cmn_reg->path_en_shift_val); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) val |= csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); format_measure_addr = csid_reg->rdi_reg[id]->csid_rdi_format_measure_cfg0_addr; /* Enable the HBI/VBI counter */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + format_measure_addr); val |= csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + format_measure_addr); } /* configure the rx packet capture based on csid debug set */ if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE) val = ((1 << Loading Loading @@ -1780,7 +1830,7 @@ static int cam_ife_csid_deinit_rdi_path( struct cam_isp_resource_node *res) { int rc = 0; uint32_t id; uint32_t id, val, format_measure_addr; struct cam_ife_csid_reg_offset *csid_reg; struct cam_hw_soc_info *soc_info; Loading @@ -1797,6 +1847,24 @@ static int cam_ife_csid_deinit_rdi_path( return -EINVAL; } format_measure_addr = csid_reg->rdi_reg[id]->csid_rdi_format_measure_cfg0_addr; if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { val = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); val &= ~csid_reg->cmn_reg->format_measure_en_val; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + csid_reg->rdi_reg[id]->csid_rdi_cfg0_addr); /* Disable the HBI/VBI counter */ val = cam_io_r_mb(soc_info->reg_map[0].mem_base + format_measure_addr); val &= ~csid_reg->cmn_reg->measure_en_hbi_vbi_cnt_mask; cam_io_w_mb(val, soc_info->reg_map[0].mem_base + format_measure_addr); } res->res_state = CAM_ISP_RESOURCE_STATE_RESERVED; return rc; } Loading Loading @@ -1899,6 +1967,55 @@ static int cam_ife_csid_disable_rdi_path( return rc; } static int cam_ife_csid_get_hbi_vbi( struct cam_ife_csid_hw *csid_hw, struct cam_isp_resource_node *res) { uint32_t hbi, vbi; const struct cam_ife_csid_reg_offset *csid_reg; const struct cam_ife_csid_rdi_reg_offset *rdi_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 (res->res_type != CAM_ISP_RESOURCE_PIX_PATH || res->res_id >= CAM_IFE_PIX_PATH_RES_MAX) { CAM_ERR(CAM_ISP, "CSID:%d Invalid res_type:%d res id%d", csid_hw->hw_intf->hw_idx, res->res_type, res->res_id); return -EINVAL; } if (csid_hw->hw_info->hw_state != CAM_HW_STATE_POWER_UP) { CAM_ERR(CAM_ISP, "CSID:%d Invalid dev state :%d", csid_hw->hw_intf->hw_idx, csid_hw->hw_info->hw_state); return -EINVAL; } if (res->res_id == CAM_IFE_PIX_PATH_RES_IPP) { hbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure1_addr); vbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + csid_reg->ipp_reg->csid_ipp_format_measure2_addr); } else { rdi_reg = csid_reg->rdi_reg[res->res_id]; hbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + rdi_reg->csid_rdi_format_measure1_addr); vbi = cam_io_r_mb(soc_info->reg_map[0].mem_base + rdi_reg->csid_rdi_format_measure2_addr); } CAM_INFO_RATE_LIMIT(CAM_ISP, "Resource %u HBI: 0x%x", res->res_id, hbi); CAM_INFO_RATE_LIMIT(CAM_ISP, "Resource %u VBI: 0x%x", res->res_id, vbi); return 0; } static int cam_ife_csid_get_time_stamp( struct cam_ife_csid_hw *csid_hw, void *cmd_args) { Loading Loading @@ -2552,6 +2669,7 @@ static int cam_ife_csid_process_cmd(void *hw_priv, int rc = 0; struct cam_ife_csid_hw *csid_hw; struct cam_hw_info *csid_hw_info; struct cam_isp_resource_node *res = NULL; if (!hw_priv || !cmd_args) { CAM_ERR(CAM_ISP, "CSID: Invalid arguments"); Loading @@ -2564,6 +2682,11 @@ static int cam_ife_csid_process_cmd(void *hw_priv, switch (cmd_type) { case CAM_IFE_CSID_CMD_GET_TIME_STAMP: rc = cam_ife_csid_get_time_stamp(csid_hw, cmd_args); if (csid_hw->csid_debug & CSID_DEBUG_ENABLE_HBI_VBI_INFO) { res = ((struct cam_csid_get_time_stamp_args *) cmd_args)->node_res; cam_ife_csid_get_hbi_vbi(csid_hw, res); } break; case CAM_IFE_CSID_SET_CSID_DEBUG: rc = cam_ife_csid_set_csid_debug(csid_hw, cmd_args); Loading
drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.h +4 −0 Original line number Diff line number Diff line Loading @@ -76,6 +76,8 @@ #define CSID_DEBUG_ENABLE_SHORT_PKT_CAPTURE BIT(4) #define CSID_DEBUG_ENABLE_LONG_PKT_CAPTURE BIT(5) #define CSID_DEBUG_ENABLE_CPHY_PKT_CAPTURE BIT(6) #define CSID_DEBUG_ENABLE_HBI_VBI_INFO BIT(7) /* enum cam_csid_path_halt_mode select the path halt mode control */ enum cam_csid_path_halt_mode { Loading Loading @@ -285,6 +287,8 @@ struct cam_ife_csid_common_reg_offset { uint32_t crop_shift; uint32_t ipp_irq_mask_all; uint32_t rdi_irq_mask_all; uint32_t measure_en_hbi_vbi_cnt_mask; uint32_t format_measure_en_val; }; /** Loading