diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-05-11 06:48:05 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-05-11 06:48:04 -0700 |
| commit | 3757478deb49a840ea8331f5792621fa9ef44a25 (patch) | |
| tree | f9d0998a05e5611446bb5ff76b90834c16df1deb | |
| parent | 5633ac9b6cfbd2b989bdcd8fbc1ae6519e66c5ca (diff) | |
| parent | 07869d3af88571cfcc040379981dc14ac91c1178 (diff) | |
Merge "msm: isp: Fix pdaf buffer drop"
4 files changed, 15 insertions, 7 deletions
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp.h b/drivers/media/platform/msm/camera_v2/isp/msm_isp.h index 7d19b4e1fbba..f37e183e35de 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp.h +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp.h @@ -739,6 +739,7 @@ struct msm_vfe_common_dev_data { struct msm_vfe_axi_stream streams[VFE_AXI_SRC_MAX * MAX_VFE]; struct msm_vfe_stats_stream stats_streams[MSM_ISP_STATS_MAX * MAX_VFE]; struct mutex vfe_common_mutex; + uint8_t pd_buf_idx; /* Irq debug Info */ struct msm_vfe_irq_dump vfe_irq_dump; struct msm_vfe_tasklet tasklets[MAX_VFE + 1]; @@ -837,8 +838,6 @@ struct vfe_device { uint32_t bus_err_ign_mask; uint32_t recovery_irq0_mask; uint32_t recovery_irq1_mask; - /* Store the buf_idx for pd stats RDI stream */ - uint8_t pd_buf_idx; /* total bandwidth per vfe */ uint64_t total_bandwidth; }; diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c index e7b3c56aa1f6..0c0a9f997fa0 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c @@ -998,6 +998,7 @@ static void msm_isp_update_pd_stats_idx(struct vfe_device *vfe_dev, uint32_t pingpong_status = 0, pingpong_bit = 0; struct msm_isp_buffer *done_buf = NULL; int vfe_idx = -1; + unsigned long flags; if (frame_src < VFE_RAW_0 || frame_src > VFE_RAW_2) return; @@ -1015,10 +1016,14 @@ static void msm_isp_update_pd_stats_idx(struct vfe_device *vfe_dev, pingpong_bit = ((pingpong_status >> pd_stream_info->wm[vfe_idx][0]) & 0x1); done_buf = pd_stream_info->buf[pingpong_bit]; + spin_lock_irqsave(&vfe_dev->common_data-> + common_dev_data_lock, flags); if (done_buf) - vfe_dev->pd_buf_idx = done_buf->buf_idx; + vfe_dev->common_data->pd_buf_idx = done_buf->buf_idx; else - vfe_dev->pd_buf_idx = 0xF; + vfe_dev->common_data->pd_buf_idx = 0xF; + spin_unlock_irqrestore(&vfe_dev->common_data-> + common_dev_data_lock, flags); } } diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c index 73068a615380..ee695bf5dfd9 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c @@ -229,8 +229,12 @@ static int32_t msm_isp_stats_buf_divert(struct vfe_device *vfe_dev, stats_event->pd_stats_idx = 0xF; if (stream_info->stats_type == MSM_ISP_STATS_BF) { - stats_event->pd_stats_idx = vfe_dev->pd_buf_idx; - vfe_dev->pd_buf_idx = 0xF; + spin_lock_irqsave(&vfe_dev->common_data-> + common_dev_data_lock, flags); + stats_event->pd_stats_idx = vfe_dev->common_data->pd_buf_idx; + vfe_dev->common_data->pd_buf_idx = 0xF; + spin_unlock_irqrestore(&vfe_dev->common_data-> + common_dev_data_lock, flags); } if (comp_stats_type_mask == NULL) { stats_event->stats_mask = diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c index 5d31b9f21339..2f8134bc3efb 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c @@ -2314,7 +2314,7 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) /* Register page fault handler */ vfe_dev->buf_mgr->pagefault_debug_disable = 0; /* initialize pd_buf_idx with an invalid index 0xF */ - vfe_dev->pd_buf_idx = 0xF; + vfe_dev->common_data->pd_buf_idx = 0xF; cam_smmu_reg_client_page_fault_handler( vfe_dev->buf_mgr->iommu_hdl, |
