Lines Matching refs:chan
166 struct hisi_dma_chan chan[];
322 return container_of(c, struct hisi_dma_chan, vc.chan);
420 static void hisi_dma_reset_or_disable_hw_chan(struct hisi_dma_chan *chan,
423 struct hisi_dma_dev *hdma_dev = chan->hdma_dev;
424 u32 index = chan->qp_num, tmp;
463 struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
464 struct hisi_dma_dev *hdma_dev = chan->hdma_dev;
466 hisi_dma_reset_or_disable_hw_chan(chan, false);
467 vchan_free_chan_resources(&chan->vc);
469 memset(chan->sq, 0, sizeof(struct hisi_dma_sqe) * hdma_dev->chan_depth);
470 memset(chan->cq, 0, sizeof(struct hisi_dma_cqe) * hdma_dev->chan_depth);
471 chan->sq_tail = 0;
472 chan->cq_head = 0;
473 chan->status = DISABLE;
485 struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
496 return vchan_tx_prep(&chan->vc, &desc->vd, flags);
506 static void hisi_dma_start_transfer(struct hisi_dma_chan *chan)
508 struct hisi_dma_sqe *sqe = chan->sq + chan->sq_tail;
509 struct hisi_dma_dev *hdma_dev = chan->hdma_dev;
513 vd = vchan_next_desc(&chan->vc);
515 chan->desc = NULL;
520 chan->desc = desc;
532 chan->sq_tail = (chan->sq_tail + 1) % hdma_dev->chan_depth;
536 chan->qp_num, chan->sq_tail);
541 struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
544 spin_lock_irqsave(&chan->vc.lock, flags);
546 if (vchan_issue_pending(&chan->vc) && !chan->desc)
547 hisi_dma_start_transfer(chan);
549 spin_unlock_irqrestore(&chan->vc.lock, flags);
554 struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
558 spin_lock_irqsave(&chan->vc.lock, flags);
560 hisi_dma_pause_dma(chan->hdma_dev, chan->qp_num, true);
561 if (chan->desc) {
562 vchan_terminate_vdesc(&chan->desc->vd);
563 chan->desc = NULL;
566 vchan_get_all_descriptors(&chan->vc, &head);
568 spin_unlock_irqrestore(&chan->vc.lock, flags);
570 vchan_dma_desc_free_list(&chan->vc, &head);
571 hisi_dma_pause_dma(chan->hdma_dev, chan->qp_num, false);
578 struct hisi_dma_chan *chan = to_hisi_dma_chan(c);
580 vchan_synchronize(&chan->vc);
588 struct hisi_dma_chan *chan;
592 chan = &hdma_dev->chan[i];
593 chan->sq = dmam_alloc_coherent(dev, sq_size, &chan->sq_dma,
595 if (!chan->sq)
598 chan->cq = dmam_alloc_coherent(dev, cq_size, &chan->cq_dma,
600 if (!chan->cq)
609 struct hisi_dma_chan *chan = &hdma_dev->chan[index];
617 lower_32_bits(chan->sq_dma));
619 upper_32_bits(chan->sq_dma));
621 lower_32_bits(chan->cq_dma));
623 upper_32_bits(chan->cq_dma));
701 hisi_dma_reset_or_disable_hw_chan(&hdma_dev->chan[qp_index], true);
709 hdma_dev->chan[i].qp_num = i;
710 hdma_dev->chan[i].hdma_dev = hdma_dev;
711 hdma_dev->chan[i].vc.desc_free = hisi_dma_desc_free;
712 vchan_init(&hdma_dev->chan[i].vc, &hdma_dev->dma_dev);
723 tasklet_kill(&hdma_dev->chan[i].vc.task);
729 struct hisi_dma_chan *chan = data;
730 struct hisi_dma_dev *hdma_dev = chan->hdma_dev;
735 spin_lock(&chan->vc.lock);
737 desc = chan->desc;
738 cqe = chan->cq + chan->cq_head;
741 chan->cq_head = (chan->cq_head + 1) % hdma_dev->chan_depth;
743 chan->qp_num, chan->cq_head);
746 hisi_dma_start_transfer(chan);
752 spin_unlock(&chan->vc.lock);
765 &hdma_dev->chan[i]);
983 hdma_dev = devm_kzalloc(dev, struct_size(hdma_dev, chan, chan_num),