mirror of
https://github.com/brain-hackers/linux-brain.git
synced 2024-06-09 23:36:23 +09:00
LF-561: [8QM_MEK/8QXP_MEK]mxc:vpu_malone:reinit completion before send
command we should reinit the completion before send command who may trigger the completion, otherwise it may be reinit after complete in certain timing, then led to timeout use private workqueue instead of public workqueue Signed-off-by: ming_qian <ming.qian@nxp.com> Acked-by: Shijie Qin <shijie.qin@nxp.com> (cherry picked from commit fc50fb22a8ee8ddf27885c63c49ea45b5b3ba9b3)
This commit is contained in:
parent
a5e697ea09
commit
0f549d8c4d
|
@ -3025,8 +3025,8 @@ static int send_abort_cmd(struct vpu_ctx *ctx)
|
|||
record_log_info(ctx, LOG_PADDING, 0, 0);
|
||||
if (size <= 0)
|
||||
vpu_err("%s(): failed to fill abort padding data\n", __func__);
|
||||
v4l2_vpu_send_cmd(ctx, ctx->str_index, VID_API_CMD_ABORT, 1, &size);
|
||||
reinit_completion(&ctx->completion);
|
||||
v4l2_vpu_send_cmd(ctx, ctx->str_index, VID_API_CMD_ABORT, 1, &size);
|
||||
if (!wait_for_completion_timeout(&ctx->completion, msecs_to_jiffies(1000))) {
|
||||
ctx->hang_status = true;
|
||||
vpu_err("the path id:%d firmware timeout after send VID_API_CMD_ABORT\n",
|
||||
|
@ -3048,8 +3048,8 @@ static int send_stop_cmd(struct vpu_ctx *ctx)
|
|||
|
||||
ctx->wait_rst_done = true;
|
||||
vpu_dbg(LVL_BIT_FLOW, "ctx[%d] send STOP CMD\n", ctx->str_index);
|
||||
v4l2_vpu_send_cmd(ctx, ctx->str_index, VID_API_CMD_STOP, 0, NULL);
|
||||
reinit_completion(&ctx->stop_cmp);
|
||||
v4l2_vpu_send_cmd(ctx, ctx->str_index, VID_API_CMD_STOP, 0, NULL);
|
||||
if (!wait_for_completion_timeout(&ctx->stop_cmp, msecs_to_jiffies(1000))) {
|
||||
vpu_dec_clear_pending_cmd(ctx);
|
||||
ctx->hang_status = true;
|
||||
|
@ -6131,9 +6131,9 @@ static int swreset_vpu_firmware(struct vpu_dev *dev, u_int32 idx)
|
|||
dev->firmware_started = false;
|
||||
kfifo_reset(&dev->mu_msg_fifo);
|
||||
|
||||
reinit_completion(&dev->start_cmp);
|
||||
do_send_cmd_to_firmware(ctx, 0, VID_API_CMD_FIRM_RESET, 0, NULL);
|
||||
|
||||
reinit_completion(&dev->start_cmp);
|
||||
if (!wait_for_completion_timeout(&dev->start_cmp, msecs_to_jiffies(10000))) {
|
||||
vpu_err("error: %s() fail\n", __func__);
|
||||
return -1;
|
||||
|
@ -6499,7 +6499,7 @@ static void vpu_dec_resume_work(struct vpu_dev *vpudev)
|
|||
int i;
|
||||
|
||||
mutex_lock(&vpudev->dev_mutex);
|
||||
schedule_work(&vpudev->msg_work);
|
||||
queue_work(vpudev->workqueue, &vpudev->msg_work);
|
||||
for (i = 0; i < VPU_MAX_NUM_STREAMS; i++) {
|
||||
struct vpu_ctx *ctx = vpudev->ctx[i];
|
||||
|
||||
|
@ -6520,8 +6520,8 @@ static int __maybe_unused vpu_suspend(struct device *dev)
|
|||
if (vpudev->hang_mask != vpudev->instance_mask) {
|
||||
|
||||
/*if there is an available device, send snapshot command to firmware*/
|
||||
v4l2_vpu_send_snapshot(vpudev);
|
||||
reinit_completion(&vpudev->snap_done_cmp);
|
||||
v4l2_vpu_send_snapshot(vpudev);
|
||||
if (!wait_for_completion_timeout(&vpudev->snap_done_cmp, msecs_to_jiffies(1000))) {
|
||||
vpu_err("error: wait for vpu decoder snapdone event timeout!\n");
|
||||
ret = -1;
|
||||
|
@ -6560,9 +6560,9 @@ static int resume_from_snapshot(struct vpu_dev *vpudev)
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
reinit_completion(&vpudev->start_cmp);
|
||||
enable_csr_reg(vpudev);
|
||||
/*wait for firmware resotre done*/
|
||||
reinit_completion(&vpudev->start_cmp);
|
||||
if (!wait_for_completion_timeout(&vpudev->start_cmp, msecs_to_jiffies(1000))) {
|
||||
vpu_err("error: wait for vpu decoder resume done timeout!\n");
|
||||
ret = -1;
|
||||
|
|
|
@ -31,7 +31,7 @@ static void vpu_mu_inq_msg(struct vpu_dev *dev, void *msg)
|
|||
return;
|
||||
}
|
||||
|
||||
schedule_work(&dev->msg_work);
|
||||
queue_work(dev->workqueue, &dev->msg_work);
|
||||
}
|
||||
|
||||
static irqreturn_t vpu_mu_irq_handle(int irq, void *This)
|
||||
|
|
Loading…
Reference in New Issue
Block a user