|
@@ -1304,6 +1304,7 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
|
|
|
struct vb2_v4l2_buffer *s_vb, *d_vb;
|
|
|
unsigned long flags;
|
|
|
u32 irqst0, irqst1;
|
|
|
+ bool list_complete = false;
|
|
|
|
|
|
irqst0 = read_reg(dev, VPE_INT0_STATUS0);
|
|
|
if (irqst0) {
|
|
@@ -1339,6 +1340,7 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
|
|
|
vpdma_clear_list_stat(ctx->dev->vpdma, 0, 0);
|
|
|
|
|
|
irqst0 &= ~(VPE_INT0_LIST0_COMPLETE);
|
|
|
+ list_complete = true;
|
|
|
}
|
|
|
|
|
|
if (irqst0 | irqst1) {
|
|
@@ -1346,6 +1348,13 @@ static irqreturn_t vpe_irq(int irq_vpe, void *data)
|
|
|
irqst0, irqst1);
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * Setup next operation only when list complete IRQ occurs
|
|
|
+ * otherwise, skip the following code
|
|
|
+ */
|
|
|
+ if (!list_complete)
|
|
|
+ goto handled;
|
|
|
+
|
|
|
disable_irqs(ctx);
|
|
|
|
|
|
vpdma_unmap_desc_buf(dev->vpdma, &ctx->desc_list.buf);
|