Lines Matching refs:sdma
239 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_execute() local
248 base = sdma->base; in sirfsoc_dma_execute()
254 if (sdma->type == SIRFSOC_DMA_VER_A7V2) in sirfsoc_dma_execute()
258 sdma->exec_desc(sdesc, cid, schan->mode, base); in sirfsoc_dma_execute()
267 struct sirfsoc_dma *sdma = data; in sirfsoc_dma_irq() local
275 switch (sdma->type) { in sirfsoc_dma_irq()
278 is = readl(sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_irq()
279 reg = sdma->base + SIRFSOC_DMA_CH_INT; in sirfsoc_dma_irq()
283 schan = &sdma->channels[ch]; in sirfsoc_dma_irq()
301 is = readl(sdma->base + SIRFSOC_DMA_INT_ATLAS7); in sirfsoc_dma_irq()
303 reg = sdma->base + SIRFSOC_DMA_INT_ATLAS7; in sirfsoc_dma_irq()
305 schan = &sdma->channels[0]; in sirfsoc_dma_irq()
333 tasklet_schedule(&sdma->tasklet); in sirfsoc_dma_irq()
339 static void sirfsoc_dma_process_completed(struct sirfsoc_dma *sdma) in sirfsoc_dma_process_completed() argument
350 for (i = 0; i < sdma->dma.chancnt; i++) { in sirfsoc_dma_process_completed()
351 schan = &sdma->channels[i]; in sirfsoc_dma_process_completed()
399 struct sirfsoc_dma *sdma = (void *)data; in sirfsoc_dma_tasklet() local
401 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_tasklet()
446 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_terminate_all() local
452 switch (sdma->type) { in sirfsoc_dma_terminate_all()
454 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_INT_EN_CLR); in sirfsoc_dma_terminate_all()
455 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_terminate_all()
457 sdma->base + in sirfsoc_dma_terminate_all()
459 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
462 writel_relaxed(0, sdma->base + SIRFSOC_DMA_INT_EN_ATLAS7); in sirfsoc_dma_terminate_all()
464 sdma->base + SIRFSOC_DMA_INT_ATLAS7); in sirfsoc_dma_terminate_all()
465 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_terminate_all()
466 writel_relaxed(0, sdma->base + SIRFSOC_DMA_VALID_ATLAS7); in sirfsoc_dma_terminate_all()
469 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & in sirfsoc_dma_terminate_all()
470 ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_terminate_all()
471 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_terminate_all()
474 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_terminate_all()
475 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
492 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_pause_chan() local
498 switch (sdma->type) { in sirfsoc_dma_pause_chan()
501 sdma->base + in sirfsoc_dma_pause_chan()
505 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_pause_chan()
508 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_pause_chan()
511 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_pause_chan()
526 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_resume_chan() local
531 switch (sdma->type) { in sirfsoc_dma_resume_chan()
534 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
538 sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
541 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_resume_chan()
544 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_resume_chan()
559 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_alloc_chan_resources() local
566 pm_runtime_get_sync(sdma->dma.dev); in sirfsoc_dma_alloc_chan_resources()
572 dev_notice(sdma->dma.dev, "Memory allocation error. " in sirfsoc_dma_alloc_chan_resources()
600 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_free_chan_resources() local
622 pm_runtime_put(sdma->dma.dev); in sirfsoc_dma_free_chan_resources()
644 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_tx_status() local
671 if (sdma->type == SIRFSOC_DMA_VER_A7V2) in sirfsoc_dma_tx_status()
674 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_tx_status()
675 dma_pos = readl_relaxed(sdma->base + SIRFSOC_DMA_CUR_DATA_ADDR); in sirfsoc_dma_tx_status()
678 sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR) << 2; in sirfsoc_dma_tx_status()
693 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_prep_interleaved() local
715 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_prep_interleaved()
831 struct sirfsoc_dma *sdma = ofdma->of_dma_data; in of_dma_sirfsoc_xlate() local
837 return dma_get_slave_channel(&sdma->channels[request].chan); in of_dma_sirfsoc_xlate()
845 struct sirfsoc_dma *sdma; in sirfsoc_dma_probe() local
853 sdma = devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); in sirfsoc_dma_probe()
854 if (!sdma) in sirfsoc_dma_probe()
860 sdma->exec_desc = data->exec; in sirfsoc_dma_probe()
861 sdma->type = data->type; in sirfsoc_dma_probe()
868 sdma->irq = irq_of_parse_and_map(dn, 0); in sirfsoc_dma_probe()
869 if (!sdma->irq) { in sirfsoc_dma_probe()
874 sdma->clk = devm_clk_get(dev, NULL); in sirfsoc_dma_probe()
875 if (IS_ERR(sdma->clk)) { in sirfsoc_dma_probe()
877 return PTR_ERR(sdma->clk); in sirfsoc_dma_probe()
889 sdma->base = devm_ioremap(dev, regs_start, regs_size); in sirfsoc_dma_probe()
890 if (!sdma->base) { in sirfsoc_dma_probe()
896 ret = request_irq(sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, sdma); in sirfsoc_dma_probe()
903 dma = &sdma->dma; in sirfsoc_dma_probe()
927 schan = &sdma->channels[i]; in sirfsoc_dma_probe()
942 tasklet_init(&sdma->tasklet, sirfsoc_dma_tasklet, (unsigned long)sdma); in sirfsoc_dma_probe()
945 dev_set_drvdata(dev, sdma); in sirfsoc_dma_probe()
952 ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma); in sirfsoc_dma_probe()
966 free_irq(sdma->irq, sdma); in sirfsoc_dma_probe()
968 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_probe()
975 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_remove() local
978 dma_async_device_unregister(&sdma->dma); in sirfsoc_dma_remove()
979 free_irq(sdma->irq, sdma); in sirfsoc_dma_remove()
980 tasklet_kill(&sdma->tasklet); in sirfsoc_dma_remove()
981 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_remove()
991 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_suspend() local
993 clk_disable_unprepare(sdma->clk); in sirfsoc_dma_runtime_suspend()
999 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_resume() local
1002 ret = clk_prepare_enable(sdma->clk); in sirfsoc_dma_runtime_resume()
1012 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_suspend() local
1013 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_suspend()
1030 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_suspend()
1043 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_suspend()
1046 save->ctrl[ch] = readl_relaxed(sdma->base + in sirfsoc_dma_pm_suspend()
1049 save->interrupt_en = readl_relaxed(sdma->base + int_offset); in sirfsoc_dma_pm_suspend()
1059 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_resume() local
1060 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_resume()
1074 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1084 writel_relaxed(save->interrupt_en, sdma->base + int_offset); in sirfsoc_dma_pm_resume()
1086 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_resume()
1093 sdma->base + width_offset + ch * 4); in sirfsoc_dma_pm_resume()
1095 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_pm_resume()
1097 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_pm_resume()
1099 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_CTRL); in sirfsoc_dma_pm_resume()
1100 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1102 sdma->base + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()
1105 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()