summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-05-11 06:48:05 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-05-11 06:48:04 -0700
commit3757478deb49a840ea8331f5792621fa9ef44a25 (patch)
treef9d0998a05e5611446bb5ff76b90834c16df1deb
parent5633ac9b6cfbd2b989bdcd8fbc1ae6519e66c5ca (diff)
parent07869d3af88571cfcc040379981dc14ac91c1178 (diff)
Merge "msm: isp: Fix pdaf buffer drop"
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp.h3
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c9
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_stats_util.c8
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c2
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,