Lines Matching refs:sdev

188 static inline void sun6i_dma_dump_com_regs(struct sun6i_dma_dev *sdev)  in sun6i_dma_dump_com_regs()  argument
190 dev_dbg(sdev->slave.dev, "Common register:\n" in sun6i_dma_dump_com_regs()
196 DMA_IRQ_EN(0), readl(sdev->base + DMA_IRQ_EN(0)), in sun6i_dma_dump_com_regs()
197 DMA_IRQ_EN(1), readl(sdev->base + DMA_IRQ_EN(1)), in sun6i_dma_dump_com_regs()
198 DMA_IRQ_STAT(0), readl(sdev->base + DMA_IRQ_STAT(0)), in sun6i_dma_dump_com_regs()
199 DMA_IRQ_STAT(1), readl(sdev->base + DMA_IRQ_STAT(1)), in sun6i_dma_dump_com_regs()
200 DMA_STAT, readl(sdev->base + DMA_STAT)); in sun6i_dma_dump_com_regs()
203 static inline void sun6i_dma_dump_chan_regs(struct sun6i_dma_dev *sdev, in sun6i_dma_dump_chan_regs() argument
208 dev_dbg(sdev->slave.dev, "Chan %d reg: %pa\n" in sun6i_dma_dump_chan_regs()
335 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vd->tx.chan->device); in sun6i_dma_free_desc() local
349 dma_pool_free(sdev->pool, v_lli, p_lli); in sun6i_dma_free_desc()
360 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vchan->vc.chan.device); in sun6i_dma_start_desc() local
384 irq_val = readl(sdev->base + DMA_IRQ_EN(irq_offset)); in sun6i_dma_start_desc()
386 writel(irq_val, sdev->base + DMA_IRQ_EN(irq_offset)); in sun6i_dma_start_desc()
391 sun6i_dma_dump_com_regs(sdev); in sun6i_dma_start_desc()
392 sun6i_dma_dump_chan_regs(sdev, pchan); in sun6i_dma_start_desc()
399 struct sun6i_dma_dev *sdev = (struct sun6i_dma_dev *)data; in sun6i_dma_tasklet() local
400 const struct sun6i_dma_config *cfg = sdev->cfg; in sun6i_dma_tasklet()
406 list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) { in sun6i_dma_tasklet()
416 dev_dbg(sdev->slave.dev, "pchan %u: free\n", in sun6i_dma_tasklet()
427 spin_lock_irq(&sdev->lock); in sun6i_dma_tasklet()
429 pchan = &sdev->pchans[pchan_idx]; in sun6i_dma_tasklet()
431 if (pchan->vchan || list_empty(&sdev->pending)) in sun6i_dma_tasklet()
434 vchan = list_first_entry(&sdev->pending, in sun6i_dma_tasklet()
444 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n", in sun6i_dma_tasklet()
447 spin_unlock_irq(&sdev->lock); in sun6i_dma_tasklet()
453 pchan = sdev->pchans + pchan_idx; in sun6i_dma_tasklet()
465 struct sun6i_dma_dev *sdev = dev_id; in sun6i_dma_interrupt() local
471 for (i = 0; i < sdev->cfg->nr_max_channels / DMA_IRQ_CHAN_NR; i++) { in sun6i_dma_interrupt()
472 status = readl(sdev->base + DMA_IRQ_STAT(i)); in sun6i_dma_interrupt()
476 dev_dbg(sdev->slave.dev, "DMA irq status %s: 0x%x\n", in sun6i_dma_interrupt()
479 writel(status, sdev->base + DMA_IRQ_STAT(i)); in sun6i_dma_interrupt()
483 pchan = sdev->pchans + j; in sun6i_dma_interrupt()
497 if (!atomic_read(&sdev->tasklet_shutdown)) in sun6i_dma_interrupt()
498 tasklet_schedule(&sdev->task); in sun6i_dma_interrupt()
509 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_prep_dma_memcpy() local
527 v_lli = dma_pool_alloc(sdev->pool, GFP_NOWAIT, &p_lli); in sun6i_dma_prep_dma_memcpy()
529 dev_err(sdev->slave.dev, "Failed to alloc lli memory\n"); in sun6i_dma_prep_dma_memcpy()
565 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_prep_slave_sg() local
587 v_lli = dma_pool_alloc(sdev->pool, GFP_NOWAIT, &p_lli); in sun6i_dma_prep_slave_sg()
638 dma_pool_free(sdev->pool, v_lli, p_lli); in sun6i_dma_prep_slave_sg()
641 dma_pool_free(sdev->pool, prev, virt_to_phys(prev)); in sun6i_dma_prep_slave_sg()
658 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_pause() local
668 spin_lock(&sdev->lock); in sun6i_dma_pause()
670 spin_unlock(&sdev->lock); in sun6i_dma_pause()
678 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_resume() local
691 spin_lock(&sdev->lock); in sun6i_dma_resume()
692 list_add_tail(&vchan->node, &sdev->pending); in sun6i_dma_resume()
693 spin_unlock(&sdev->lock); in sun6i_dma_resume()
703 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_terminate_all() local
709 spin_lock(&sdev->lock); in sun6i_dma_terminate_all()
711 spin_unlock(&sdev->lock); in sun6i_dma_terminate_all()
774 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_issue_pending() local
781 spin_lock(&sdev->lock); in sun6i_dma_issue_pending()
784 list_add_tail(&vchan->node, &sdev->pending); in sun6i_dma_issue_pending()
785 tasklet_schedule(&sdev->task); in sun6i_dma_issue_pending()
790 spin_unlock(&sdev->lock); in sun6i_dma_issue_pending()
801 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device); in sun6i_dma_free_chan_resources() local
805 spin_lock_irqsave(&sdev->lock, flags); in sun6i_dma_free_chan_resources()
807 spin_unlock_irqrestore(&sdev->lock, flags); in sun6i_dma_free_chan_resources()
815 struct sun6i_dma_dev *sdev = ofdma->of_dma_data; in sun6i_dma_of_xlate() local
820 if (port > sdev->cfg->nr_max_requests) in sun6i_dma_of_xlate()
823 chan = dma_get_any_slave_channel(&sdev->slave); in sun6i_dma_of_xlate()
833 static inline void sun6i_kill_tasklet(struct sun6i_dma_dev *sdev) in sun6i_kill_tasklet() argument
836 writel(0, sdev->base + DMA_IRQ_EN(0)); in sun6i_kill_tasklet()
837 writel(0, sdev->base + DMA_IRQ_EN(1)); in sun6i_kill_tasklet()
840 atomic_inc(&sdev->tasklet_shutdown); in sun6i_kill_tasklet()
843 devm_free_irq(sdev->slave.dev, sdev->irq, sdev); in sun6i_kill_tasklet()
846 tasklet_kill(&sdev->task); in sun6i_kill_tasklet()
849 static inline void sun6i_dma_free(struct sun6i_dma_dev *sdev) in sun6i_dma_free() argument
853 for (i = 0; i < sdev->cfg->nr_max_vchans; i++) { in sun6i_dma_free()
854 struct sun6i_vchan *vchan = &sdev->vchans[i]; in sun6i_dma_free()