浏览代码

video: driver: alter stage, pipe setting sequence to avoid vcodec hung

Currently stage and pipe is configured from output port start/resume
sequence. During VSP processing FW has no clue about stage, so default
it picked 2 stage. Later host sets 1(due to < 720p) stage at output
port. VSP is already started operating on input frames. So this
mismatch in stage settings was leading to vcodec HW hung issues.

Setting STAGE, PIPE settings at input port start/resume to avoid
above mentioned issues.

Change-Id: I7febe46d45c8e30a29b58d725d5298220fdbd8b2
Signed-off-by: Govindaraj Rajagopal <[email protected]>
Govindaraj Rajagopal 3 年之前
父节点
当前提交
d11e238157
共有 1 个文件被更改,包括 16 次插入16 次删除
  1. 16 16
      driver/vidc/src/msm_vdec.c

+ 16 - 16
driver/vidc/src/msm_vdec.c

@@ -741,6 +741,14 @@ static int msm_vdec_set_input_properties(struct msm_vidc_inst *inst)
 		return -EINVAL;
 	}
 
+	rc = msm_vidc_set_stage(inst, STAGE);
+	if (rc)
+		return rc;
+
+	rc = msm_vidc_set_pipe(inst, PIPE);
+	if (rc)
+		return rc;
+
 	rc = msm_vdec_set_output_order(inst, INPUT_PORT);
 	if (rc)
 		return rc;
@@ -781,14 +789,6 @@ static int msm_vdec_set_output_properties(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 
-	rc = msm_vidc_set_stage(inst, STAGE);
-	if (rc)
-		return rc;
-
-	rc = msm_vidc_set_pipe(inst, PIPE);
-	if (rc)
-		return rc;
-
 	rc = msm_vdec_set_linear_stride_scanline(inst);
 	if (rc)
 		return rc;
@@ -1371,6 +1371,14 @@ int msm_vdec_input_port_settings_change(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 
+	rc = msm_vidc_set_stage(inst, STAGE);
+	if (rc)
+		return rc;
+
+	rc = msm_vidc_set_pipe(inst, PIPE);
+	if (rc)
+		return rc;
+
 	rc = msm_vdec_session_resume(inst, INPUT_PORT);
 	if (rc)
 		return rc;
@@ -2122,14 +2130,6 @@ int msm_vdec_process_cmd(struct msm_vidc_inst *inst, u32 cmd)
 		/* print final buffer counts & size details */
 		msm_vidc_print_buffer_info(inst);
 
-		rc = msm_vidc_set_stage(inst, STAGE);
-		if (rc)
-			return rc;
-
-		rc = msm_vidc_set_pipe(inst, PIPE);
-		if (rc)
-			return rc;
-
 		rc = msm_vidc_set_seq_change_at_sync_frame(inst);
 		if (rc)
 			return rc;