Lines Matching refs:pchan

198  * @pchan: the physical channel utilized by this channel
205 struct owl_dma_pchan *pchan;
241 static void pchan_update(struct owl_dma_pchan *pchan, u32 reg,
246 regval = readl(pchan->base + reg);
253 writel(val, pchan->base + reg);
256 static void pchan_writel(struct owl_dma_pchan *pchan, u32 reg, u32 data)
258 writel(data, pchan->base + reg);
261 static u32 pchan_readl(struct owl_dma_pchan *pchan, u32 reg)
263 return readl(pchan->base + reg);
471 struct owl_dma_pchan *pchan = NULL;
476 pchan = &od->pchans[i];
479 if (!pchan->vchan) {
480 pchan->vchan = vchan;
488 return pchan;
491 static int owl_dma_pchan_busy(struct owl_dma *od, struct owl_dma_pchan *pchan)
497 return !(val & (1 << pchan->id));
501 struct owl_dma_pchan *pchan)
506 pchan_writel(pchan, OWL_DMAX_START, 0);
507 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
510 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), false);
513 if (irq_pd & (1 << pchan->id)) {
515 "terminating pchan %d that still has pending irq\n",
516 pchan->id);
517 dma_writel(od, OWL_DMA_IRQ_PD0, (1 << pchan->id));
520 pchan->vchan = NULL;
525 static void owl_dma_pause_pchan(struct owl_dma_pchan *pchan)
527 pchan_writel(pchan, 1, OWL_DMAX_PAUSE);
530 static void owl_dma_resume_pchan(struct owl_dma_pchan *pchan)
532 pchan_writel(pchan, 0, OWL_DMAX_PAUSE);
539 struct owl_dma_pchan *pchan = vchan->pchan;
550 while (owl_dma_pchan_busy(od, pchan))
561 pchan_writel(pchan, OWL_DMAX_MODE, OWL_DMA_MODE_LME);
562 pchan_writel(pchan, OWL_DMAX_LINKLIST_CTL,
564 pchan_writel(pchan, OWL_DMAX_NEXT_DESCRIPTOR, lli->phys);
565 pchan_writel(pchan, OWL_DMAX_INT_CTL, int_ctl);
567 /* Clear IRQ status for this pchan */
568 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
572 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), true);
576 dev_dbg(chan2dev(&vchan->vc.chan), "starting pchan %d\n", pchan->id);
578 /* Start DMA transfer for this pchan */
579 pchan_writel(pchan, OWL_DMAX_START, 0x1);
587 owl_dma_terminate_pchan(od, vchan->pchan);
589 vchan->pchan = NULL;
596 struct owl_dma_pchan *pchan;
605 /* Clear IRQ status for each pchan */
607 pchan = &od->pchans[i];
608 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false);
616 pchan = &od->pchans[i];
617 chan_irq_pending = pchan_readl(pchan, OWL_DMAX_INT_CTL) &
618 pchan_readl(pchan, OWL_DMAX_INT_STATUS);
629 /* Clear IRQ status for this pchan */
630 pchan_update(pchan, OWL_DMAX_INT_STATUS,
643 pchan = &od->pchans[i];
645 vchan = pchan->vchan;
647 dev_warn(od->dma.dev, "no vchan attached on pchan %d\n",
648 pchan->id);
706 if (vchan->pchan)
745 owl_dma_pause_pchan(vchan->pchan);
757 if (!vchan->pchan && !vchan->txd)
764 owl_dma_resume_pchan(vchan->pchan);
773 struct owl_dma_pchan *pchan;
779 pchan = vchan->pchan;
782 if (!pchan || !txd)
786 bytes = pchan_readl(pchan, OWL_DMAX_REMAIN_CNT);
789 if (pchan_readl(pchan, OWL_DMAX_MODE) & OWL_DMA_MODE_LME) {
790 next_lli_phy = pchan_readl(pchan, OWL_DMAX_NEXT_DESCRIPTOR);
841 struct owl_dma_pchan *pchan;
843 pchan = owl_dma_get_pchan(od, vchan);
844 if (!pchan)
847 dev_dbg(od->dma.dev, "allocated pchan %d\n", pchan->id);
849 vchan->pchan = pchan;
860 if (!vchan->pchan)
1178 struct owl_dma_pchan *pchan = &od->pchans[i];
1180 pchan->id = i;
1181 pchan->base = od->base + OWL_DMA_CHAN_BASE(i);