Lines Matching full:sdma
238 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_execute() local
247 base = sdma->base; in sirfsoc_dma_execute()
253 if (sdma->type == SIRFSOC_DMA_VER_A7V2) in sirfsoc_dma_execute()
257 sdma->exec_desc(sdesc, cid, schan->mode, base); in sirfsoc_dma_execute()
266 struct sirfsoc_dma *sdma = data; in sirfsoc_dma_irq() local
274 switch (sdma->type) { in sirfsoc_dma_irq()
277 is = readl(sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_irq()
278 reg = sdma->base + SIRFSOC_DMA_CH_INT; in sirfsoc_dma_irq()
282 schan = &sdma->channels[ch]; in sirfsoc_dma_irq()
300 is = readl(sdma->base + SIRFSOC_DMA_INT_ATLAS7); in sirfsoc_dma_irq()
302 reg = sdma->base + SIRFSOC_DMA_INT_ATLAS7; in sirfsoc_dma_irq()
304 schan = &sdma->channels[0]; in sirfsoc_dma_irq()
332 tasklet_schedule(&sdma->tasklet); in sirfsoc_dma_irq()
338 static void sirfsoc_dma_process_completed(struct sirfsoc_dma *sdma) in sirfsoc_dma_process_completed() argument
349 for (i = 0; i < sdma->dma.chancnt; i++) { in sirfsoc_dma_process_completed()
350 schan = &sdma->channels[i]; in sirfsoc_dma_process_completed()
398 struct sirfsoc_dma *sdma = from_tasklet(sdma, t, tasklet); in sirfsoc_dma_tasklet() local
400 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_tasklet()
445 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_terminate_all() local
451 switch (sdma->type) { in sirfsoc_dma_terminate_all()
453 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_INT_EN_CLR); in sirfsoc_dma_terminate_all()
454 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_terminate_all()
456 sdma->base + in sirfsoc_dma_terminate_all()
458 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
461 writel_relaxed(0, sdma->base + SIRFSOC_DMA_INT_EN_ATLAS7); in sirfsoc_dma_terminate_all()
463 sdma->base + SIRFSOC_DMA_INT_ATLAS7); in sirfsoc_dma_terminate_all()
464 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_terminate_all()
465 writel_relaxed(0, sdma->base + SIRFSOC_DMA_VALID_ATLAS7); in sirfsoc_dma_terminate_all()
468 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & in sirfsoc_dma_terminate_all()
469 ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_terminate_all()
470 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_terminate_all()
473 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_terminate_all()
474 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
491 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_pause_chan() local
497 switch (sdma->type) { in sirfsoc_dma_pause_chan()
500 sdma->base + in sirfsoc_dma_pause_chan()
504 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_pause_chan()
507 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_pause_chan()
510 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_pause_chan()
525 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_resume_chan() local
530 switch (sdma->type) { in sirfsoc_dma_resume_chan()
533 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
537 sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
540 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_resume_chan()
543 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_resume_chan()
558 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_alloc_chan_resources() local
565 pm_runtime_get_sync(sdma->dma.dev); in sirfsoc_dma_alloc_chan_resources()
571 dev_notice(sdma->dma.dev, "Memory allocation error. " in sirfsoc_dma_alloc_chan_resources()
599 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_free_chan_resources() local
621 pm_runtime_put(sdma->dma.dev); in sirfsoc_dma_free_chan_resources()
643 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_tx_status() local
670 if (sdma->type == SIRFSOC_DMA_VER_A7V2) in sirfsoc_dma_tx_status()
673 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_tx_status()
674 dma_pos = readl_relaxed(sdma->base + SIRFSOC_DMA_CUR_DATA_ADDR); in sirfsoc_dma_tx_status()
677 sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR) << 2; in sirfsoc_dma_tx_status()
692 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_prep_interleaved() local
714 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_prep_interleaved()
830 struct sirfsoc_dma *sdma = ofdma->of_dma_data; in of_dma_sirfsoc_xlate() local
836 return dma_get_slave_channel(&sdma->channels[request].chan); in of_dma_sirfsoc_xlate()
844 struct sirfsoc_dma *sdma; in sirfsoc_dma_probe() local
852 sdma = devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); in sirfsoc_dma_probe()
853 if (!sdma) in sirfsoc_dma_probe()
859 sdma->exec_desc = data->exec; in sirfsoc_dma_probe()
860 sdma->type = data->type; in sirfsoc_dma_probe()
867 sdma->irq = irq_of_parse_and_map(dn, 0); in sirfsoc_dma_probe()
868 if (!sdma->irq) { in sirfsoc_dma_probe()
873 sdma->clk = devm_clk_get(dev, NULL); in sirfsoc_dma_probe()
874 if (IS_ERR(sdma->clk)) { in sirfsoc_dma_probe()
876 return PTR_ERR(sdma->clk); in sirfsoc_dma_probe()
888 sdma->base = devm_ioremap(dev, regs_start, regs_size); in sirfsoc_dma_probe()
889 if (!sdma->base) { in sirfsoc_dma_probe()
895 ret = request_irq(sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, sdma); in sirfsoc_dma_probe()
902 dma = &sdma->dma; in sirfsoc_dma_probe()
926 schan = &sdma->channels[i]; in sirfsoc_dma_probe()
941 tasklet_setup(&sdma->tasklet, sirfsoc_dma_tasklet); in sirfsoc_dma_probe()
944 dev_set_drvdata(dev, sdma); in sirfsoc_dma_probe()
951 ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma); in sirfsoc_dma_probe()
965 free_irq(sdma->irq, sdma); in sirfsoc_dma_probe()
967 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_probe()
974 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_remove() local
977 dma_async_device_unregister(&sdma->dma); in sirfsoc_dma_remove()
978 free_irq(sdma->irq, sdma); in sirfsoc_dma_remove()
979 tasklet_kill(&sdma->tasklet); in sirfsoc_dma_remove()
980 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_remove()
990 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_suspend() local
992 clk_disable_unprepare(sdma->clk); in sirfsoc_dma_runtime_suspend()
998 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_resume() local
1001 ret = clk_prepare_enable(sdma->clk); in sirfsoc_dma_runtime_resume()
1011 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_suspend() local
1012 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_suspend()
1029 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_suspend()
1042 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_suspend()
1045 save->ctrl[ch] = readl_relaxed(sdma->base + in sirfsoc_dma_pm_suspend()
1048 save->interrupt_en = readl_relaxed(sdma->base + int_offset); in sirfsoc_dma_pm_suspend()
1058 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_resume() local
1059 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_resume()
1073 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1083 writel_relaxed(save->interrupt_en, sdma->base + int_offset); in sirfsoc_dma_pm_resume()
1085 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_resume()
1092 sdma->base + width_offset + ch * 4); in sirfsoc_dma_pm_resume()
1094 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_pm_resume()
1096 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_pm_resume()
1098 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_CTRL); in sirfsoc_dma_pm_resume()
1099 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1101 sdma->base + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()
1104 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()