Lines Matching refs:sdesc
126 void (*exec_desc)(struct sirfsoc_dma_desc *sdesc,
132 void (*exec)(struct sirfsoc_dma_desc *sdesc,
162 static void sirfsoc_dma_execute_hw_a7v2(struct sirfsoc_dma_desc *sdesc, in sirfsoc_dma_execute_hw_a7v2() argument
165 if (sdesc->chain) { in sirfsoc_dma_execute_hw_a7v2()
167 writel_relaxed((sdesc->dir << SIRFSOC_DMA_DIR_CTRL_BIT_ATLAS7) | in sirfsoc_dma_execute_hw_a7v2()
168 (sdesc->chain << in sirfsoc_dma_execute_hw_a7v2()
174 writel_relaxed(sdesc->xlen, base + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_execute_hw_a7v2()
175 writel_relaxed(sdesc->ylen, base + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_execute_hw_a7v2()
176 writel_relaxed(sdesc->width, base + SIRFSOC_DMA_WIDTH_ATLAS7); in sirfsoc_dma_execute_hw_a7v2()
177 writel_relaxed((sdesc->width*((sdesc->ylen+1)>>1)), in sirfsoc_dma_execute_hw_a7v2()
179 writel_relaxed((sdesc->dir << SIRFSOC_DMA_DIR_CTRL_BIT_ATLAS7) | in sirfsoc_dma_execute_hw_a7v2()
180 (sdesc->chain << in sirfsoc_dma_execute_hw_a7v2()
184 writel_relaxed(sdesc->chain ? SIRFSOC_DMA_INT_END_INT_ATLAS7 : in sirfsoc_dma_execute_hw_a7v2()
188 writel(sdesc->addr, base + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_execute_hw_a7v2()
189 if (sdesc->cyclic) in sirfsoc_dma_execute_hw_a7v2()
193 static void sirfsoc_dma_execute_hw_a7v1(struct sirfsoc_dma_desc *sdesc, in sirfsoc_dma_execute_hw_a7v1() argument
198 writel_relaxed(sdesc->width, base + SIRFSOC_DMA_WIDTH_0 + cid * 4); in sirfsoc_dma_execute_hw_a7v1()
200 (sdesc->dir << SIRFSOC_DMA_DIR_CTRL_BIT), in sirfsoc_dma_execute_hw_a7v1()
202 writel_relaxed(sdesc->xlen, base + cid * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_execute_hw_a7v1()
203 writel_relaxed(sdesc->ylen, base + cid * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_execute_hw_a7v1()
206 writel(sdesc->addr >> 2, base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_execute_hw_a7v1()
207 if (sdesc->cyclic) { in sirfsoc_dma_execute_hw_a7v1()
215 static void sirfsoc_dma_execute_hw_a6(struct sirfsoc_dma_desc *sdesc, in sirfsoc_dma_execute_hw_a6() argument
218 writel_relaxed(sdesc->width, base + SIRFSOC_DMA_WIDTH_0 + cid * 4); in sirfsoc_dma_execute_hw_a6()
220 (sdesc->dir << SIRFSOC_DMA_DIR_CTRL_BIT), in sirfsoc_dma_execute_hw_a6()
222 writel_relaxed(sdesc->xlen, base + cid * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_execute_hw_a6()
223 writel_relaxed(sdesc->ylen, base + cid * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_execute_hw_a6()
226 writel(sdesc->addr >> 2, base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_execute_hw_a6()
227 if (sdesc->cyclic) { in sirfsoc_dma_execute_hw_a6()
240 struct sirfsoc_dma_desc *sdesc = NULL; in sirfsoc_dma_execute() local
248 sdesc = list_first_entry(&schan->queued, struct sirfsoc_dma_desc, in sirfsoc_dma_execute()
251 list_move_tail(&sdesc->node, &schan->active); in sirfsoc_dma_execute()
257 sdma->exec_desc(sdesc, cid, schan->mode, base); in sirfsoc_dma_execute()
259 if (sdesc->cyclic) in sirfsoc_dma_execute()
268 struct sirfsoc_dma_desc *sdesc = NULL; in sirfsoc_dma_irq() local
284 sdesc = list_first_entry(&schan->active, in sirfsoc_dma_irq()
286 if (!sdesc->cyclic) { in sirfsoc_dma_irq()
290 dma_cookie_complete(&sdesc->desc); in sirfsoc_dma_irq()
306 sdesc = list_first_entry(&schan->active, in sirfsoc_dma_irq()
308 if (!sdesc->cyclic) { in sirfsoc_dma_irq()
309 chain = sdesc->chain; in sirfsoc_dma_irq()
316 dma_cookie_complete(&sdesc->desc); in sirfsoc_dma_irq()
320 } else if (sdesc->cyclic && (is & in sirfsoc_dma_irq()
342 struct sirfsoc_dma_desc *sdesc; in sirfsoc_dma_process_completed() local
359 list_for_each_entry(sdesc, &list, node) { in sirfsoc_dma_process_completed()
360 desc = &sdesc->desc; in sirfsoc_dma_process_completed()
379 sdesc = list_first_entry(&schan->active, in sirfsoc_dma_process_completed()
386 desc = &sdesc->desc; in sirfsoc_dma_process_completed()
407 struct sirfsoc_dma_desc *sdesc; in sirfsoc_dma_tx_submit() local
411 sdesc = container_of(txd, struct sirfsoc_dma_desc, desc); in sirfsoc_dma_tx_submit()
416 list_move_tail(&sdesc->node, &schan->queued); in sirfsoc_dma_tx_submit()
560 struct sirfsoc_dma_desc *sdesc; in sirfsoc_dma_alloc_chan_resources() local
569 sdesc = kzalloc(sizeof(*sdesc), GFP_KERNEL); in sirfsoc_dma_alloc_chan_resources()
570 if (!sdesc) { in sirfsoc_dma_alloc_chan_resources()
576 dma_async_tx_descriptor_init(&sdesc->desc, chan); in sirfsoc_dma_alloc_chan_resources()
577 sdesc->desc.flags = DMA_CTRL_ACK; in sirfsoc_dma_alloc_chan_resources()
578 sdesc->desc.tx_submit = sirfsoc_dma_tx_submit; in sirfsoc_dma_alloc_chan_resources()
580 list_add_tail(&sdesc->node, &descs); in sirfsoc_dma_alloc_chan_resources()
600 struct sirfsoc_dma_desc *sdesc, *tmp; in sirfsoc_dma_free_chan_resources() local
618 list_for_each_entry_safe(sdesc, tmp, &descs, node) in sirfsoc_dma_free_chan_resources()
619 kfree(sdesc); in sirfsoc_dma_free_chan_resources()
647 struct sirfsoc_dma_desc *sdesc; in sirfsoc_dma_tx_status() local
661 sdesc = list_first_entry(&schan->active, struct sirfsoc_dma_desc, node); in sirfsoc_dma_tx_status()
662 if (sdesc->cyclic) in sirfsoc_dma_tx_status()
663 dma_request_bytes = (sdesc->xlen + 1) * (sdesc->ylen + 1) * in sirfsoc_dma_tx_status()
664 (sdesc->width * SIRFSOC_DMA_WORD_LEN); in sirfsoc_dma_tx_status()
666 dma_request_bytes = sdesc->xlen * SIRFSOC_DMA_WORD_LEN; in sirfsoc_dma_tx_status()
680 residue = dma_request_bytes - (dma_pos - sdesc->addr); in sirfsoc_dma_tx_status()
694 struct sirfsoc_dma_desc *sdesc = NULL; in sirfsoc_dma_prep_interleaved() local
706 sdesc = list_first_entry(&schan->free, struct sirfsoc_dma_desc, in sirfsoc_dma_prep_interleaved()
708 list_del(&sdesc->node); in sirfsoc_dma_prep_interleaved()
712 if (!sdesc) { in sirfsoc_dma_prep_interleaved()
727 sdesc->cyclic = 0; in sirfsoc_dma_prep_interleaved()
728 sdesc->xlen = xt->sgl[0].size / SIRFSOC_DMA_WORD_LEN; in sirfsoc_dma_prep_interleaved()
729 sdesc->width = (xt->sgl[0].size + xt->sgl[0].icg) / in sirfsoc_dma_prep_interleaved()
731 sdesc->ylen = xt->numf - 1; in sirfsoc_dma_prep_interleaved()
733 sdesc->addr = xt->src_start; in sirfsoc_dma_prep_interleaved()
734 sdesc->dir = 1; in sirfsoc_dma_prep_interleaved()
736 sdesc->addr = xt->dst_start; in sirfsoc_dma_prep_interleaved()
737 sdesc->dir = 0; in sirfsoc_dma_prep_interleaved()
740 list_add_tail(&sdesc->node, &schan->prepared); in sirfsoc_dma_prep_interleaved()
748 return &sdesc->desc; in sirfsoc_dma_prep_interleaved()
762 struct sirfsoc_dma_desc *sdesc = NULL; in sirfsoc_dma_prep_cyclic() local
782 sdesc = list_first_entry(&schan->free, struct sirfsoc_dma_desc, in sirfsoc_dma_prep_cyclic()
784 list_del(&sdesc->node); in sirfsoc_dma_prep_cyclic()
788 if (!sdesc) in sirfsoc_dma_prep_cyclic()
793 sdesc->addr = addr; in sirfsoc_dma_prep_cyclic()
794 sdesc->cyclic = 1; in sirfsoc_dma_prep_cyclic()
795 sdesc->xlen = 0; in sirfsoc_dma_prep_cyclic()
796 sdesc->ylen = buf_len / SIRFSOC_DMA_WORD_LEN - 1; in sirfsoc_dma_prep_cyclic()
797 sdesc->width = 1; in sirfsoc_dma_prep_cyclic()
798 list_add_tail(&sdesc->node, &schan->prepared); in sirfsoc_dma_prep_cyclic()
801 return &sdesc->desc; in sirfsoc_dma_prep_cyclic()
1060 struct sirfsoc_dma_desc *sdesc; in sirfsoc_dma_pm_resume() local
1088 sdesc = list_first_entry(&schan->active, in sirfsoc_dma_pm_resume()
1091 writel_relaxed(sdesc->width, in sirfsoc_dma_pm_resume()
1093 writel_relaxed(sdesc->xlen, in sirfsoc_dma_pm_resume()
1095 writel_relaxed(sdesc->ylen, in sirfsoc_dma_pm_resume()
1100 writel_relaxed(sdesc->addr, in sirfsoc_dma_pm_resume()
1103 writel_relaxed(sdesc->addr >> 2, in sirfsoc_dma_pm_resume()