Merge "msm: camera: reqmgr: Mask re-apply for SHDR usecase" into camera-kernel.lnx.4.0

This commit is contained in:
Camera Software Integration 2021-03-11 01:53:58 -08:00 • committed by Gerrit - the friendly Code Review server
commit 1be56029ed
2 changed files with 24 additions and 11 deletions

View file

@ -3069,6 +3069,17 @@ static int __cam_isp_ctx_apply_req_in_activated_state(
struct cam_isp_context *ctx_isp = NULL;
struct cam_hw_config_args cfg = {0};
ctx_isp = (struct cam_isp_context *) ctx->ctx_priv;
if (apply->re_apply)
if (apply->request_id <= ctx_isp->last_applied_req_id) {
CAM_INFO_RATE_LIMIT(CAM_ISP,
"ctx_id:%d Trying to reapply the same request %llu again",
ctx->ctx_id,
apply->request_id);
return 0;
}
if (list_empty(&ctx->pending_req_list)) {
CAM_ERR_RATE_LIMIT(CAM_ISP,
"ctx_id:%d No available request for Apply id %lld",
@ -3084,8 +3095,6 @@ static int __cam_isp_ctx_apply_req_in_activated_state(
* The maximum number of request allowed to be outstanding is 2.
*
*/
ctx_isp = (struct cam_isp_context *) ctx->ctx_priv;
if (atomic_read(&ctx_isp->process_bubble)) {
CAM_INFO_RATE_LIMIT(CAM_ISP,
"ctx_id:%d Processing bubble cannot apply Request Id %llu",
@ -3095,15 +3104,6 @@ static int __cam_isp_ctx_apply_req_in_activated_state(
goto end;
}
if (apply->re_apply)
if (apply->request_id <= ctx_isp->last_applied_req_id) {
CAM_INFO_RATE_LIMIT(CAM_ISP,
"ctx_id:%d Trying to reapply the same request %llu again",
ctx->ctx_id,
apply->request_id);
return 0;
}
spin_lock_bh(&ctx->lock);
req = list_first_entry(&ctx->pending_req_list, struct cam_ctx_request,
list);

View file

@ -929,6 +929,19 @@ static int __cam_req_mgr_send_req(struct cam_req_mgr_core_link *link,
apply_req.report_if_bubble =
in_q->slot[idx].recover;
/*
* If it is dual trigger usecase, need to tell
* devices that the req is re-applied, then the
* devices need to skip applying if the req has
* been handled.
* e.x. ISP device
*/
if (link->retry_cnt > 0) {
if (!apply_req.report_if_bubble &&
link->dual_trigger)
apply_req.re_apply = true;
}
if ((slot->ops.dev_hdl == dev->dev_hdl) &&
(slot->ops.is_applied)) {
slot->ops.is_applied = false;