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 <grajagop@codeaurora.org>
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user