summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrikanth Uyyala <suyyala@codeaurora.org>2019-07-12 16:11:46 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2019-08-02 04:27:36 -0700
commitbc82952bb8012641c5e74a228ab697ff6eec38e4 (patch)
tree180f3a73980782797a63357afe0afeb1f86a22d0
parentba309f5e08f4744ca641e4dfe0771fb0926c74de (diff)
msm: camera_v2: reject the late request
when request_frame is very late or reg_update is missing for previous frame reject it inform using drop_reconfig flag. Change-Id: Ic7be9c765da63e2c84c4ce2ff05a3cc146f5c2bd Signed-off-by: Srikanth Uyyala <suyyala@codeaurora.org> Signed-off-by: Sumalatha Malothu <smalot@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c28
1 files changed, 13 insertions, 15 deletions
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 f021707a53cd..1af55fe257af 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
@@ -616,12 +616,9 @@ static void msm_isp_update_framedrop_reg(struct msm_vfe_axi_stream *stream_info,
MSM_VFE_STREAM_STOP_PERIOD;
}
- if (stream_info->undelivered_request_cnt > 0 &&
- drop_reconfig != 1)
+ if (stream_info->undelivered_request_cnt > 0)
stream_info->current_framedrop_period =
MSM_VFE_STREAM_STOP_PERIOD;
- if (stream_info->controllable_output && drop_reconfig == 1)
- stream_info->current_framedrop_period = 1;
/*
* re-configure the period pattern, only if it's not already
* set to what we want
@@ -3624,9 +3621,10 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
(stream_info->undelivered_request_cnt <=
MAX_BUFFERS_IN_HW)
) {
- pr_debug("%s:%d invalid time to request frame %d\n",
+ pr_debug("%s:%d invalid time to request frame %d try drop_reconfig\n",
__func__, __LINE__, frame_id);
vfe_dev->isp_page->drop_reconfig = 1;
+ return 0;
} else if ((vfe_dev->axi_data.src_info[frame_src].active) &&
((frame_id ==
vfe_dev->axi_data.src_info[frame_src].frame_id) ||
@@ -3634,10 +3632,11 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
(stream_info->undelivered_request_cnt <=
MAX_BUFFERS_IN_HW)) {
vfe_dev->isp_page->drop_reconfig = 1;
- pr_debug("%s: vfe_%d request_frame %d cur frame id %d pix %d\n",
+ pr_debug("%s: vfe_%d request_frame %d cur frame id %d pix %d try drop_reconfig\n",
__func__, vfe_dev->pdev->id, frame_id,
vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id,
vfe_dev->axi_data.src_info[VFE_PIX_0].active);
+ return 0;
} else if ((vfe_dev->axi_data.src_info[frame_src].active && (frame_id !=
vfe_dev->axi_data.src_info[frame_src].frame_id + vfe_dev->
axi_data.src_info[frame_src].sof_counter_step)) ||
@@ -3658,19 +3657,18 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
if ((frame_src == VFE_PIX_0) && !stream_info->undelivered_request_cnt &&
MSM_VFE_STREAM_STOP_PERIOD !=
stream_info->activated_framedrop_period) {
+ /* wm is reloaded if undelivered_request_cnt is zero.
+ * As per the hw behavior wm should be disabled or skip writing
+ * before reload happens other wise wm could start writing from
+ * middle of the frame and could result in image corruption.
+ * instead of dropping frame in this error scenario use
+ * drop_reconfig flag to process the request in next sof.
+ */
pr_debug("%s:%d vfe %d frame_id %d prev_pattern %x stream_id %x\n",
__func__, __LINE__, vfe_dev->pdev->id, frame_id,
stream_info->activated_framedrop_period,
stream_info->stream_id);
-
- rc = msm_isp_return_empty_buffer(vfe_dev, stream_info,
- user_stream_id, frame_id, buf_index, frame_src);
- if (rc < 0)
- pr_err("%s:%d failed: return_empty_buffer src %d\n",
- __func__, __LINE__, frame_src);
- stream_info->current_framedrop_period =
- MSM_VFE_STREAM_STOP_PERIOD;
- msm_isp_cfg_framedrop_reg(stream_info);
+ vfe_dev->isp_page->drop_reconfig = 1;
return 0;
}