Lines Matching full:pchan
189 /* Is this a dedicated pchan? */
196 struct sun4i_dma_pchan *pchan; member
311 struct sun4i_dma_pchan *pchan = NULL, *pchans = priv->pchans; in find_and_use_pchan() local
329 pchan = &pchans[i]; in find_and_use_pchan()
330 pchan->vchan = vchan; in find_and_use_pchan()
336 return pchan; in find_and_use_pchan()
340 struct sun4i_dma_pchan *pchan) in release_pchan() argument
343 int nr = pchan - priv->pchans; in release_pchan()
347 pchan->vchan = NULL; in release_pchan()
353 static void configure_pchan(struct sun4i_dma_pchan *pchan, in configure_pchan() argument
360 if (pchan->is_dedicated) { in configure_pchan()
361 writel_relaxed(d->src, pchan->base + SUN4I_DDMA_SRC_ADDR_REG); in configure_pchan()
362 writel_relaxed(d->dst, pchan->base + SUN4I_DDMA_DST_ADDR_REG); in configure_pchan()
363 writel_relaxed(d->len, pchan->base + SUN4I_DDMA_BYTE_COUNT_REG); in configure_pchan()
364 writel_relaxed(d->para, pchan->base + SUN4I_DDMA_PARA_REG); in configure_pchan()
365 writel_relaxed(d->cfg, pchan->base + SUN4I_DDMA_CFG_REG); in configure_pchan()
367 writel_relaxed(d->src, pchan->base + SUN4I_NDMA_SRC_ADDR_REG); in configure_pchan()
368 writel_relaxed(d->dst, pchan->base + SUN4I_NDMA_DST_ADDR_REG); in configure_pchan()
369 writel_relaxed(d->len, pchan->base + SUN4I_NDMA_BYTE_COUNT_REG); in configure_pchan()
370 writel_relaxed(d->cfg, pchan->base + SUN4I_NDMA_CFG_REG); in configure_pchan()
375 struct sun4i_dma_pchan *pchan, in set_pchan_interrupt() argument
379 int pchan_number = pchan - priv->pchans; in set_pchan_interrupt()
405 * pchan and, if successful, will configure it to fulfill a promise
415 struct sun4i_dma_pchan *pchan; in __execute_vchan_pending() local
421 /* We need a pchan to do anything, so secure one if available */ in __execute_vchan_pending()
422 pchan = find_and_use_pchan(priv, vchan); in __execute_vchan_pending()
423 if (!pchan) in __execute_vchan_pending()
465 vchan->pchan = pchan; in __execute_vchan_pending()
466 set_pchan_interrupt(priv, pchan, contract->use_half_int, 1); in __execute_vchan_pending()
467 configure_pchan(pchan, promise); in __execute_vchan_pending()
473 release_pchan(priv, pchan); in __execute_vchan_pending()
978 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_terminate_all() local
987 * Clearing the configuration register will halt the pchan. Interrupts in sun4i_dma_terminate_all()
990 if (pchan) { in sun4i_dma_terminate_all()
991 if (pchan->is_dedicated) in sun4i_dma_terminate_all()
992 writel(0, pchan->base + SUN4I_DDMA_CFG_REG); in sun4i_dma_terminate_all()
994 writel(0, pchan->base + SUN4I_NDMA_CFG_REG); in sun4i_dma_terminate_all()
995 set_pchan_interrupt(priv, pchan, 0, 0); in sun4i_dma_terminate_all()
996 release_pchan(priv, pchan); in sun4i_dma_terminate_all()
1002 vchan->pchan = NULL; in sun4i_dma_terminate_all()
1055 struct sun4i_dma_pchan *pchan = vchan->pchan; in sun4i_dma_tx_status() local
1083 if (promise && pchan) { in sun4i_dma_tx_status()
1085 if (pchan->is_dedicated) in sun4i_dma_tx_status()
1086 bytes += readl(pchan->base + SUN4I_DDMA_BYTE_COUNT_REG); in sun4i_dma_tx_status()
1088 bytes += readl(pchan->base + SUN4I_NDMA_BYTE_COUNT_REG); in sun4i_dma_tx_status()
1120 struct sun4i_dma_pchan *pchans = priv->pchans, *pchan; in sun4i_dma_interrupt() local
1135 pchan = &pchans[bit >> 1]; in sun4i_dma_interrupt()
1136 vchan = pchan->vchan; in sun4i_dma_interrupt()
1142 * Disable the IRQ and free the pchan if it's an end in sun4i_dma_interrupt()
1161 * whatever we have here, reusing the pchan. There's in sun4i_dma_interrupt()
1171 configure_pchan(pchan, promise); in sun4i_dma_interrupt()
1175 vchan->pchan = NULL; in sun4i_dma_interrupt()
1179 release_pchan(priv, pchan); in sun4i_dma_interrupt()
1203 * If a pchan was freed, we may be able to schedule something else, in sun4i_dma_interrupt()