Prechádzať zdrojové kódy

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 <[email protected]>
Pavan Kumar Chilamkurthi 5 rokov pred
rodič
commit
2c2fea11c5
1 zmenil súbory, kde vykonal 25 pridanie a 10 odobranie
  1. 25 10
      drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c

+ 25 - 10
drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c

@@ -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;
 	}