Lines Matching refs:pchan

204 	struct owl_dma_pchan	*pchan;  member
240 static void pchan_update(struct owl_dma_pchan *pchan, u32 reg, in pchan_update() argument
245 regval = readl(pchan->base + reg); in pchan_update()
252 writel(val, pchan->base + reg); in pchan_update()
255 static void pchan_writel(struct owl_dma_pchan *pchan, u32 reg, u32 data) in pchan_writel() argument
257 writel(data, pchan->base + reg); in pchan_writel()
260 static u32 pchan_readl(struct owl_dma_pchan *pchan, u32 reg) in pchan_readl() argument
262 return readl(pchan->base + reg); in pchan_readl()
470 struct owl_dma_pchan *pchan = NULL; in owl_dma_get_pchan() local
475 pchan = &od->pchans[i]; in owl_dma_get_pchan()
478 if (!pchan->vchan) { in owl_dma_get_pchan()
479 pchan->vchan = vchan; in owl_dma_get_pchan()
487 return pchan; in owl_dma_get_pchan()
490 static int owl_dma_pchan_busy(struct owl_dma *od, struct owl_dma_pchan *pchan) in owl_dma_pchan_busy() argument
496 return !(val & (1 << pchan->id)); in owl_dma_pchan_busy()
500 struct owl_dma_pchan *pchan) in owl_dma_terminate_pchan() argument
505 pchan_writel(pchan, OWL_DMAX_START, 0); in owl_dma_terminate_pchan()
506 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false); in owl_dma_terminate_pchan()
509 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), false); in owl_dma_terminate_pchan()
512 if (irq_pd & (1 << pchan->id)) { in owl_dma_terminate_pchan()
515 pchan->id); in owl_dma_terminate_pchan()
516 dma_writel(od, OWL_DMA_IRQ_PD0, (1 << pchan->id)); in owl_dma_terminate_pchan()
519 pchan->vchan = NULL; in owl_dma_terminate_pchan()
524 static void owl_dma_pause_pchan(struct owl_dma_pchan *pchan) in owl_dma_pause_pchan() argument
526 pchan_writel(pchan, 1, OWL_DMAX_PAUSE); in owl_dma_pause_pchan()
529 static void owl_dma_resume_pchan(struct owl_dma_pchan *pchan) in owl_dma_resume_pchan() argument
531 pchan_writel(pchan, 0, OWL_DMAX_PAUSE); in owl_dma_resume_pchan()
538 struct owl_dma_pchan *pchan = vchan->pchan; in owl_dma_start_next_txd() local
549 while (owl_dma_pchan_busy(od, pchan)) in owl_dma_start_next_txd()
560 pchan_writel(pchan, OWL_DMAX_MODE, OWL_DMA_MODE_LME); in owl_dma_start_next_txd()
561 pchan_writel(pchan, OWL_DMAX_LINKLIST_CTL, in owl_dma_start_next_txd()
563 pchan_writel(pchan, OWL_DMAX_NEXT_DESCRIPTOR, lli->phys); in owl_dma_start_next_txd()
564 pchan_writel(pchan, OWL_DMAX_INT_CTL, int_ctl); in owl_dma_start_next_txd()
567 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false); in owl_dma_start_next_txd()
571 dma_update(od, OWL_DMA_IRQ_EN0, (1 << pchan->id), true); in owl_dma_start_next_txd()
575 dev_dbg(chan2dev(&vchan->vc.chan), "starting pchan %d\n", pchan->id); in owl_dma_start_next_txd()
578 pchan_writel(pchan, OWL_DMAX_START, 0x1); in owl_dma_start_next_txd()
586 owl_dma_terminate_pchan(od, vchan->pchan); in owl_dma_phy_free()
588 vchan->pchan = NULL; in owl_dma_phy_free()
595 struct owl_dma_pchan *pchan; in owl_dma_interrupt() local
606 pchan = &od->pchans[i]; in owl_dma_interrupt()
607 pchan_update(pchan, OWL_DMAX_INT_STATUS, 0xff, false); in owl_dma_interrupt()
615 pchan = &od->pchans[i]; in owl_dma_interrupt()
616 chan_irq_pending = pchan_readl(pchan, OWL_DMAX_INT_CTL) & in owl_dma_interrupt()
617 pchan_readl(pchan, OWL_DMAX_INT_STATUS); in owl_dma_interrupt()
629 pchan_update(pchan, OWL_DMAX_INT_STATUS, in owl_dma_interrupt()
642 pchan = &od->pchans[i]; in owl_dma_interrupt()
644 vchan = pchan->vchan; in owl_dma_interrupt()
647 pchan->id); in owl_dma_interrupt()
705 if (vchan->pchan) in owl_dma_terminate_all()
744 owl_dma_pause_pchan(vchan->pchan); in owl_dma_pause()
756 if (!vchan->pchan && !vchan->txd) in owl_dma_resume()
763 owl_dma_resume_pchan(vchan->pchan); in owl_dma_resume()
772 struct owl_dma_pchan *pchan; in owl_dma_getbytes_chan() local
778 pchan = vchan->pchan; in owl_dma_getbytes_chan()
781 if (!pchan || !txd) in owl_dma_getbytes_chan()
785 bytes = pchan_readl(pchan, OWL_DMAX_REMAIN_CNT); in owl_dma_getbytes_chan()
788 if (pchan_readl(pchan, OWL_DMAX_MODE) & OWL_DMA_MODE_LME) { in owl_dma_getbytes_chan()
789 next_lli_phy = pchan_readl(pchan, OWL_DMAX_NEXT_DESCRIPTOR); in owl_dma_getbytes_chan()
840 struct owl_dma_pchan *pchan; in owl_dma_phy_alloc_and_start() local
842 pchan = owl_dma_get_pchan(od, vchan); in owl_dma_phy_alloc_and_start()
843 if (!pchan) in owl_dma_phy_alloc_and_start()
846 dev_dbg(od->dma.dev, "allocated pchan %d\n", pchan->id); in owl_dma_phy_alloc_and_start()
848 vchan->pchan = pchan; in owl_dma_phy_alloc_and_start()
859 if (!vchan->pchan) in owl_dma_issue_pending()
1177 struct owl_dma_pchan *pchan = &od->pchans[i]; in owl_dma_probe() local
1179 pchan->id = i; in owl_dma_probe()
1180 pchan->base = od->base + OWL_DMA_CHAN_BASE(i); in owl_dma_probe()