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()
402 struct sirfsoc_dma *sdma = (void *)data; in sirfsoc_dma_tasklet() local
404 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_tasklet()
449 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_terminate_all() local
455 switch (sdma->type) { in sirfsoc_dma_terminate_all()
457 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_INT_EN_CLR); in sirfsoc_dma_terminate_all()
458 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_INT); in sirfsoc_dma_terminate_all()
460 sdma->base + in sirfsoc_dma_terminate_all()
462 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
465 writel_relaxed(0, sdma->base + SIRFSOC_DMA_INT_EN_ATLAS7); in sirfsoc_dma_terminate_all()
467 sdma->base + SIRFSOC_DMA_INT_ATLAS7); in sirfsoc_dma_terminate_all()
468 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_terminate_all()
469 writel_relaxed(0, sdma->base + SIRFSOC_DMA_VALID_ATLAS7); in sirfsoc_dma_terminate_all()
472 writel_relaxed(readl_relaxed(sdma->base + SIRFSOC_DMA_INT_EN) & in sirfsoc_dma_terminate_all()
473 ~(1 << cid), sdma->base + SIRFSOC_DMA_INT_EN); in sirfsoc_dma_terminate_all()
474 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_terminate_all()
477 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_terminate_all()
478 writel_relaxed(1 << cid, sdma->base + SIRFSOC_DMA_CH_VALID); in sirfsoc_dma_terminate_all()
495 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_pause_chan() local
501 switch (sdma->type) { in sirfsoc_dma_pause_chan()
504 sdma->base + in sirfsoc_dma_pause_chan()
508 writel_relaxed(0, sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_pause_chan()
511 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_pause_chan()
514 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_pause_chan()
529 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(&schan->chan); in sirfsoc_dma_resume_chan() local
534 switch (sdma->type) { in sirfsoc_dma_resume_chan()
537 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
541 sdma->base + SIRFSOC_DMA_LOOP_CTRL_ATLAS7); in sirfsoc_dma_resume_chan()
544 writel_relaxed(readl_relaxed(sdma->base + in sirfsoc_dma_resume_chan()
547 sdma->base + SIRFSOC_DMA_CH_LOOP_CTRL); in sirfsoc_dma_resume_chan()
562 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_alloc_chan_resources() local
569 pm_runtime_get_sync(sdma->dma.dev); in sirfsoc_dma_alloc_chan_resources()
575 dev_notice(sdma->dma.dev, "Memory allocation error. " in sirfsoc_dma_alloc_chan_resources()
603 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_free_chan_resources() local
625 pm_runtime_put(sdma->dma.dev); in sirfsoc_dma_free_chan_resources()
647 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_tx_status() local
674 if (sdma->type == SIRFSOC_DMA_VER_A7V2) in sirfsoc_dma_tx_status()
677 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_tx_status()
678 dma_pos = readl_relaxed(sdma->base + SIRFSOC_DMA_CUR_DATA_ADDR); in sirfsoc_dma_tx_status()
681 sdma->base + cid * 0x10 + SIRFSOC_DMA_CH_ADDR) << 2; in sirfsoc_dma_tx_status()
696 struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); in sirfsoc_dma_prep_interleaved() local
718 sirfsoc_dma_process_completed(sdma); in sirfsoc_dma_prep_interleaved()
834 struct sirfsoc_dma *sdma = ofdma->of_dma_data; in of_dma_sirfsoc_xlate() local
840 return dma_get_slave_channel(&sdma->channels[request].chan); in of_dma_sirfsoc_xlate()
848 struct sirfsoc_dma *sdma; in sirfsoc_dma_probe() local
856 sdma = devm_kzalloc(dev, sizeof(*sdma), GFP_KERNEL); in sirfsoc_dma_probe()
857 if (!sdma) { in sirfsoc_dma_probe()
864 sdma->exec_desc = data->exec; in sirfsoc_dma_probe()
865 sdma->type = data->type; in sirfsoc_dma_probe()
872 sdma->irq = irq_of_parse_and_map(dn, 0); in sirfsoc_dma_probe()
873 if (sdma->irq == NO_IRQ) { in sirfsoc_dma_probe()
878 sdma->clk = devm_clk_get(dev, NULL); in sirfsoc_dma_probe()
879 if (IS_ERR(sdma->clk)) { in sirfsoc_dma_probe()
881 return PTR_ERR(sdma->clk); in sirfsoc_dma_probe()
893 sdma->base = devm_ioremap(dev, regs_start, regs_size); in sirfsoc_dma_probe()
894 if (!sdma->base) { in sirfsoc_dma_probe()
900 ret = request_irq(sdma->irq, &sirfsoc_dma_irq, 0, DRV_NAME, sdma); in sirfsoc_dma_probe()
907 dma = &sdma->dma; in sirfsoc_dma_probe()
931 schan = &sdma->channels[i]; in sirfsoc_dma_probe()
946 tasklet_init(&sdma->tasklet, sirfsoc_dma_tasklet, (unsigned long)sdma); in sirfsoc_dma_probe()
949 dev_set_drvdata(dev, sdma); in sirfsoc_dma_probe()
956 ret = of_dma_controller_register(dn, of_dma_sirfsoc_xlate, sdma); in sirfsoc_dma_probe()
970 free_irq(sdma->irq, sdma); in sirfsoc_dma_probe()
972 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_probe()
979 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_remove() local
982 dma_async_device_unregister(&sdma->dma); in sirfsoc_dma_remove()
983 free_irq(sdma->irq, sdma); in sirfsoc_dma_remove()
984 irq_dispose_mapping(sdma->irq); in sirfsoc_dma_remove()
994 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_suspend() local
996 clk_disable_unprepare(sdma->clk); in sirfsoc_dma_runtime_suspend()
1002 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_runtime_resume() local
1005 ret = clk_prepare_enable(sdma->clk); in sirfsoc_dma_runtime_resume()
1016 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_suspend() local
1017 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_suspend()
1035 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_suspend()
1048 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_suspend()
1054 save->ctrl[ch] = readl_relaxed(sdma->base + in sirfsoc_dma_pm_suspend()
1057 save->interrupt_en = readl_relaxed(sdma->base + int_offset); in sirfsoc_dma_pm_suspend()
1067 struct sirfsoc_dma *sdma = dev_get_drvdata(dev); in sirfsoc_dma_pm_resume() local
1068 struct sirfsoc_dma_regs *save = &sdma->regs_save; in sirfsoc_dma_pm_resume()
1082 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1092 writel_relaxed(save->interrupt_en, sdma->base + int_offset); in sirfsoc_dma_pm_resume()
1094 schan = &sdma->channels[ch]; in sirfsoc_dma_pm_resume()
1101 sdma->base + width_offset + ch * 4); in sirfsoc_dma_pm_resume()
1103 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_XLEN); in sirfsoc_dma_pm_resume()
1105 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_YLEN); in sirfsoc_dma_pm_resume()
1107 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_CTRL); in sirfsoc_dma_pm_resume()
1108 if (sdma->type == SIRFSOC_DMA_VER_A7V2) { in sirfsoc_dma_pm_resume()
1110 sdma->base + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()
1113 sdma->base + ch * 0x10 + SIRFSOC_DMA_CH_ADDR); in sirfsoc_dma_pm_resume()