Skip to content

Commit

Permalink
media: amphion: sync buffer status with firmware during abort
Browse files Browse the repository at this point in the history
1. prevent to allocate buffer to firmware during abort
2. release buffer when clear the slots

Fixes: 6de8d62 ("media: amphion: add v4l2 m2m vpu decoder stateful driver")
Signed-off-by: Ming Qian <[email protected]>
  • Loading branch information
mingqian-0 committed Jul 14, 2022
1 parent b745a51 commit 2a6c029
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions drivers/media/platform/amphion/vdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ struct vdec_t {
bool is_source_changed;
u32 source_change;
u32 drain;
bool aborting;
};

static const struct vpu_format vdec_formats[] = {
Expand Down Expand Up @@ -948,6 +949,9 @@ static int vdec_response_frame(struct vpu_inst *inst, struct vb2_v4l2_buffer *vb
if (inst->state != VPU_CODEC_STATE_ACTIVE)
return -EINVAL;

if (vdec->aborting)
return -EINVAL;

if (!vdec->req_frame_count)
return -EINVAL;

Expand Down Expand Up @@ -1057,6 +1061,8 @@ static void vdec_clear_slots(struct vpu_inst *inst)
vpu_buf = vdec->slots[i];
vbuf = &vpu_buf->m2m_buf.vb;

vpu_trace(inst->dev, "clear slot %d\n", i);
vdec_response_fs_release(inst, i, vpu_buf->tag);
vdec_recycle_buffer(inst, vbuf);
vdec->slots[i]->state = VPU_BUF_STATE_IDLE;
vdec->slots[i] = NULL;
Expand Down Expand Up @@ -1318,6 +1324,8 @@ static void vdec_abort(struct vpu_inst *inst)
int ret;

vpu_trace(inst->dev, "[%d] state = %d\n", inst->id, inst->state);

vdec->aborting = true;
vpu_iface_add_scode(inst, SCODE_PADDING_ABORT);
vdec->params.end_flag = 1;
vpu_iface_set_decode_params(inst, &vdec->params, 1);
Expand All @@ -1341,6 +1349,7 @@ static void vdec_abort(struct vpu_inst *inst)
vdec->decoded_frame_count = 0;
vdec->display_frame_count = 0;
vdec->sequence = 0;
vdec->aborting = false;
}

static void vdec_stop(struct vpu_inst *inst, bool free)
Expand Down

0 comments on commit 2a6c029

Please sign in to comment.