Lines Matching refs:mxs_chan
207 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_reset_chan() local
208 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_reset_chan()
209 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_reset_chan()
218 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE && in mxs_dma_reset_chan()
219 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_reset_chan()
220 mxs_chan->reset = true; in mxs_dma_reset_chan()
243 dev_err(&mxs_chan->mxs_dma->pdev->dev, in mxs_dma_reset_chan()
251 mxs_chan->status = DMA_COMPLETE; in mxs_dma_reset_chan()
256 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_enable_chan() local
257 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_enable_chan()
258 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_enable_chan()
261 writel(mxs_chan->ccw_phys, in mxs_dma_enable_chan()
265 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE && in mxs_dma_enable_chan()
266 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_enable_chan()
274 mxs_chan->reset = false; in mxs_dma_enable_chan()
279 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_disable_chan() local
281 mxs_chan->status = DMA_COMPLETE; in mxs_dma_disable_chan()
286 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_pause_chan() local
287 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_pause_chan()
288 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_pause_chan()
298 mxs_chan->status = DMA_PAUSED; in mxs_dma_pause_chan()
304 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_resume_chan() local
305 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_resume_chan()
306 int chan_id = mxs_chan->chan.chan_id; in mxs_dma_resume_chan()
316 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_resume_chan()
327 struct mxs_dma_chan *mxs_chan = (struct mxs_dma_chan *) data; in mxs_dma_tasklet() local
329 if (mxs_chan->desc.callback) in mxs_dma_tasklet()
330 mxs_chan->desc.callback(mxs_chan->desc.callback_param); in mxs_dma_tasklet()
347 struct mxs_dma_chan *mxs_chan; in mxs_dma_int_handler() local
387 mxs_chan = &mxs_dma->mxs_chans[chan]; in mxs_dma_int_handler()
393 mxs_chan->status = DMA_ERROR; in mxs_dma_int_handler()
394 mxs_dma_reset_chan(&mxs_chan->chan); in mxs_dma_int_handler()
395 } else if (mxs_chan->status != DMA_COMPLETE) { in mxs_dma_int_handler()
396 if (mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_int_handler()
397 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_int_handler()
398 if (mxs_chan->flags & MXS_DMA_USE_SEMAPHORE) in mxs_dma_int_handler()
402 mxs_chan->status = DMA_COMPLETE; in mxs_dma_int_handler()
406 if (mxs_chan->status == DMA_COMPLETE) { in mxs_dma_int_handler()
407 if (mxs_chan->reset) in mxs_dma_int_handler()
409 dma_cookie_complete(&mxs_chan->desc); in mxs_dma_int_handler()
413 tasklet_schedule(&mxs_chan->tasklet); in mxs_dma_int_handler()
420 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_alloc_chan_resources() local
421 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_alloc_chan_resources()
424 mxs_chan->ccw = dma_zalloc_coherent(mxs_dma->dma_device.dev, in mxs_dma_alloc_chan_resources()
426 &mxs_chan->ccw_phys, GFP_KERNEL); in mxs_dma_alloc_chan_resources()
427 if (!mxs_chan->ccw) { in mxs_dma_alloc_chan_resources()
432 if (mxs_chan->chan_irq != NO_IRQ) { in mxs_dma_alloc_chan_resources()
433 ret = request_irq(mxs_chan->chan_irq, mxs_dma_int_handler, in mxs_dma_alloc_chan_resources()
445 dma_async_tx_descriptor_init(&mxs_chan->desc, chan); in mxs_dma_alloc_chan_resources()
446 mxs_chan->desc.tx_submit = mxs_dma_tx_submit; in mxs_dma_alloc_chan_resources()
449 async_tx_ack(&mxs_chan->desc); in mxs_dma_alloc_chan_resources()
454 free_irq(mxs_chan->chan_irq, mxs_dma); in mxs_dma_alloc_chan_resources()
457 mxs_chan->ccw, mxs_chan->ccw_phys); in mxs_dma_alloc_chan_resources()
464 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_free_chan_resources() local
465 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_free_chan_resources()
469 free_irq(mxs_chan->chan_irq, mxs_dma); in mxs_dma_free_chan_resources()
472 mxs_chan->ccw, mxs_chan->ccw_phys); in mxs_dma_free_chan_resources()
504 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_prep_slave_sg() local
505 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_prep_slave_sg()
511 int idx = append ? mxs_chan->desc_count : 0; in mxs_dma_prep_slave_sg()
513 if (mxs_chan->status == DMA_IN_PROGRESS && !append) in mxs_dma_prep_slave_sg()
523 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_prep_slave_sg()
524 mxs_chan->flags = 0; in mxs_dma_prep_slave_sg()
532 ccw = &mxs_chan->ccw[idx - 1]; in mxs_dma_prep_slave_sg()
533 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx; in mxs_dma_prep_slave_sg()
542 ccw = &mxs_chan->ccw[idx++]; in mxs_dma_prep_slave_sg()
565 ccw = &mxs_chan->ccw[idx++]; in mxs_dma_prep_slave_sg()
567 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * idx; in mxs_dma_prep_slave_sg()
588 mxs_chan->desc_count = idx; in mxs_dma_prep_slave_sg()
590 return &mxs_chan->desc; in mxs_dma_prep_slave_sg()
593 mxs_chan->status = DMA_ERROR; in mxs_dma_prep_slave_sg()
602 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_prep_dma_cyclic() local
603 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_prep_dma_cyclic()
607 if (mxs_chan->status == DMA_IN_PROGRESS) in mxs_dma_prep_dma_cyclic()
610 mxs_chan->status = DMA_IN_PROGRESS; in mxs_dma_prep_dma_cyclic()
611 mxs_chan->flags |= MXS_DMA_SG_LOOP; in mxs_dma_prep_dma_cyclic()
612 mxs_chan->flags |= MXS_DMA_USE_SEMAPHORE; in mxs_dma_prep_dma_cyclic()
629 struct mxs_dma_ccw *ccw = &mxs_chan->ccw[i]; in mxs_dma_prep_dma_cyclic()
632 ccw->next = mxs_chan->ccw_phys; in mxs_dma_prep_dma_cyclic()
634 ccw->next = mxs_chan->ccw_phys + sizeof(*ccw) * (i + 1); in mxs_dma_prep_dma_cyclic()
653 mxs_chan->desc_count = i; in mxs_dma_prep_dma_cyclic()
655 return &mxs_chan->desc; in mxs_dma_prep_dma_cyclic()
658 mxs_chan->status = DMA_ERROR; in mxs_dma_prep_dma_cyclic()
673 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_tx_status() local
674 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_tx_status()
677 if (mxs_chan->status == DMA_IN_PROGRESS && in mxs_dma_tx_status()
678 mxs_chan->flags & MXS_DMA_SG_LOOP) { in mxs_dma_tx_status()
682 last_ccw = &mxs_chan->ccw[mxs_chan->desc_count - 1]; in mxs_dma_tx_status()
693 return mxs_chan->status; in mxs_dma_tx_status()
733 struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); in mxs_dma_filter_fn() local
734 struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; in mxs_dma_filter_fn()
747 mxs_chan->chan_irq = chan_irq; in mxs_dma_filter_fn()
817 struct mxs_dma_chan *mxs_chan = &mxs_dma->mxs_chans[i]; in mxs_dma_probe() local
819 mxs_chan->mxs_dma = mxs_dma; in mxs_dma_probe()
820 mxs_chan->chan.device = &mxs_dma->dma_device; in mxs_dma_probe()
821 dma_cookie_init(&mxs_chan->chan); in mxs_dma_probe()
823 tasklet_init(&mxs_chan->tasklet, mxs_dma_tasklet, in mxs_dma_probe()
824 (unsigned long) mxs_chan); in mxs_dma_probe()
828 list_add_tail(&mxs_chan->chan.device_node, in mxs_dma_probe()