Lines Matching refs:pchan
252 struct sun6i_pchan *pchan)
263 pchan->idx,
265 readl(pchan->base + DMA_CHAN_ENABLE),
267 readl(pchan->base + DMA_CHAN_PAUSE),
269 readl(pchan->base + DMA_CHAN_LLI_ADDR),
271 readl(pchan->base + DMA_CHAN_CUR_CFG),
273 readl(pchan->base + DMA_CHAN_CUR_SRC),
275 readl(pchan->base + DMA_CHAN_CUR_DST),
277 readl(pchan->base + DMA_CHAN_CUR_CNT),
279 readl(pchan->base + DMA_CHAN_CUR_PARA));
349 static size_t sun6i_get_chan_size(struct sun6i_pchan *pchan)
351 struct sun6i_desc *txd = pchan->desc;
356 pos = readl(pchan->base + DMA_CHAN_LLI_ADDR);
357 bytes = readl(pchan->base + DMA_CHAN_CUR_CNT);
438 struct sun6i_pchan *pchan = vchan->phy;
441 if (!pchan)
445 pchan->desc = NULL;
446 pchan->done = NULL;
452 pchan->desc = to_sun6i_desc(&desc->tx);
453 pchan->done = NULL;
455 sun6i_dma_dump_lli(vchan, pchan->desc->v_lli, pchan->desc->p_lli);
457 irq_reg = pchan->idx / DMA_IRQ_CHAN_NR;
458 irq_offset = pchan->idx % DMA_IRQ_CHAN_NR;
468 writel(pchan->desc->p_lli, pchan->base + DMA_CHAN_LLI_ADDR);
469 writel(DMA_CHAN_ENABLE_START, pchan->base + DMA_CHAN_ENABLE);
472 sun6i_dma_dump_chan_regs(sdev, pchan);
481 struct sun6i_pchan *pchan;
488 pchan = vchan->phy;
490 if (pchan && pchan->done) {
495 dev_dbg(sdev->slave.dev, "pchan %u: free\n",
496 pchan->idx);
500 pchan->vchan = NULL;
508 pchan = &sdev->pchans[pchan_idx];
510 if (pchan->vchan || list_empty(&sdev->pending))
521 pchan->vchan = vchan;
522 vchan->phy = pchan;
523 dev_dbg(sdev->slave.dev, "pchan %u: alloc vchan %p\n",
524 pchan->idx, &vchan->vc);
532 pchan = sdev->pchans + pchan_idx;
533 vchan = pchan->vchan;
546 struct sun6i_pchan *pchan;
561 pchan = sdev->pchans + j;
562 vchan = pchan->vchan;
565 vchan_cyclic_callback(&pchan->desc->vd);
568 vchan_cookie_complete(&pchan->desc->vd);
569 pchan->done = pchan->desc;
868 struct sun6i_pchan *pchan = vchan->phy;
872 if (pchan) {
874 pchan->base + DMA_CHAN_PAUSE);
888 struct sun6i_pchan *pchan = vchan->phy;
895 if (pchan) {
897 pchan->base + DMA_CHAN_PAUSE);
913 struct sun6i_pchan *pchan = vchan->phy;
925 if (pchan && pchan->desc) {
926 struct virt_dma_desc *vd = &pchan->desc->vd;
935 if (pchan) {
936 writel(DMA_CHAN_ENABLE_STOP, pchan->base + DMA_CHAN_ENABLE);
937 writel(DMA_CHAN_PAUSE_RESUME, pchan->base + DMA_CHAN_PAUSE);
940 pchan->vchan = NULL;
941 pchan->desc = NULL;
942 pchan->done = NULL;
957 struct sun6i_pchan *pchan = vchan->phy;
977 } else if (!pchan || !pchan->desc) {
980 bytes = sun6i_get_chan_size(pchan);
1399 struct sun6i_pchan *pchan = &sdc->pchans[i];
1401 pchan->idx = i;
1402 pchan->base = sdc->base + 0x100 + i * 0x40;