msm: camera: reqmgr: reset the slot on buf_done

Reset the slot with the valid request on receiving
the buf_done which is reported on next EPOCH.
In case of back to back irqs slot is marked as skip idx
it will apply the request and try to reset a slot based
on MAX_PD + 1 calculation which might have the request
for which we have got a bubble. To make sure this does not
happen, reset a slot only on the buf_done for valid request.

If STOP ioctl is called from UMD for ISP, it will flush all
the lists. But this is not notified to CRM which might have
a stale entry of the half applied request, so on STOP ioctl
clear all the slots.

In case of SAT mode if one of the link has generated bubble,
while the sync_link has the sync_request slot reset sync_link
will not let the link recover of the bubble. To make sure the
recovery sync_mode is set to 0 for two consecutive slots of
the link.

CRs-Fixed: 2551701
Change-Id: If4b6f8a4a831ffddcef2cae6292d066778c18b04
Signed-off-by: Tejas Prajapati <tpraja@codeaurora.org>
This commit is contained in:
Tejas Prajapati
2019-10-25 15:36:03 +05:30
committed by Gerrit - the friendly Code Review server
parent bf16c8a8e5
commit 96390653c5
5 changed files with 179 additions and 5 deletions

View File

@@ -150,6 +150,18 @@ struct cam_isp_context_state_monitor {
};
/**
* struct cam_isp_context_req_id_info - ISP context request id
* information for bufdone.
*
*@last_bufdone_req_id: Last bufdone request id
*
*/
struct cam_isp_context_req_id_info {
int64_t last_bufdone_req_id;
};
/**
*
* struct cam_isp_context - ISP context object
*
* @base: Common context object pointer
@@ -171,6 +183,7 @@ struct cam_isp_context_state_monitor {
* will invoke CRM cb at those event.
* @last_applied_req_id: Last applied request id
* @state_monitor_head: Write index to the state monitoring array
* @req_info Request id information about last buf done
* @cam_isp_ctx_state_monitor: State monitoring array
* @rdi_only_context: Get context type information.
* true, if context is rdi only context
@@ -204,6 +217,7 @@ struct cam_isp_context {
atomic64_t state_monitor_head;
struct cam_isp_context_state_monitor cam_isp_ctx_state_monitor[
CAM_ISP_CTX_STATE_MONITOR_MAX_ENTRIES];
struct cam_isp_context_req_id_info req_info;
bool rdi_only_context;
bool hw_acquired;
bool init_received;