Lines Matching refs:chan
85 /* Add descriptors into per chan software queue - submit_q */
94 re_chan = container_of(tx->chan, struct fsl_re_chan, chan);
104 /* Copy descriptor from per chan software queue into hardware job ring */
105 static void fsl_re_issue_pending(struct dma_chan *chan)
112 re_chan = container_of(chan, struct fsl_re_chan, chan);
154 fsl_re_issue_pending(&re_chan->chan);
219 dev_err(re_chan->dev, "chan error irqstate: %x, status: %x\n",
231 static enum dma_status fsl_re_tx_status(struct dma_chan *chan,
235 return dma_cookie_status(chan, cookie, txstate);
255 dma_async_tx_descriptor_init(&desc->async_tx, &re_chan->chan);
315 struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
328 re_chan = container_of(chan, struct fsl_re_chan, chan);
390 struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
394 return fsl_re_prep_dma_genq(chan, dest, src, src_cnt, NULL, len, flags);
402 struct dma_chan *chan, dma_addr_t *dest, dma_addr_t *src,
415 re_chan = container_of(chan, struct fsl_re_chan, chan);
436 tx = fsl_re_prep_dma_genq(chan, dest[1], dma_src, 2, coef, len,
453 return fsl_re_prep_dma_genq(chan, dest[1], src, src_cnt,
525 struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
535 re_chan = container_of(chan, struct fsl_re_chan, chan);
571 static int fsl_re_alloc_chan_resources(struct dma_chan *chan)
579 re_chan = container_of(chan, struct fsl_re_chan, chan);
601 static void fsl_re_free_chan_resources(struct dma_chan *chan)
606 re_chan = container_of(chan, struct fsl_re_chan, chan);
619 dev_err(re_chan->dev, "chan resource cannot be cleaned!\n");
627 struct fsl_re_chan *chan;
638 chan = devm_kzalloc(dev, sizeof(*chan), GFP_KERNEL);
639 if (!chan)
642 /* create platform device for chan node */
658 chan->jrregs = (struct fsl_re_chan_cfg *)((u8 *)re_priv->re_regs +
662 chan->irq = irq_of_parse_and_map(np, 0);
663 if (!chan->irq) {
669 snprintf(chan->name, sizeof(chan->name), "re_jr%02d", q);
672 tasklet_setup(&chan->irqtask, fsl_re_dequeue);
674 ret = request_irq(chan->irq, fsl_re_isr, 0, chan->name, chandev);
681 re_priv->re_jrs[q] = chan;
682 chan->chan.device = dma_dev;
683 chan->chan.private = chan;
684 chan->dev = chandev;
685 chan->re_dev = re_priv;
687 spin_lock_init(&chan->desc_lock);
688 INIT_LIST_HEAD(&chan->ack_q);
689 INIT_LIST_HEAD(&chan->active_q);
690 INIT_LIST_HEAD(&chan->submit_q);
691 INIT_LIST_HEAD(&chan->free_q);
693 chan->inb_ring_virt_addr = dma_pool_alloc(chan->re_dev->hw_desc_pool,
694 GFP_KERNEL, &chan->inb_phys_addr);
695 if (!chan->inb_ring_virt_addr) {
701 chan->oub_ring_virt_addr = dma_pool_alloc(chan->re_dev->hw_desc_pool,
702 GFP_KERNEL, &chan->oub_phys_addr);
703 if (!chan->oub_ring_virt_addr) {
710 out_be32(&chan->jrregs->inbring_base_h,
711 chan->inb_phys_addr & FSL_RE_ADDR_BIT_MASK);
712 out_be32(&chan->jrregs->oubring_base_h,
713 chan->oub_phys_addr & FSL_RE_ADDR_BIT_MASK);
714 out_be32(&chan->jrregs->inbring_base_l,
715 chan->inb_phys_addr >> FSL_RE_ADDR_BIT_SHIFT);
716 out_be32(&chan->jrregs->oubring_base_l,
717 chan->oub_phys_addr >> FSL_RE_ADDR_BIT_SHIFT);
718 out_be32(&chan->jrregs->inbring_size,
720 out_be32(&chan->jrregs->oubring_size,
724 status = in_be32(&chan->jrregs->jr_config_1) & FSL_RE_REG_LIODN_MASK;
727 out_be32(&chan->jrregs->jr_config_1,
730 dev_set_drvdata(chandev, chan);
733 out_be32(&chan->jrregs->jr_command, FSL_RE_ENABLE);
738 dma_pool_free(chan->re_dev->hw_desc_pool, chan->inb_ring_virt_addr,
739 chan->inb_phys_addr);
848 static void fsl_re_remove_chan(struct fsl_re_chan *chan)
850 tasklet_kill(&chan->irqtask);
852 dma_pool_free(chan->re_dev->hw_desc_pool, chan->inb_ring_virt_addr,
853 chan->inb_phys_addr);
855 dma_pool_free(chan->re_dev->hw_desc_pool, chan->oub_ring_virt_addr,
856 chan->oub_phys_addr);
868 /* Cleanup chan related memory areas */