Loading drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +1 −2 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ struct msm_isp_bufq *msm_isp_get_bufq( /* bufq_handle cannot be 0 */ if ((bufq_handle == 0) || bufq_index >= BUF_MGR_NUM_BUF_Q || (bufq_index > buf_mgr->num_buf_q)) return NULL; Loading Loading @@ -1329,8 +1330,6 @@ static int msm_isp_buf_mgr_debug(struct msm_isp_buf_mgr *buf_mgr, for (i = 0; i < BUF_MGR_NUM_BUF_Q; i++) { bufq = &buf_mgr->bufq[i]; if (!bufq) continue; spin_lock_irqsave(&bufq->bufq_lock, flags); if (!bufq->bufq_handle) { Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +35 −46 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ int msm_isp_axi_create_stream(struct vfe_device *vfe_dev, struct msm_vfe_axi_shared_data *axi_data, struct msm_vfe_axi_stream_request_cmd *stream_cfg_cmd) { int i = stream_cfg_cmd->stream_src; uint32_t i = stream_cfg_cmd->stream_src; if (i >= VFE_AXI_SRC_MAX) { pr_err("%s:%d invalid stream_src %d\n", __func__, __LINE__, Loading Loading @@ -1692,6 +1692,7 @@ static void msm_isp_handle_done_buf_frame_id_mismatch( struct msm_isp_event_data error_event; int ret = 0; memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; error_event.u.error_info.err_type = Loading @@ -1715,7 +1716,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, struct msm_vfe_axi_stream *stream_info, struct msm_isp_buffer *buf, struct timeval *time_stamp, uint32_t frame_id) { int rc = 0, ret = 0; int rc; unsigned long flags; struct msm_isp_event_data buf_event; uint32_t stream_idx = HANDLE_TO_IDX(stream_info->stream_handle); Loading Loading @@ -1777,7 +1778,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, if (rc == -EFAULT) { msm_isp_halt_send_error(vfe_dev, ISP_EVENT_BUF_FATAL_ERROR); return ret; return rc; } if (!rc) { ISP_DBG("%s:%d vfe_id %d Buffer dropped %d\n", Loading Loading @@ -1833,7 +1834,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, if (rc == -EFAULT) { msm_isp_halt_send_error(vfe_dev, ISP_EVENT_BUF_FATAL_ERROR); return ret; return rc; } } Loading Loading @@ -1907,6 +1908,13 @@ static void msm_isp_get_camif_update_state_and_halt( pix_stream_cnt++; } if (vfe_dev->axi_data.num_active_stream == stream_cfg_cmd->num_streams && (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) *halt = 1; else *halt = 0; if ((pix_stream_cnt) && (axi_data->src_info[VFE_PIX_0].input_mux != EXTERNAL_READ)) { if (cur_pix_stream_cnt == 0 && pix_stream_cnt && Loading @@ -1914,24 +1922,17 @@ static void msm_isp_get_camif_update_state_and_halt( *camif_update = ENABLE_CAMIF; else if (cur_pix_stream_cnt && (cur_pix_stream_cnt - pix_stream_cnt) == 0 && stream_cfg_cmd->cmd == STOP_STREAM) *camif_update = DISABLE_CAMIF; else if (cur_pix_stream_cnt && (cur_pix_stream_cnt - pix_stream_cnt) == 0 && stream_cfg_cmd->cmd == STOP_IMMEDIATELY) (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) { if (*halt) *camif_update = DISABLE_CAMIF_IMMEDIATELY; else *camif_update = DISABLE_CAMIF; } else *camif_update = NO_UPDATE; } else *camif_update = NO_UPDATE; if (vfe_dev->axi_data.num_active_stream == stream_cfg_cmd->num_streams && (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) *halt = 1; else *halt = 0; } static void msm_isp_update_camif_output_count( Loading Loading @@ -2412,7 +2413,8 @@ static int msm_isp_update_dual_HW_ms_info_at_stop( static int msm_isp_update_dual_HW_axi(struct vfe_device *vfe_dev, struct msm_vfe_axi_stream *stream_info) { int rc = 0, vfe_id; int rc = 0; int vfe_id; uint32_t stream_idx = HANDLE_TO_IDX(stream_info->stream_handle); struct dual_vfe_resource *dual_vfe_res = NULL; Loading Loading @@ -2640,34 +2642,20 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev, wait_for_complete_for_this_stream = 0; stream_info->state = STOP_PENDING; ISP_DBG("Stop axi Stream 0x%x\n", stream_info->stream_id); if (stream_info->stream_src == CAMIF_RAW || stream_info->stream_src == IDEAL_RAW) { /* We dont get reg update IRQ for raw snapshot * so frame skip cant be ocnfigured */ if ((camif_update != DISABLE_CAMIF_IMMEDIATELY) && (!ext_read)) wait_for_complete_for_this_stream = 1; } else if (stream_info->stream_type == BURST_STREAM && stream_info->runtime_num_burst_capture == 0) { /* Configure AXI writemasters to stop immediately * since for burst case, write masters already skip * all frames. */ if (stream_info->stream_src == RDI_INTF_0 || stream_info->stream_src == RDI_INTF_1 || stream_info->stream_src == RDI_INTF_2) if (!halt && !ext_read && !(stream_info->stream_type == BURST_STREAM && stream_info->runtime_num_burst_capture == 0)) wait_for_complete_for_this_stream = 1; } else { if ((camif_update != DISABLE_CAMIF_IMMEDIATELY) && !halt && (!ext_read)) wait_for_complete_for_this_stream = 1; } ISP_DBG("%s: vfe_dev %d camif_update %d halt %d wait %d\n", __func__, vfe_dev->pdev->id, camif_update, halt, ISP_DBG("%s: stream 0x%x, vfe %d camif %d halt %d wait %d\n", __func__, stream_info->stream_id, vfe_dev->pdev->id, camif_update, halt, wait_for_complete_for_this_stream); intf = SRC_TO_INTF(stream_info->stream_src); if (!wait_for_complete_for_this_stream || stream_info->state == INACTIVE || Loading Loading @@ -2903,6 +2891,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev, return rc; } memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = frame_id; error_event.u.error_info.err_type = ISP_ERROR_RETURN_EMPTY_BUFFER; error_event.u.error_info.session_id = stream_info->session_id; Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c +2 −3 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ static int msm_isp_stats_cfg_ping_pong_address(struct vfe_device *vfe_dev, = buf; } } } else if (!vfe_dev->is_split) { } else { if (buf) vfe_dev->hw_info->vfe_ops.stats_ops. update_ping_pong_addr( Loading Loading @@ -285,7 +285,6 @@ static int32_t msm_isp_stats_configure(struct vfe_device *vfe_dev, if (rc < 0) { pr_err("%s:%d failed: stats buf divert rc %d\n", __func__, __LINE__, rc); if (0 == result) result = rc; } } Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +9 −7 Original line number Diff line number Diff line Loading @@ -942,6 +942,7 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; long rc2 = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); if (!vfe_dev || !vfe_dev->vfe_base) { Loading Loading @@ -1021,7 +1022,9 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { rc = msm_isp_stats_reset(vfe_dev); rc |= msm_isp_axi_reset(vfe_dev, arg); rc2 = msm_isp_axi_reset(vfe_dev, arg); if (!rc && rc2) rc = rc2; } else { pr_err_ratelimited("%s: no HW reset, halt enforced.\n", __func__); Loading @@ -1033,7 +1036,9 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { rc = msm_isp_stats_restart(vfe_dev); rc |= msm_isp_axi_restart(vfe_dev, arg); rc2 = msm_isp_axi_restart(vfe_dev, arg); if (!rc && rc2) rc = rc2; } else { pr_err_ratelimited("%s: no AXI restart, halt enforced.\n", __func__); Loading Loading @@ -1844,8 +1849,6 @@ void msm_isp_update_error_frame_count(struct vfe_device *vfe_dev) { struct msm_vfe_error_info *error_info = &vfe_dev->error_info; error_info->info_dump_frame_count++; if (error_info->info_dump_frame_count == 0) error_info->info_dump_frame_count++; } Loading Loading @@ -1944,6 +1947,7 @@ static void msm_isp_process_overflow_irq( if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; error_event.u.error_info.err_type = Loading @@ -1961,11 +1965,9 @@ void msm_isp_reset_burst_count_and_frame_drop( stream_info->stream_type != BURST_STREAM) { return; } if (stream_info->stream_type == BURST_STREAM && stream_info->num_burst_capture != 0) { if (stream_info->num_burst_capture != 0) msm_isp_reset_framedrop(vfe_dev, stream_info); } } static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev, uint32_t irq_status0, uint32_t irq_status1, Loading drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c +7 −7 Original line number Diff line number Diff line Loading @@ -467,23 +467,23 @@ static void msm_ispif_sel_csid_core(struct ispif_device *ispif, switch (intftype) { case PIX0: data &= ~(BIT(1) | BIT(0)); data |= csid; data |= (uint32_t) csid; break; case RDI0: data &= ~(BIT(5) | BIT(4)); data |= (csid << 4); data |= ((uint32_t) csid) << 4; break; case PIX1: data &= ~(BIT(9) | BIT(8)); data |= (csid << 8); data |= ((uint32_t) csid) << 8; break; case RDI1: data &= ~(BIT(13) | BIT(12)); data |= (csid << 12); data |= ((uint32_t) csid) << 12; break; case RDI2: data &= ~(BIT(21) | BIT(20)); data |= (csid << 20); data |= ((uint32_t) csid) << 20; break; } Loading Loading @@ -559,9 +559,9 @@ static void msm_ispif_enable_intf_cids(struct ispif_device *ispif, data = msm_camera_io_r(ispif->base + intf_addr); if (enable) data |= cid_mask; data |= (uint32_t) cid_mask; else data &= ~cid_mask; data &= ~((uint32_t) cid_mask); msm_camera_io_w_mb(data, ispif->base + intf_addr); } Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_buf_mgr.c +1 −2 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ struct msm_isp_bufq *msm_isp_get_bufq( /* bufq_handle cannot be 0 */ if ((bufq_handle == 0) || bufq_index >= BUF_MGR_NUM_BUF_Q || (bufq_index > buf_mgr->num_buf_q)) return NULL; Loading Loading @@ -1329,8 +1330,6 @@ static int msm_isp_buf_mgr_debug(struct msm_isp_buf_mgr *buf_mgr, for (i = 0; i < BUF_MGR_NUM_BUF_Q; i++) { bufq = &buf_mgr->bufq[i]; if (!bufq) continue; spin_lock_irqsave(&bufq->bufq_lock, flags); if (!bufq->bufq_handle) { Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +35 −46 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ int msm_isp_axi_create_stream(struct vfe_device *vfe_dev, struct msm_vfe_axi_shared_data *axi_data, struct msm_vfe_axi_stream_request_cmd *stream_cfg_cmd) { int i = stream_cfg_cmd->stream_src; uint32_t i = stream_cfg_cmd->stream_src; if (i >= VFE_AXI_SRC_MAX) { pr_err("%s:%d invalid stream_src %d\n", __func__, __LINE__, Loading Loading @@ -1692,6 +1692,7 @@ static void msm_isp_handle_done_buf_frame_id_mismatch( struct msm_isp_event_data error_event; int ret = 0; memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; error_event.u.error_info.err_type = Loading @@ -1715,7 +1716,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, struct msm_vfe_axi_stream *stream_info, struct msm_isp_buffer *buf, struct timeval *time_stamp, uint32_t frame_id) { int rc = 0, ret = 0; int rc; unsigned long flags; struct msm_isp_event_data buf_event; uint32_t stream_idx = HANDLE_TO_IDX(stream_info->stream_handle); Loading Loading @@ -1777,7 +1778,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, if (rc == -EFAULT) { msm_isp_halt_send_error(vfe_dev, ISP_EVENT_BUF_FATAL_ERROR); return ret; return rc; } if (!rc) { ISP_DBG("%s:%d vfe_id %d Buffer dropped %d\n", Loading Loading @@ -1833,7 +1834,7 @@ static int msm_isp_process_done_buf(struct vfe_device *vfe_dev, if (rc == -EFAULT) { msm_isp_halt_send_error(vfe_dev, ISP_EVENT_BUF_FATAL_ERROR); return ret; return rc; } } Loading Loading @@ -1907,6 +1908,13 @@ static void msm_isp_get_camif_update_state_and_halt( pix_stream_cnt++; } if (vfe_dev->axi_data.num_active_stream == stream_cfg_cmd->num_streams && (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) *halt = 1; else *halt = 0; if ((pix_stream_cnt) && (axi_data->src_info[VFE_PIX_0].input_mux != EXTERNAL_READ)) { if (cur_pix_stream_cnt == 0 && pix_stream_cnt && Loading @@ -1914,24 +1922,17 @@ static void msm_isp_get_camif_update_state_and_halt( *camif_update = ENABLE_CAMIF; else if (cur_pix_stream_cnt && (cur_pix_stream_cnt - pix_stream_cnt) == 0 && stream_cfg_cmd->cmd == STOP_STREAM) *camif_update = DISABLE_CAMIF; else if (cur_pix_stream_cnt && (cur_pix_stream_cnt - pix_stream_cnt) == 0 && stream_cfg_cmd->cmd == STOP_IMMEDIATELY) (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) { if (*halt) *camif_update = DISABLE_CAMIF_IMMEDIATELY; else *camif_update = DISABLE_CAMIF; } else *camif_update = NO_UPDATE; } else *camif_update = NO_UPDATE; if (vfe_dev->axi_data.num_active_stream == stream_cfg_cmd->num_streams && (stream_cfg_cmd->cmd == STOP_STREAM || stream_cfg_cmd->cmd == STOP_IMMEDIATELY)) *halt = 1; else *halt = 0; } static void msm_isp_update_camif_output_count( Loading Loading @@ -2412,7 +2413,8 @@ static int msm_isp_update_dual_HW_ms_info_at_stop( static int msm_isp_update_dual_HW_axi(struct vfe_device *vfe_dev, struct msm_vfe_axi_stream *stream_info) { int rc = 0, vfe_id; int rc = 0; int vfe_id; uint32_t stream_idx = HANDLE_TO_IDX(stream_info->stream_handle); struct dual_vfe_resource *dual_vfe_res = NULL; Loading Loading @@ -2640,34 +2642,20 @@ static int msm_isp_stop_axi_stream(struct vfe_device *vfe_dev, wait_for_complete_for_this_stream = 0; stream_info->state = STOP_PENDING; ISP_DBG("Stop axi Stream 0x%x\n", stream_info->stream_id); if (stream_info->stream_src == CAMIF_RAW || stream_info->stream_src == IDEAL_RAW) { /* We dont get reg update IRQ for raw snapshot * so frame skip cant be ocnfigured */ if ((camif_update != DISABLE_CAMIF_IMMEDIATELY) && (!ext_read)) wait_for_complete_for_this_stream = 1; } else if (stream_info->stream_type == BURST_STREAM && stream_info->runtime_num_burst_capture == 0) { /* Configure AXI writemasters to stop immediately * since for burst case, write masters already skip * all frames. */ if (stream_info->stream_src == RDI_INTF_0 || stream_info->stream_src == RDI_INTF_1 || stream_info->stream_src == RDI_INTF_2) if (!halt && !ext_read && !(stream_info->stream_type == BURST_STREAM && stream_info->runtime_num_burst_capture == 0)) wait_for_complete_for_this_stream = 1; } else { if ((camif_update != DISABLE_CAMIF_IMMEDIATELY) && !halt && (!ext_read)) wait_for_complete_for_this_stream = 1; } ISP_DBG("%s: vfe_dev %d camif_update %d halt %d wait %d\n", __func__, vfe_dev->pdev->id, camif_update, halt, ISP_DBG("%s: stream 0x%x, vfe %d camif %d halt %d wait %d\n", __func__, stream_info->stream_id, vfe_dev->pdev->id, camif_update, halt, wait_for_complete_for_this_stream); intf = SRC_TO_INTF(stream_info->stream_src); if (!wait_for_complete_for_this_stream || stream_info->state == INACTIVE || Loading Loading @@ -2903,6 +2891,7 @@ static int msm_isp_return_empty_buffer(struct vfe_device *vfe_dev, return rc; } memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = frame_id; error_event.u.error_info.err_type = ISP_ERROR_RETURN_EMPTY_BUFFER; error_event.u.error_info.session_id = stream_info->session_id; Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c +2 −3 Original line number Diff line number Diff line Loading @@ -117,7 +117,7 @@ static int msm_isp_stats_cfg_ping_pong_address(struct vfe_device *vfe_dev, = buf; } } } else if (!vfe_dev->is_split) { } else { if (buf) vfe_dev->hw_info->vfe_ops.stats_ops. update_ping_pong_addr( Loading Loading @@ -285,7 +285,6 @@ static int32_t msm_isp_stats_configure(struct vfe_device *vfe_dev, if (rc < 0) { pr_err("%s:%d failed: stats buf divert rc %d\n", __func__, __LINE__, rc); if (0 == result) result = rc; } } Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +9 −7 Original line number Diff line number Diff line Loading @@ -942,6 +942,7 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; long rc2 = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); if (!vfe_dev || !vfe_dev->vfe_base) { Loading Loading @@ -1021,7 +1022,9 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { rc = msm_isp_stats_reset(vfe_dev); rc |= msm_isp_axi_reset(vfe_dev, arg); rc2 = msm_isp_axi_reset(vfe_dev, arg); if (!rc && rc2) rc = rc2; } else { pr_err_ratelimited("%s: no HW reset, halt enforced.\n", __func__); Loading @@ -1033,7 +1036,9 @@ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { rc = msm_isp_stats_restart(vfe_dev); rc |= msm_isp_axi_restart(vfe_dev, arg); rc2 = msm_isp_axi_restart(vfe_dev, arg); if (!rc && rc2) rc = rc2; } else { pr_err_ratelimited("%s: no AXI restart, halt enforced.\n", __func__); Loading Loading @@ -1844,8 +1849,6 @@ void msm_isp_update_error_frame_count(struct vfe_device *vfe_dev) { struct msm_vfe_error_info *error_info = &vfe_dev->error_info; error_info->info_dump_frame_count++; if (error_info->info_dump_frame_count == 0) error_info->info_dump_frame_count++; } Loading Loading @@ -1944,6 +1947,7 @@ static void msm_isp_process_overflow_irq( if (atomic_read(&vfe_dev->error_info.overflow_state) != HALT_ENFORCED) { memset(&error_event, 0, sizeof(error_event)); error_event.frame_id = vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id; error_event.u.error_info.err_type = Loading @@ -1961,11 +1965,9 @@ void msm_isp_reset_burst_count_and_frame_drop( stream_info->stream_type != BURST_STREAM) { return; } if (stream_info->stream_type == BURST_STREAM && stream_info->num_burst_capture != 0) { if (stream_info->num_burst_capture != 0) msm_isp_reset_framedrop(vfe_dev, stream_info); } } static void msm_isp_enqueue_tasklet_cmd(struct vfe_device *vfe_dev, uint32_t irq_status0, uint32_t irq_status1, Loading
drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c +7 −7 Original line number Diff line number Diff line Loading @@ -467,23 +467,23 @@ static void msm_ispif_sel_csid_core(struct ispif_device *ispif, switch (intftype) { case PIX0: data &= ~(BIT(1) | BIT(0)); data |= csid; data |= (uint32_t) csid; break; case RDI0: data &= ~(BIT(5) | BIT(4)); data |= (csid << 4); data |= ((uint32_t) csid) << 4; break; case PIX1: data &= ~(BIT(9) | BIT(8)); data |= (csid << 8); data |= ((uint32_t) csid) << 8; break; case RDI1: data &= ~(BIT(13) | BIT(12)); data |= (csid << 12); data |= ((uint32_t) csid) << 12; break; case RDI2: data &= ~(BIT(21) | BIT(20)); data |= (csid << 20); data |= ((uint32_t) csid) << 20; break; } Loading Loading @@ -559,9 +559,9 @@ static void msm_ispif_enable_intf_cids(struct ispif_device *ispif, data = msm_camera_io_r(ispif->base + intf_addr); if (enable) data |= cid_mask; data |= (uint32_t) cid_mask; else data &= ~cid_mask; data &= ~((uint32_t) cid_mask); msm_camera_io_w_mb(data, ispif->base + intf_addr); } Loading