Lines Matching defs:sdev

226 static inline void sun6i_dma_dump_com_regs(struct sun6i_dma_dev *sdev)
228 dev_dbg(sdev->slave.dev, "Common register:\n"
234 DMA_IRQ_EN(0), readl(sdev->base + DMA_IRQ_EN(0)),
235 DMA_IRQ_EN(1), readl(sdev->base + DMA_IRQ_EN(1)),
236 DMA_IRQ_STAT(0), readl(sdev->base + DMA_IRQ_STAT(0)),
237 DMA_IRQ_STAT(1), readl(sdev->base + DMA_IRQ_STAT(1)),
238 DMA_STAT, readl(sdev->base + DMA_STAT));
241 static inline void sun6i_dma_dump_chan_regs(struct sun6i_dma_dev *sdev,
246 dev_dbg(sdev->slave.dev, "Chan %d reg: %pa\n"
295 static void sun6i_enable_clock_autogate_a23(struct sun6i_dma_dev *sdev)
297 writel(SUN8I_DMA_GATE_ENABLE, sdev->base + SUN8I_DMA_GATE);
300 static void sun6i_enable_clock_autogate_h3(struct sun6i_dma_dev *sdev)
302 writel(SUNXI_H3_DMA_GATE_ENABLE, sdev->base + SUNXI_H3_DMA_GATE);
404 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vd->tx.chan->device);
418 dma_pool_free(sdev->pool, v_lli, p_lli);
429 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(vchan->vc.chan.device);
455 irq_val = readl(sdev->base + DMA_IRQ_EN(irq_reg));
459 writel(irq_val, sdev->base + DMA_IRQ_EN(irq_reg));
464 sun6i_dma_dump_com_regs(sdev);
465 sun6i_dma_dump_chan_regs(sdev, pchan);
472 struct sun6i_dma_dev *sdev = from_tasklet(sdev, t, task);
478 list_for_each_entry(vchan, &sdev->slave.channels, vc.chan.device_node) {
488 dev_dbg(sdev->slave.dev, "pchan %u: free\n",
499 spin_lock_irq(&sdev->lock);
500 for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) {
501 pchan = &sdev->pchans[pchan_idx];
503 if (pchan->vchan || list_empty(&sdev->pending))
506 vchan = list_first_entry(&sdev->pending,
516 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n",
519 spin_unlock_irq(&sdev->lock);
521 for (pchan_idx = 0; pchan_idx < sdev->num_pchans; pchan_idx++) {
525 pchan = sdev->pchans + pchan_idx;
537 struct sun6i_dma_dev *sdev = dev_id;
543 for (i = 0; i < sdev->num_pchans / DMA_IRQ_CHAN_NR; i++) {
544 status = readl(sdev->base + DMA_IRQ_STAT(i));
548 dev_dbg(sdev->slave.dev, "DMA irq status %s: 0x%x\n",
551 writel(status, sdev->base + DMA_IRQ_STAT(i));
554 pchan = sdev->pchans + j;
570 if (!atomic_read(&sdev->tasklet_shutdown))
571 tasklet_schedule(&sdev->task);
578 static int set_config(struct sun6i_dma_dev *sdev,
607 if (!(BIT(src_addr_width) & sdev->slave.src_addr_widths))
609 if (!(BIT(dst_addr_width) & sdev->slave.dst_addr_widths))
611 if (!(BIT(src_maxburst) & sdev->cfg->src_burst_lengths))
613 if (!(BIT(dst_maxburst) & sdev->cfg->dst_burst_lengths))
624 sdev->cfg->set_burst_length(p_cfg, src_burst, dst_burst);
633 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
651 v_lli = dma_pool_alloc(sdev->pool, GFP_NOWAIT, &p_lli);
653 dev_err(sdev->slave.dev, "Failed to alloc lli memory\n");
667 sdev->cfg->set_burst_length(&v_lli->cfg, burst, burst);
668 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, DRQ_SDRAM);
669 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, LINEAR_MODE);
687 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
700 ret = set_config(sdev, sconfig, dir, &lli_cfg);
711 v_lli = dma_pool_alloc(sdev->pool, GFP_NOWAIT, &p_lli);
722 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
723 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE);
735 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
736 sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE);
756 dma_pool_free(sdev->pool, prev, virt_to_phys(prev));
769 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
779 ret = set_config(sdev, sconfig, dir, &lli_cfg);
790 v_lli = dma_pool_alloc(sdev->pool, GFP_NOWAIT, &p_lli);
792 dev_err(sdev->slave.dev, "Failed to alloc lli memory\n");
803 sdev->cfg->set_drq(&v_lli->cfg, DRQ_SDRAM, vchan->port);
804 sdev->cfg->set_mode(&v_lli->cfg, LINEAR_MODE, IO_MODE);
809 sdev->cfg->set_drq(&v_lli->cfg, vchan->port, DRQ_SDRAM);
810 sdev->cfg->set_mode(&v_lli->cfg, IO_MODE, LINEAR_MODE);
824 dma_pool_free(sdev->pool, prev, virt_to_phys(prev));
841 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
851 spin_lock(&sdev->lock);
853 spin_unlock(&sdev->lock);
861 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
874 spin_lock(&sdev->lock);
875 list_add_tail(&vchan->node, &sdev->pending);
876 spin_unlock(&sdev->lock);
886 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
892 spin_lock(&sdev->lock);
894 spin_unlock(&sdev->lock);
967 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
974 spin_lock(&sdev->lock);
977 list_add_tail(&vchan->node, &sdev->pending);
978 tasklet_schedule(&sdev->task);
983 spin_unlock(&sdev->lock);
994 struct sun6i_dma_dev *sdev = to_sun6i_dma_dev(chan->device);
998 spin_lock_irqsave(&sdev->lock, flags);
1000 spin_unlock_irqrestore(&sdev->lock, flags);
1008 struct sun6i_dma_dev *sdev = ofdma->of_dma_data;
1013 if (port > sdev->max_request)
1016 chan = dma_get_any_slave_channel(&sdev->slave);
1026 static inline void sun6i_kill_tasklet(struct sun6i_dma_dev *sdev)
1029 writel(0, sdev->base + DMA_IRQ_EN(0));
1030 writel(0, sdev->base + DMA_IRQ_EN(1));
1033 atomic_inc(&sdev->tasklet_shutdown);
1036 devm_free_irq(sdev->slave.dev, sdev->irq, sdev);
1039 tasklet_kill(&sdev->task);
1042 static inline void sun6i_dma_free(struct sun6i_dma_dev *sdev)
1046 for (i = 0; i < sdev->num_vchans; i++) {
1047 struct sun6i_vchan *vchan = &sdev->vchans[i];