Lines Matching defs:chan
44 return container_of(dchan, struct sf_pdma_chan, vchan.chan);
52 static struct sf_pdma_desc *sf_pdma_alloc_desc(struct sf_pdma_chan *chan)
60 desc->chan = chan;
74 static void sf_pdma_disclaim_chan(struct sf_pdma_chan *chan)
76 struct pdma_regs *regs = &chan->regs;
85 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
89 if (chan && (!len || !dest || !src)) {
90 dev_err(chan->pdma->dma_dev.dev,
95 desc = sf_pdma_alloc_desc(chan);
101 desc->async_tx = vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
103 spin_lock_irqsave(&chan->vchan.lock, iflags);
105 spin_unlock_irqrestore(&chan->vchan.lock, iflags);
113 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
115 memcpy(&chan->cfg, cfg, sizeof(*cfg));
122 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
123 struct pdma_regs *regs = &chan->regs;
131 static void sf_pdma_disable_request(struct sf_pdma_chan *chan)
133 struct pdma_regs *regs = &chan->regs;
140 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
144 spin_lock_irqsave(&chan->vchan.lock, flags);
145 sf_pdma_disable_request(chan);
146 kfree(chan->desc);
147 chan->desc = NULL;
148 vchan_get_all_descriptors(&chan->vchan, &head);
149 sf_pdma_disclaim_chan(chan);
150 spin_unlock_irqrestore(&chan->vchan.lock, flags);
151 vchan_dma_desc_free_list(&chan->vchan, &head);
154 static size_t sf_pdma_desc_residue(struct sf_pdma_chan *chan,
158 struct pdma_regs *regs = &chan->regs;
164 spin_lock_irqsave(&chan->vchan.lock, flags);
166 list_for_each_entry(vd, &chan->vchan.desc_submitted, node)
173 if (cookie == tx->chan->completed_cookie)
179 vd = vchan_find_desc(&chan->vchan, cookie);
188 spin_unlock_irqrestore(&chan->vchan.lock, flags);
197 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
203 dma_set_residue(txstate, sf_pdma_desc_residue(chan, cookie));
210 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
214 spin_lock_irqsave(&chan->vchan.lock, flags);
215 sf_pdma_disable_request(chan);
216 kfree(chan->desc);
217 chan->desc = NULL;
218 chan->xfer_err = false;
219 vchan_get_all_descriptors(&chan->vchan, &head);
220 spin_unlock_irqrestore(&chan->vchan.lock, flags);
221 vchan_dma_desc_free_list(&chan->vchan, &head);
226 static void sf_pdma_enable_request(struct sf_pdma_chan *chan)
228 struct pdma_regs *regs = &chan->regs;
239 static struct sf_pdma_desc *sf_pdma_get_first_pending_desc(struct sf_pdma_chan *chan)
241 struct virt_dma_chan *vchan = &chan->vchan;
252 static void sf_pdma_xfer_desc(struct sf_pdma_chan *chan)
254 struct sf_pdma_desc *desc = chan->desc;
255 struct pdma_regs *regs = &chan->regs;
258 dev_err(chan->pdma->dma_dev.dev, "NULL desc.\n");
267 chan->desc = desc;
268 chan->status = DMA_IN_PROGRESS;
269 sf_pdma_enable_request(chan);
274 struct sf_pdma_chan *chan = to_sf_pdma_chan(dchan);
277 spin_lock_irqsave(&chan->vchan.lock, flags);
279 if (!chan->desc && vchan_issue_pending(&chan->vchan)) {
281 chan->desc = sf_pdma_get_first_pending_desc(chan);
282 sf_pdma_xfer_desc(chan);
285 spin_unlock_irqrestore(&chan->vchan.lock, flags);
298 struct sf_pdma_chan *chan = from_tasklet(chan, t, done_tasklet);
301 spin_lock_irqsave(&chan->lock, flags);
302 if (chan->xfer_err) {
303 chan->retries = MAX_RETRY;
304 chan->status = DMA_COMPLETE;
305 chan->xfer_err = false;
307 spin_unlock_irqrestore(&chan->lock, flags);
309 spin_lock_irqsave(&chan->vchan.lock, flags);
310 list_del(&chan->desc->vdesc.node);
311 vchan_cookie_complete(&chan->desc->vdesc);
313 chan->desc = sf_pdma_get_first_pending_desc(chan);
314 if (chan->desc)
315 sf_pdma_xfer_desc(chan);
317 spin_unlock_irqrestore(&chan->vchan.lock, flags);
322 struct sf_pdma_chan *chan = from_tasklet(chan, t, err_tasklet);
323 struct sf_pdma_desc *desc = chan->desc;
326 spin_lock_irqsave(&chan->lock, flags);
327 if (chan->retries <= 0) {
329 spin_unlock_irqrestore(&chan->lock, flags);
333 chan->retries--;
334 chan->xfer_err = true;
335 chan->status = DMA_ERROR;
337 sf_pdma_enable_request(chan);
338 spin_unlock_irqrestore(&chan->lock, flags);
344 struct sf_pdma_chan *chan = dev_id;
345 struct pdma_regs *regs = &chan->regs;
349 spin_lock_irqsave(&chan->vchan.lock, flags);
354 tasklet_hi_schedule(&chan->done_tasklet);
357 struct sf_pdma_desc *desc = chan->desc;
363 sf_pdma_xfer_desc(chan);
366 spin_unlock_irqrestore(&chan->vchan.lock, flags);
373 struct sf_pdma_chan *chan = dev_id;
374 struct pdma_regs *regs = &chan->regs;
377 spin_lock_irqsave(&chan->lock, flags);
379 spin_unlock_irqrestore(&chan->lock, flags);
381 tasklet_schedule(&chan->err_tasklet);
404 struct sf_pdma_chan *chan;
407 chan = &pdma->chans[i];
416 dev_name(&pdev->dev), (void *)chan);
422 chan->txirq = irq;
431 dev_name(&pdev->dev), (void *)chan);
437 chan->errirq = irq;
458 struct sf_pdma_chan *chan;
463 chan = &pdma->chans[i];
465 chan->regs.ctrl =
467 chan->regs.xfer_type =
469 chan->regs.xfer_size =
471 chan->regs.dst_addr =
473 chan->regs.src_addr =
475 chan->regs.act_type =
477 chan->regs.residue =
479 chan->regs.cur_dst_addr =
481 chan->regs.cur_src_addr =
484 chan->pdma = pdma;
485 chan->pm_state = RUNNING;
486 chan->slave_id = i;
487 chan->xfer_err = false;
488 spin_lock_init(&chan->lock);
490 chan->vchan.desc_free = sf_pdma_free_desc;
491 vchan_init(&chan->vchan, &pdma->dma_dev);
493 writel(PDMA_CLEAR_CTRL, chan->regs.ctrl);
495 tasklet_setup(&chan->done_tasklet, sf_pdma_donebh_tasklet);
496 tasklet_setup(&chan->err_tasklet, sf_pdma_errbh_tasklet);
503 struct sf_pdma_chan *chan;
514 len = sizeof(*pdma) + sizeof(*chan) * chans;
582 list_del(&ch->vchan.chan.device_node);