msm: camera: isp: Handle IRQ delays for offline streams

Update ISP offline state machine, to ensure any IRQ scheduling
issues would not lead to complete stalling of the stream.

CRs-Fixed: 3068998
Change-Id: I116019e4963f93c28bcfb1f09c5278f478961a5d
Signed-off-by: Karthik Anantha Ram <kartanan@codeaurora.org>
Esse commit está contido em:
Karthik Anantha Ram
2021-09-22 21:58:28 -07:00
commit de Depeng Shao
commit 40fc62f499

Ver arquivo

@@ -2237,18 +2237,31 @@ static int __cam_isp_ctx_offline_epoch_in_activated_state(
CAM_DBG(CAM_ISP, "SOF frame %lld ctx %u", ctx_isp->frame_id,
ctx->ctx_id);
list_for_each_entry_safe(req, req_temp, &ctx->active_req_list, list) {
if (req->request_id > ctx_isp->reported_req_id) {
request_id = req->request_id;
ctx_isp->reported_req_id = request_id;
break;
/*
* For offline it is not possible for epoch to be generated without
* RUP done. IRQ scheduling delays can possibly cause this.
*/
if (list_empty(&ctx->active_req_list)) {
CAM_WARN(CAM_ISP, "Active list empty on ctx: %u - EPOCH serviced before RUP",
ctx->ctx_id);
} else {
list_for_each_entry_safe(req, req_temp, &ctx->active_req_list, list) {
if (req->request_id > ctx_isp->reported_req_id) {
request_id = req->request_id;
ctx_isp->reported_req_id = request_id;
break;
}
}
}
__cam_isp_ctx_schedule_apply_req_offline(ctx_isp);
__cam_isp_ctx_send_sof_timestamp(ctx_isp, request_id,
CAM_REQ_MGR_SOF_EVENT_SUCCESS);
/*
* If no valid request, wait for RUP shutter posted after buf done
*/
if (request_id)
__cam_isp_ctx_send_sof_timestamp(ctx_isp, request_id,
CAM_REQ_MGR_SOF_EVENT_SUCCESS);
__cam_isp_ctx_update_state_monitor_array(ctx_isp,
CAM_ISP_STATE_CHANGE_TRIGGER_EPOCH,
@@ -3708,7 +3721,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_handle_error,
__cam_isp_ctx_sof_in_activated_state,
__cam_isp_ctx_reg_upd_in_applied_state,
NULL,
__cam_isp_ctx_offline_epoch_in_activated_state,
NULL,
__cam_isp_ctx_buf_done_in_applied,
},
@@ -3717,7 +3730,7 @@ static struct cam_isp_ctx_irq_ops
{
.irq_ops = {
__cam_isp_ctx_handle_error,
NULL,
__cam_isp_ctx_sof_in_activated_state,
NULL,
__cam_isp_ctx_offline_epoch_in_activated_state,
NULL,