Lines Matching defs:cvc
265 static void mtk_cqdma_issue_vchan_pending(struct mtk_cqdma_vchan *cvc)
268 struct mtk_cqdma_pchan *pc = cvc->pc;
272 lockdep_assert_held(&cvc->vc.lock);
275 list_for_each_entry_safe(vd, vd2, &cvc->vc.desc_issued, node) {
298 static bool mtk_cqdma_is_vchan_active(struct mtk_cqdma_vchan *cvc)
302 list_for_each_entry(cvd, &cvc->pc->queue, node)
303 if (cvc == to_cqdma_vchan(cvd->ch))
315 struct mtk_cqdma_vchan *cvc;
324 cvc = to_cqdma_vchan(cvd->ch);
333 spin_lock(&cvc->vc.lock);
341 if (cvc->issue_synchronize && !mtk_cqdma_is_vchan_active(cvc)) {
342 complete(&cvc->issue_completion);
343 cvc->issue_synchronize = false;
347 spin_unlock(&cvc->vc.lock);
421 struct mtk_cqdma_vchan *cvc = to_cqdma_vchan(c);
425 spin_lock_irqsave(&cvc->pc->lock, flags);
426 list_for_each_entry(vd, &cvc->pc->queue, node)
428 spin_unlock_irqrestore(&cvc->pc->lock, flags);
431 spin_unlock_irqrestore(&cvc->pc->lock, flags);
433 list_for_each_entry(vd, &cvc->vc.desc_issued, node)
444 struct mtk_cqdma_vchan *cvc = to_cqdma_vchan(c);
455 spin_lock_irqsave(&cvc->vc.lock, flags);
457 spin_unlock_irqrestore(&cvc->vc.lock, flags);
471 struct mtk_cqdma_vchan *cvc = to_cqdma_vchan(c);
476 spin_lock_irqsave(&cvc->pc->lock, pc_flags);
477 spin_lock_irqsave(&cvc->vc.lock, vc_flags);
479 if (vchan_issue_pending(&cvc->vc))
480 mtk_cqdma_issue_vchan_pending(cvc);
482 spin_unlock_irqrestore(&cvc->vc.lock, vc_flags);
483 spin_unlock_irqrestore(&cvc->pc->lock, pc_flags);
572 struct mtk_cqdma_vchan *cvc = to_cqdma_vchan(c);
578 spin_lock_irqsave(&cvc->pc->lock, pc_flags);
579 spin_lock_irqsave(&cvc->vc.lock, vc_flags);
582 if (mtk_cqdma_is_vchan_active(cvc)) {
583 cvc->issue_synchronize = true;
587 spin_unlock_irqrestore(&cvc->vc.lock, vc_flags);
588 spin_unlock_irqrestore(&cvc->pc->lock, pc_flags);
592 wait_for_completion(&cvc->issue_completion);
595 vchan_synchronize(&cvc->vc);
597 WARN_ONCE(!list_empty(&cvc->vc.desc_completed),
659 struct mtk_cqdma_vchan *cvc = to_cqdma_vchan(c);
665 spin_lock_irqsave(&cvc->pc->lock, flags);
668 if (refcount_dec_and_test(&cvc->pc->refcnt)) {
670 mtk_dma_set(cvc->pc, MTK_CQDMA_FLUSH, MTK_CQDMA_FLUSH_BIT);
673 if (mtk_cqdma_poll_engine_done(cvc->pc, true) < 0)
677 mtk_dma_clr(cvc->pc, MTK_CQDMA_FLUSH, MTK_CQDMA_FLUSH_BIT);
678 mtk_dma_clr(cvc->pc, MTK_CQDMA_INT_FLAG,
682 mtk_dma_clr(cvc->pc, MTK_CQDMA_INT_EN, MTK_CQDMA_INT_EN_BIT);
685 spin_unlock_irqrestore(&cvc->pc->lock, flags);