Lines Matching refs:sdma
115 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_execute() local
130 writel_relaxed(sdesc->width, sdma->base + SIRFSOC_DMA_WIDTH_0 + in sirfsoc_dma_execute()
134 sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_CTRL); in sirfsoc_dma_execute()
135 writel_relaxed(sdesc->xlen, sdma->base + cid * 0x10 + in sirfsoc_dma_execute()
137 writel_relaxed(sdesc->ylen, sdma->base + cid * 0x10 + in sirfsoc_dma_execute()
139 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) | in sirfsoc_dma_execute()
140 (1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_execute()
146 writel(sdesc->addr >> 2, sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_execute()
150 readl_relaxed(sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL), in sirfsoc_dma_execute()
151 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_execute()
159 struct sirfsoc_dma *sdma = data; in sirfsoc_dma_irq() local
165 is = readl(sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_irq()
168 writel_relaxed(1 << ch, sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_irq()
169 schan = &sdma->channels[ch]; in sirfsoc_dma_irq()
187 tasklet_schedule(&sdma->tasklet); in sirfsoc_dma_irq()
193 static void sirfsoc_dma_process_completed(struct sirfsoc_dma *sdma) in sirfsoc_dma_process_completed() argument
204 for (i = 0; i < sdma->dma.chancnt; i++) { in sirfsoc_dma_process_completed()
205 schan = &sdma->channels[i]; in sirfsoc_dma_process_completed()
257 struct sirfsoc_dma *sdma = (void *)data; in sirfsoc_dma_tasklet() local
259 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_tasklet()
304 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_terminate_all() local
310 if (!sdma->is_marco) { in sirfsoc_dma_terminate_all()
311 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & in sirfsoc_dma_terminate_all()
312 ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_terminate_all()
313 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL) in sirfsoc_dma_terminate_all()
315 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_terminate_all()
317 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_INT_EN_CLR); in sirfsoc_dma_terminate_all()
319 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL_CLR); in sirfsoc_dma_terminate_all()
322 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
335 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_pause_chan() local
341 if (!sdma->is_marco) in sirfsoc_dma_pause_chan()
342 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL) in sirfsoc_dma_pause_chan()
344 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_pause_chan()
347 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL_CLR); in sirfsoc_dma_pause_chan()
357 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_resume_chan() local
363 if (!sdma->is_marco) in sirfsoc_dma_resume_chan()
364 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL) in sirfsoc_dma_resume_chan()
366 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_resume_chan()
369 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_resume_chan()
379 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_alloc_chan_resources() local
386 pm_runtime_get_sync(sdma->dma.dev); in sirfsoc_dma_alloc_chan_resources()
392 dev_notice(sdma->dma.dev, "Memory allocation error. " in sirfsoc_dma_alloc_chan_resources()
420 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_free_chan_resources() local
442 pm_runtime_put(sdma->dma.dev); in sirfsoc_dma_free_chan_resources()
464 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_tx_status() local
482 dma_pos = readl_relaxed(sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR) in sirfsoc_dma_tx_status()
496 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_prep_interleaved() local
518 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_prep_interleaved()
634 struct sirfsoc_dma *sdma = ofdma->of_dma_data; in of_dma_sirfsoc_xlate() local
640 return dma_get_slave_channel(&sdma->channels[request].chan); in of_dma_sirfsoc_xlate()
648 struct sirfsoc_dma *sdma; in sirfsoc_dma_probe() local
655 sdma = devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); in sirfsoc_dma_probe()
656 if (!sdma) { in sirfsoc_dma_probe()
662 sdma->is_marco = true; in sirfsoc_dma_probe()
669 sdma->irq = irq_of_parse_and_map(dn, 0); in sirfsoc_dma_probe()
670 if (sdma->irq == NO_IRQ) { in sirfsoc_dma_probe()
675 sdma->clk = devm_clk_get(dev, NULL); in sirfsoc_dma_probe()
676 if (IS_ERR(sdma->clk)) { in sirfsoc_dma_probe()
678 return PTR_ERR(sdma->clk); in sirfsoc_dma_probe()
690 sdma->base = devm_ioremap(dev, regs_start, regs_size); in sirfsoc_dma_probe()
691 if (!sdma->base) { in sirfsoc_dma_probe()
697 ret = request_irq(sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, sdma); in sirfsoc_dma_probe()
704 dma = &sdma->dma; in sirfsoc_dma_probe()
728 schan = &sdma->channels[i]; in sirfsoc_dma_probe()
743 tasklet_init(&sdma->tasklet, sirfsoc_dma_tasklet, (unsigned long)sdma); in sirfsoc_dma_probe()
746 dev_set_drvdata(dev, sdma); in sirfsoc_dma_probe()
753 ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma); in sirfsoc_dma_probe()
767 free_irq(sdma->irq, sdma); in sirfsoc_dma_probe()
769 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_probe()
776 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_remove() local
779 dma_async_device_unregister(&sdma->dma); in sirfsoc_dma_remove()
780 free_irq(sdma->irq, sdma); in sirfsoc_dma_remove()
781 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_remove()
791 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_suspend() local
793 clk_disable_unprepare(sdma->clk); in sirfsoc_dma_runtime_suspend()
799 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_resume() local
802 ret = clk_prepare_enable(sdma->clk); in sirfsoc_dma_runtime_resume()
813 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_suspend() local
814 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_suspend()
835 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_suspend()
841 save->ctrl[ch] = readl_relaxed(sdma->base + in sirfsoc_dma_pm_suspend()
844 save->interrupt_en = readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_pm_suspend()
854 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_resume() local
855 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_resume()
866 writel_relaxed(save->interrupt_en, sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_pm_resume()
868 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_resume()
875 sdma->base + SIRFSOC_DMA_WIDTH_0 + ch * 4); in sirfsoc_dma_pm_resume()
877 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_pm_resume()
879 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_pm_resume()
881 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_CTRL); in sirfsoc_dma_pm_resume()
883 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()