Lines Matching refs:pchan
197 * @pchan: the physical channel utilized by this channel
204 struct owl_dma_pchan *pchan;
240 static void pchan_update(struct owl_dma_pchan *pchan, u32 reg,
245 regval = readl(pchan->base + reg);
252 writel(val, pchan->base + reg);
255 static void pchan_writel(struct owl_dma_pchan *pchan, u32 reg, u32 data)
257 writel(data, pchan->base + reg);
260 static u32 pchan_readl(struct owl_dma_pchan *pchan, u32 reg)
262 return readl(pchan->base + reg);
470 struct owl_dma_pchan *pchan = NULL;
475 pchan = &od->pchans[i];
478 if (!pchan->vchan) {
479 pchan->vchan = vchan;
487 return pchan;
490 static int owl_dma_pchan_busy(struct owl_dma *od, struct owl_dma_pchan *pchan)
496 return !(val & (1 << pchan->id));
500 struct owl_dma_pchan *pchan)
505 pchan_writel(pchan, OWL_DMAX_START, 0);
506 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
509 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), false);
512 if (irq_pd & (1 << pchan->id)) {
514 "terminating pchan %d that still has pending irq\n",
515 pchan->id);
516 dma_writel(od, OWL_DMA_IRQ_PD0, (1 << pchan->id));
519 pchan->vchan = NULL;
524 static void owl_dma_pause_pchan(struct owl_dma_pchan *pchan)
526 pchan_writel(pchan, 1, OWL_DMAX_PAUSE);
529 static void owl_dma_resume_pchan(struct owl_dma_pchan *pchan)
531 pchan_writel(pchan, 0, OWL_DMAX_PAUSE);
538 struct owl_dma_pchan *pchan = vchan->pchan;
549 while (owl_dma_pchan_busy(od, pchan))
560 pchan_writel(pchan, OWL_DMAX_MODE, OWL_DMA_MODE_LME);
561 pchan_writel(pchan, OWL_DMAX_LINKLIST_CTL,
563 pchan_writel(pchan, OWL_DMAX_NEXT_DESCRIPTOR, lli->phys);
564 pchan_writel(pchan, OWL_DMAX_INT_CTL, int_ctl);
566 /* Clear IRQ status for this pchan */
567 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
571 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), true);
575 dev_dbg(chan2dev(&vchan->vc.chan), "starting pchan %d\n", pchan->id);
577 /* Start DMA transfer for this pchan */
578 pchan_writel(pchan, OWL_DMAX_START, 0x1);
586 owl_dma_terminate_pchan(od, vchan->pchan);
588 vchan->pchan = NULL;
595 struct owl_dma_pchan *pchan;
604 /* Clear IRQ status for each pchan */
606 pchan = &od->pchans[i];
607 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
615 pchan = &od->pchans[i];
616 chan_irq_pending = pchan_readl(pchan, OWL_DMAX_INT_CTL) &
617 pchan_readl(pchan, OWL_DMAX_INT_STATUS);
628 /* Clear IRQ status for this pchan */
629 pchan_update(pchan, OWL_DMAX_INT_STATUS,
642 pchan = &od->pchans[i];
644 vchan = pchan->vchan;
646 dev_warn(od->dma.dev, "no vchan attached on pchan %d\n",
647 pchan->id);
705 if (vchan->pchan)
744 owl_dma_pause_pchan(vchan->pchan);
756 if (!vchan->pchan && !vchan->txd)
763 owl_dma_resume_pchan(vchan->pchan);
772 struct owl_dma_pchan *pchan;
778 pchan = vchan->pchan;
781 if (!pchan || !txd)
785 bytes = pchan_readl(pchan, OWL_DMAX_REMAIN_CNT);
788 if (pchan_readl(pchan, OWL_DMAX_MODE) & OWL_DMA_MODE_LME) {
789 next_lli_phy = pchan_readl(pchan, OWL_DMAX_NEXT_DESCRIPTOR);
840 struct owl_dma_pchan *pchan;
842 pchan = owl_dma_get_pchan(od, vchan);
843 if (!pchan)
846 dev_dbg(od->dma.dev, "allocated pchan %d\n", pchan->id);
848 vchan->pchan = pchan;
859 if (!vchan->pchan)
1176 struct owl_dma_pchan *pchan = &od->pchans[i];
1178 pchan->id = i;
1179 pchan->base = od->base + OWL_DMA_CHAN_BASE(i);