Lines Matching defs:sdev
236 static inline void sun6i_dma_dump_com_regs(struct sun6i_dma_dev *sdev)
238 dev_dbg(sdev->slave.dev, "Common register:\n"
244 DMA_IRQ_EN(0), readl(sdev->base + DMA_IRQ_EN(0)),
245 DMA_IRQ_EN(1), readl(sdev->base + DMA_IRQ_EN(1)),
246 DMA_IRQ_STAT(0), readl(sdev->base + DMA_IRQ_STAT(0)),
247 DMA_IRQ_STAT(1), readl(sdev->base + DMA_IRQ_STAT(1)),
248 DMA_STAT, readl(sdev->base + DMA_STAT));
251 static inline void sun6i_dma_dump_chan_regs(struct sun6i_dma_dev *sdev,
254 dev_dbg(sdev->slave.dev, "Chan %d reg:\n"
303 static void sun6i_enable_clock_autogate_a23(struct sun6i_dma_dev *sdev)
305 writel(SUN8I_DMA_GATE_ENABLE, sdev->base + SUN8I_DMA_GATE);
308 static void sun6i_enable_clock_autogate_h3(struct sun6i_dma_dev *sdev)
310 writel(SUNXI_H3_DMA_GATE_ENABLE, sdev->base + SUNXI_H3_DMA_GATE);
411 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vd->tx.chan->device);
425 dma_pool_free(sdev->pool, v_lli, p_lli);
436 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vchan->vc.chan.device);
462 irq_val = readl(sdev->base + DMA_IRQ_EN(irq_reg));
466 writel(irq_val, sdev->base + DMA_IRQ_EN(irq_reg));
471 sun6i_dma_dump_com_regs(sdev);
472 sun6i_dma_dump_chan_regs(sdev, pchan);
479 struct sun6i_dma_dev *sdev = from_tasklet(sdev, t, task);
485 list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) {
495 dev_dbg(sdev->slave.dev, "pchan %u: free\n",
506 spin_lock_irq(&sdev->lock);
507 for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) {
508 pchan = &sdev->pchans[pchan_idx];
510 if (pchan->vchan || list_empty(&sdev->pending))
513 vchan = list_first_entry(&sdev->pending,
523 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n",
526 spin_unlock_irq(&sdev->lock);
528 for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) {
532 pchan = sdev->pchans + pchan_idx;
544 struct sun6i_dma_dev *sdev = dev_id;
550 for (i = 0; i < sdev->num_pchans / DMA_IRQ_CHAN_NR; i++) {
551 status = readl(sdev->base + DMA_IRQ_STAT(i));
555 dev_dbg(sdev->slave.dev, "DMA irq status %s: 0x%x\n",
558 writel(status, sdev->base + DMA_IRQ_STAT(i));
561 pchan = sdev->pchans + j;
577 if (!atomic_read(&sdev->tasklet_shutdown))
578 tasklet_schedule(&sdev->task);
585 static int set_config(struct sun6i_dma_dev *sdev,
614 if (!(BIT(src_addr_width) & sdev->slave.src_addr_widths))
616 if (!(BIT(dst_addr_width) & sdev->slave.dst_addr_widths))
618 if (!(BIT(src_maxburst) & sdev->cfg->src_burst_lengths))
620 if (!(BIT(dst_maxburst) & sdev->cfg->dst_burst_lengths))
631 sdev->cfg->set_burst_length(p_cfg, src_burst, dst_burst);
636 static inline void sun6i_dma_set_addr(struct sun6i_dma_dev *sdev,
643 if (sdev->cfg->has_high_addr)
652 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
670 v_lli = dma_pool_alloc(sdev->pool, GFP_DMA32 | GFP_NOWAIT, &p_lli);
672 dev_err(sdev->slave.dev, "Failed to alloc lli memory\n");
678 sun6i_dma_set_addr(sdev, v_lli, src, dest);
685 sdev->cfg->set_burst_length(&v_lli->cfg, burst, burst);
686 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, DRQ_SDRAM);
687 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, LINEAR_MODE);
705 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
718 ret = set_config(sdev, sconfig, dir, &lli_cfg);
729 v_lli = dma_pool_alloc(sdev->pool, GFP_DMA32 | GFP_NOWAIT, &p_lli);
737 sun6i_dma_set_addr(sdev, v_lli,
741 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
742 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE);
751 sun6i_dma_set_addr(sdev, v_lli,
755 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
756 sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE);
778 dma_pool_free(sdev->pool, v_lli, p_lli);
791 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
801 ret = set_config(sdev, sconfig, dir, &lli_cfg);
812 v_lli = dma_pool_alloc(sdev->pool, GFP_DMA32 | GFP_NOWAIT, &p_lli);
814 dev_err(sdev->slave.dev, "Failed to alloc lli memory\n");
822 sun6i_dma_set_addr(sdev, v_lli,
826 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
827 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE);
829 sun6i_dma_set_addr(sdev, v_lli,
833 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
834 sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE);
849 dma_pool_free(sdev->pool, v_lli, p_lli);
866 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
876 spin_lock(&sdev->lock);
878 spin_unlock(&sdev->lock);
886 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
899 spin_lock(&sdev->lock);
900 list_add_tail(&vchan->node, &sdev->pending);
901 spin_unlock(&sdev->lock);
911 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
917 spin_lock(&sdev->lock);
919 spin_unlock(&sdev->lock);
992 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
999 spin_lock(&sdev->lock);
1002 list_add_tail(&vchan->node, &sdev->pending);
1003 tasklet_schedule(&sdev->task);
1008 spin_unlock(&sdev->lock);
1019 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
1023 spin_lock_irqsave(&sdev->lock, flags);
1025 spin_unlock_irqrestore(&sdev->lock, flags);
1033 struct sun6i_dma_dev *sdev = ofdma->of_dma_data;
1038 if (port > sdev->max_request)
1041 chan = dma_get_any_slave_channel(&sdev->slave);
1051 static inline void sun6i_kill_tasklet(struct sun6i_dma_dev *sdev)
1054 writel(0, sdev->base + DMA_IRQ_EN(0));
1055 writel(0, sdev->base + DMA_IRQ_EN(1));
1058 atomic_inc(&sdev->tasklet_shutdown);
1061 devm_free_irq(sdev->slave.dev, sdev->irq, sdev);
1064 tasklet_kill(&sdev->task);
1067 static inline void sun6i_dma_free(struct sun6i_dma_dev *sdev)
1071 for (i = 0; i < sdev->num_vchans; i++) {
1072 struct sun6i_vchan *vchan = &sdev->vchans[i];