Lines Matching refs:pchan
242 struct sun6i_pchan *pchan)
244 phys_addr_t reg = virt_to_phys(pchan->base);
255 pchan->idx, ®,
257 readl(pchan->base + DMA_CHAN_ENABLE),
259 readl(pchan->base + DMA_CHAN_PAUSE),
261 readl(pchan->base + DMA_CHAN_LLI_ADDR),
263 readl(pchan->base + DMA_CHAN_CUR_CFG),
265 readl(pchan->base + DMA_CHAN_CUR_SRC),
267 readl(pchan->base + DMA_CHAN_CUR_DST),
269 readl(pchan->base + DMA_CHAN_CUR_CNT),
271 readl(pchan->base + DMA_CHAN_CUR_PARA));
341 static size_t sun6i_get_chan_size(struct sun6i_pchan *pchan)
343 struct sun6i_desc *txd = pchan->desc;
348 pos = readl(pchan->base + DMA_CHAN_LLI_ADDR);
349 bytes = readl(pchan->base + DMA_CHAN_CUR_CNT);
431 struct sun6i_pchan *pchan = vchan->phy;
434 if (!pchan)
438 pchan->desc = NULL;
439 pchan->done = NULL;
445 pchan->desc = to_sun6i_desc(&desc->tx);
446 pchan->done = NULL;
448 sun6i_dma_dump_lli(vchan, pchan->desc->v_lli);
450 irq_reg = pchan->idx / DMA_IRQ_CHAN_NR;
451 irq_offset = pchan->idx % DMA_IRQ_CHAN_NR;
461 writel(pchan->desc->p_lli, pchan->base + DMA_CHAN_LLI_ADDR);
462 writel(DMA_CHAN_ENABLE_START, pchan->base + DMA_CHAN_ENABLE);
465 sun6i_dma_dump_chan_regs(sdev, pchan);
474 struct sun6i_pchan *pchan;
481 pchan = vchan->phy;
483 if (pchan && pchan->done) {
488 dev_dbg(sdev->slave.dev, "pchan %u: free\n",
489 pchan->idx);
493 pchan->vchan = NULL;
501 pchan = &sdev->pchans[pchan_idx];
503 if (pchan->vchan || list_empty(&sdev->pending))
514 pchan->vchan = vchan;
515 vchan->phy = pchan;
516 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n",
517 pchan->idx, &vchan->vc);
525 pchan = sdev->pchans + pchan_idx;
526 vchan = pchan->vchan;
539 struct sun6i_pchan *pchan;
554 pchan = sdev->pchans + j;
555 vchan = pchan->vchan;
558 vchan_cyclic_callback(&pchan->desc->vd);
561 vchan_cookie_complete(&pchan->desc->vd);
562 pchan->done = pchan->desc;
843 struct sun6i_pchan *pchan = vchan->phy;
847 if (pchan) {
849 pchan->base + DMA_CHAN_PAUSE);
863 struct sun6i_pchan *pchan = vchan->phy;
870 if (pchan) {
872 pchan->base + DMA_CHAN_PAUSE);
888 struct sun6i_pchan *pchan = vchan->phy;
900 if (pchan && pchan->desc) {
901 struct virt_dma_desc *vd = &pchan->desc->vd;
910 if (pchan) {
911 writel(DMA_CHAN_ENABLE_STOP, pchan->base + DMA_CHAN_ENABLE);
912 writel(DMA_CHAN_PAUSE_RESUME, pchan->base + DMA_CHAN_PAUSE);
915 pchan->vchan = NULL;
916 pchan->desc = NULL;
917 pchan->done = NULL;
932 struct sun6i_pchan *pchan = vchan->phy;
952 } else if (!pchan || !pchan->desc) {
955 bytes = sun6i_get_chan_size(pchan);
1349 struct sun6i_pchan *pchan = &sdc->pchans[i];
1351 pchan->idx = i;
1352 pchan->base = sdc->base + 0x100 + i * 0x40;