mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
msm: camera: isp: Reset overflow pending flag in start hw
While start hw, either a fresh start or resume after flush, reset the overflow pending flag as we reset the hw and start fresh with applying init packet. In case where overflow happening at the same time as halt immediately, we set overflow pending flag to true. Eventhough while halt immediate and resume scenario, we reset the hw, not resetting overflow pending flag causes not to apply any new packets while resume. CRs-Fixed: 2565049 Change-Id: Ia9c871402343306945fe1b8f8373659e52630fe2 Signed-off-by: Pavan Kumar Chilamkurthi <pchilamk@codeaurora.org>
This commit is contained in:
parent
09c9b6c054
commit
2c2fea11c5
1 changed files with 25 additions and 10 deletions
|
|
@ -3358,9 +3358,10 @@ static int cam_ife_mgr_config_hw(void *hw_mgr_priv,
|
|||
struct cam_ife_hw_mgr_ctx *ctx;
|
||||
struct cam_isp_prepare_hw_update_data *hw_update_data;
|
||||
|
||||
CAM_DBG(CAM_ISP, "Enter");
|
||||
if (!hw_mgr_priv || !config_hw_args) {
|
||||
CAM_ERR(CAM_ISP, "Invalid arguments");
|
||||
CAM_ERR(CAM_ISP,
|
||||
"Invalid arguments, hw_mgr_priv=%pK, config_hw_args=%pK",
|
||||
hw_mgr_priv, config_hw_args);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -3368,21 +3369,28 @@ static int cam_ife_mgr_config_hw(void *hw_mgr_priv,
|
|||
ctx = (struct cam_ife_hw_mgr_ctx *)cfg->ctxt_to_hw_map;
|
||||
if (!ctx) {
|
||||
CAM_ERR(CAM_ISP, "Invalid context is used");
|
||||
return -EPERM;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!ctx->ctx_in_use || !ctx->cdm_cmd) {
|
||||
CAM_ERR(CAM_ISP, "Invalid context parameters");
|
||||
CAM_ERR(CAM_ISP,
|
||||
"Invalid context parameters : ctx_in_use=%d, cdm_cmd=%pK",
|
||||
ctx->ctx_in_use, ctx->cdm_cmd);
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (atomic_read(&ctx->overflow_pending)) {
|
||||
CAM_DBG(CAM_ISP,
|
||||
"Ctx[%pK][%d] Overflow pending, cannot apply req %llu",
|
||||
ctx, ctx->ctx_index, cfg->request_id);
|
||||
return -EPERM;
|
||||
}
|
||||
if (atomic_read(&ctx->overflow_pending))
|
||||
return -EINVAL;
|
||||
|
||||
hw_update_data = (struct cam_isp_prepare_hw_update_data *) cfg->priv;
|
||||
hw_update_data->ife_mgr_ctx = ctx;
|
||||
|
||||
CAM_DBG(CAM_ISP, "Ctx[%pK][%d] : Applying Req %lld",
|
||||
ctx, ctx->ctx_index, cfg->request_id);
|
||||
CAM_DBG(CAM_ISP, "Ctx[%pK][%d] : Applying Req %lld, init_packet=%d",
|
||||
ctx, ctx->ctx_index, cfg->request_id, cfg->init_packet);
|
||||
|
||||
for (i = 0; i < CAM_IFE_HW_NUM_MAX; i++) {
|
||||
if (hw_update_data->bw_config_valid[i] == true) {
|
||||
|
|
@ -3454,7 +3462,9 @@ static int cam_ife_mgr_config_hw(void *hw_mgr_priv,
|
|||
atomic_set(&ctx->cdm_done, 0);
|
||||
rc = cam_cdm_submit_bls(ctx->cdm_handle, cdm_cmd);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "Failed to apply the configs");
|
||||
CAM_ERR(CAM_ISP,
|
||||
"Failed to apply the configs for req %llu, rc %d",
|
||||
cfg->request_id, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -3954,11 +3964,16 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args)
|
|||
}
|
||||
|
||||
start_only:
|
||||
|
||||
atomic_set(&ctx->overflow_pending, 0);
|
||||
|
||||
/* Apply initial configuration */
|
||||
CAM_DBG(CAM_ISP, "Config HW");
|
||||
rc = cam_ife_mgr_config_hw(hw_mgr_priv, &start_isp->hw_config);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "Config HW failed");
|
||||
CAM_ERR(CAM_ISP,
|
||||
"Config HW failed, start_only=%d, rc=%d",
|
||||
start_isp->start_only, rc);
|
||||
goto cdm_streamoff;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue