OSDN Git Service

Revert "msm: camera_v2: reject the late request"
authorJulian Liu <wlootlxt123@gmail.com>
Wed, 18 Sep 2019 18:54:29 +0000 (02:54 +0800)
committerArian <arian.kulmer@web.de>
Tue, 19 Nov 2019 15:24:38 +0000 (16:24 +0100)
This reverts commit bc82952bb8012641c5e74a228ab697ff6eec38e4.

drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c

index 199a7c8..23fd0d4 100644 (file)
@@ -616,9 +616,12 @@ 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)
+       if (stream_info->undelivered_request_cnt > 0 &&
+               drop_reconfig != 1)
                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
@@ -3628,10 +3631,9 @@ 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 try drop_reconfig\n",
+               pr_debug("%s:%d invalid time to request frame %d\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) ||
@@ -3639,11 +3641,10 @@ 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 try drop_reconfig\n",
+               pr_debug("%s: vfe_%d request_frame %d cur frame id %d pix %d\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)) ||
@@ -3664,18 +3665,19 @@ 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);
-               vfe_dev->isp_page->drop_reconfig = 1;
+
+               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);
                return 0;
        }