Lines Matching refs:mxs_chan
203 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_reset_chan() local
204 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_reset_chan()
205 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_reset_chan()
214 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE && in mxs_dma_reset_chan()
215 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_reset_chan()
216 mxs_chan->reset = true; in mxs_dma_reset_chan()
239 dev_err(&mxs_chan->mxs_dma->pdev->dev, in mxs_dma_reset_chan()
247 mxs_chan->status = DMA_COMPLETE; in mxs_dma_reset_chan()
252 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_enable_chan() local
253 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_enable_chan()
254 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_enable_chan()
257 writel(mxs_chan->ccw_phys, in mxs_dma_enable_chan()
261 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE && in mxs_dma_enable_chan()
262 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_enable_chan()
270 mxs_chan->reset = false; in mxs_dma_enable_chan()
275 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_disable_chan() local
277 mxs_chan->status = DMA_COMPLETE; in mxs_dma_disable_chan()
282 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_pause_chan() local
283 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_pause_chan()
284 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_pause_chan()
294 mxs_chan->status = DMA_PAUSED; in mxs_dma_pause_chan()
300 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_resume_chan() local
301 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_resume_chan()
302 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_resume_chan()
312 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_resume_chan()
323 struct mxs_dma_chan *mxs_chan = (struct mxs_dma_chan *) data; in mxs_dma_tasklet() local
325 dmaengine_desc_get_callback_invoke(&mxs_chan->desc, NULL); in mxs_dma_tasklet()
342 struct mxs_dma_chan *mxs_chan; in mxs_dma_int_handler() local
382 mxs_chan = &mxs_dma->mxs_chans[chan]; in mxs_dma_int_handler()
388 mxs_chan->status = DMA_ERROR; in mxs_dma_int_handler()
389 mxs_dma_reset_chan(&mxs_chan->chan); in mxs_dma_int_handler()
390 } else if (mxs_chan->status != DMA_COMPLETE) { in mxs_dma_int_handler()
391 if (mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_int_handler()
392 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_int_handler()
393 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE) in mxs_dma_int_handler()
397 mxs_chan->status = DMA_COMPLETE; in mxs_dma_int_handler()
401 if (mxs_chan->status == DMA_COMPLETE) { in mxs_dma_int_handler()
402 if (mxs_chan->reset) in mxs_dma_int_handler()
404 dma_cookie_complete(&mxs_chan->desc); in mxs_dma_int_handler()
408 tasklet_schedule(&mxs_chan->tasklet); in mxs_dma_int_handler()
415 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_alloc_chan_resources() local
416 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_alloc_chan_resources()
419 mxs_chan->ccw = dma_zalloc_coherent(mxs_dma->dma_device.dev, in mxs_dma_alloc_chan_resources()
421 &mxs_chan->ccw_phys, GFP_KERNEL); in mxs_dma_alloc_chan_resources()
422 if (!mxs_chan->ccw) { in mxs_dma_alloc_chan_resources()
427 ret = request_irq(mxs_chan->chan_irq, mxs_dma_int_handler, in mxs_dma_alloc_chan_resources()
438 dma_async_tx_descriptor_init(&mxs_chan->desc, chan); in mxs_dma_alloc_chan_resources()
439 mxs_chan->desc.tx_submit = mxs_dma_tx_submit; in mxs_dma_alloc_chan_resources()
442 async_tx_ack(&mxs_chan->desc); in mxs_dma_alloc_chan_resources()
447 free_irq(mxs_chan->chan_irq, mxs_dma); in mxs_dma_alloc_chan_resources()
450 mxs_chan->ccw, mxs_chan->ccw_phys); in mxs_dma_alloc_chan_resources()
457 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_free_chan_resources() local
458 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_free_chan_resources()
462 free_irq(mxs_chan->chan_irq, mxs_dma); in mxs_dma_free_chan_resources()
465 mxs_chan->ccw, mxs_chan->ccw_phys); in mxs_dma_free_chan_resources()
497 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_prep_slave_sg() local
498 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_prep_slave_sg()
504 int idx = append ? mxs_chan->desc_count : 0; in mxs_dma_prep_slave_sg()
506 if (mxs_chan->status == DMA_IN_PROGRESS && !append) in mxs_dma_prep_slave_sg()
516 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_prep_slave_sg()
517 mxs_chan->flags = 0; in mxs_dma_prep_slave_sg()
525 ccw = &mxs_chan->ccw[idx - 1]; in mxs_dma_prep_slave_sg()
526 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx; in mxs_dma_prep_slave_sg()
535 ccw = &mxs_chan->ccw[idx++]; in mxs_dma_prep_slave_sg()
558 ccw = &mxs_chan->ccw[idx++]; in mxs_dma_prep_slave_sg()
560 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx; in mxs_dma_prep_slave_sg()
581 mxs_chan->desc_count = idx; in mxs_dma_prep_slave_sg()
583 return &mxs_chan->desc; in mxs_dma_prep_slave_sg()
586 mxs_chan->status = DMA_ERROR; in mxs_dma_prep_slave_sg()
595 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_prep_dma_cyclic() local
596 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_prep_dma_cyclic()
600 if (mxs_chan->status == DMA_IN_PROGRESS) in mxs_dma_prep_dma_cyclic()
603 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_prep_dma_cyclic()
604 mxs_chan->flags |= MXS_DMA_SG_LOOP; in mxs_dma_prep_dma_cyclic()
605 mxs_chan->flags |= MXS_DMA_USE_SEMAPHORE; in mxs_dma_prep_dma_cyclic()
622 struct mxs_dma_ccw *ccw = &mxs_chan->ccw[i]; in mxs_dma_prep_dma_cyclic()
625 ccw->next = mxs_chan->ccw_phys; in mxs_dma_prep_dma_cyclic()
627 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * (i + 1); in mxs_dma_prep_dma_cyclic()
646 mxs_chan->desc_count = i; in mxs_dma_prep_dma_cyclic()
648 return &mxs_chan->desc; in mxs_dma_prep_dma_cyclic()
651 mxs_chan->status = DMA_ERROR; in mxs_dma_prep_dma_cyclic()
666 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_tx_status() local
667 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_tx_status()
670 if (mxs_chan->status == DMA_IN_PROGRESS && in mxs_dma_tx_status()
671 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_tx_status()
675 last_ccw = &mxs_chan->ccw[mxs_chan->desc_count - 1]; in mxs_dma_tx_status()
686 return mxs_chan->status; in mxs_dma_tx_status()
726 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_filter_fn() local
727 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_filter_fn()
740 mxs_chan->chan_irq = chan_irq; in mxs_dma_filter_fn()
810 struct mxs_dma_chan *mxs_chan = &mxs_dma->mxs_chans[i]; in mxs_dma_probe() local
812 mxs_chan->mxs_dma = mxs_dma; in mxs_dma_probe()
813 mxs_chan->chan.device = &mxs_dma->dma_device; in mxs_dma_probe()
814 dma_cookie_init(&mxs_chan->chan); in mxs_dma_probe()
816 tasklet_init(&mxs_chan->tasklet, mxs_dma_tasklet, in mxs_dma_probe()
817 (unsigned long) mxs_chan); in mxs_dma_probe()
821 list_add_tail(&mxs_chan->chan.device_node, in mxs_dma_probe()