Lines Matching full:dw
20 #include "dw-edma-core.h"
21 #include "dw-edma-v0-core.h"
68 struct dw_edma *dw = chan->chip->dw; in dw_edma_alloc_chunk() local
84 chunk->ll_region.paddr = dw->ll_region.paddr + chan->ll_off; in dw_edma_alloc_chunk()
85 chunk->ll_region.vaddr = dw->ll_region.vaddr + chan->ll_off; in dw_edma_alloc_chunk()
550 struct dw_edma *dw = dw_irq->dw; in dw_edma_interrupt() local
556 total = dw->wr_ch_cnt; in dw_edma_interrupt()
560 total = dw->rd_ch_cnt; in dw_edma_interrupt()
561 off = dw->wr_ch_cnt; in dw_edma_interrupt()
565 val = dw_edma_v0_core_status_done_int(dw, write ? in dw_edma_interrupt()
570 struct dw_edma_chan *chan = &dw->chan[pos + off]; in dw_edma_interrupt()
575 val = dw_edma_v0_core_status_abort_int(dw, write ? in dw_edma_interrupt()
580 struct dw_edma_chan *chan = &dw->chan[pos + off]; in dw_edma_interrupt()
643 struct dw_edma *dw = chip->dw; in dw_edma_channel_setup() local
653 ch_cnt = dw->wr_ch_cnt + dw->rd_ch_cnt; in dw_edma_channel_setup()
654 ll_chunk = dw->ll_region.sz; in dw_edma_channel_setup()
655 dt_chunk = dw->dt_region.sz; in dw_edma_channel_setup()
665 cnt = dw->wr_ch_cnt; in dw_edma_channel_setup()
666 dma = &dw->wr_edma; in dw_edma_channel_setup()
670 i = dw->wr_ch_cnt; in dw_edma_channel_setup()
671 cnt = dw->rd_ch_cnt; in dw_edma_channel_setup()
672 dma = &dw->rd_edma; in dw_edma_channel_setup()
678 for (j = 0; (alloc || dw->nr_irqs == 1) && j < cnt; j++, i++) { in dw_edma_channel_setup()
679 chan = &dw->chan[i]; in dw_edma_channel_setup()
703 if (dw->nr_irqs == 1) in dw_edma_channel_setup()
708 irq = &dw->irq[pos]; in dw_edma_channel_setup()
715 irq->dw = dw; in dw_edma_channel_setup()
726 dt_region->paddr = dw->dt_region.paddr + chan->dt_off; in dw_edma_channel_setup()
727 dt_region->vaddr = dw->dt_region.vaddr + chan->dt_off; in dw_edma_channel_setup()
786 struct dw_edma *dw = chip->dw; in dw_edma_irq_request() local
793 ch_cnt = dw->wr_ch_cnt + dw->rd_ch_cnt; in dw_edma_irq_request()
795 if (dw->nr_irqs < 1) in dw_edma_irq_request()
798 if (dw->nr_irqs == 1) { in dw_edma_irq_request()
800 irq = dw->ops->irq_vector(dev, 0); in dw_edma_irq_request()
802 IRQF_SHARED, dw->name, &dw->irq[0]); in dw_edma_irq_request()
804 dw->nr_irqs = 0; in dw_edma_irq_request()
809 get_cached_msi_msg(irq, &dw->irq[0].msi); in dw_edma_irq_request()
812 int tmp = dw->nr_irqs; in dw_edma_irq_request()
815 dw_edma_dec_irq_alloc(&tmp, wr_alloc, dw->wr_ch_cnt); in dw_edma_irq_request()
816 dw_edma_dec_irq_alloc(&tmp, rd_alloc, dw->rd_ch_cnt); in dw_edma_irq_request()
819 dw_edma_add_irq_mask(&wr_mask, *wr_alloc, dw->wr_ch_cnt); in dw_edma_irq_request()
820 dw_edma_add_irq_mask(&rd_mask, *rd_alloc, dw->rd_ch_cnt); in dw_edma_irq_request()
823 irq = dw->ops->irq_vector(dev, i); in dw_edma_irq_request()
828 IRQF_SHARED, dw->name, in dw_edma_irq_request()
829 &dw->irq[i]); in dw_edma_irq_request()
831 dw->nr_irqs = i; in dw_edma_irq_request()
836 get_cached_msi_msg(irq, &dw->irq[i].msi); in dw_edma_irq_request()
839 dw->nr_irqs = i; in dw_edma_irq_request()
848 struct dw_edma *dw; in dw_edma_probe() local
860 dw = chip->dw; in dw_edma_probe()
861 if (!dw || !dw->irq || !dw->ops || !dw->ops->irq_vector) in dw_edma_probe()
864 raw_spin_lock_init(&dw->lock); in dw_edma_probe()
867 dw->wr_ch_cnt = dw_edma_v0_core_ch_count(dw, EDMA_DIR_WRITE); in dw_edma_probe()
868 if (!dw->wr_ch_cnt) in dw_edma_probe()
872 dw->rd_ch_cnt = dw_edma_v0_core_ch_count(dw, EDMA_DIR_READ); in dw_edma_probe()
873 if (!dw->rd_ch_cnt) in dw_edma_probe()
877 dw->wr_ch_cnt, dw->rd_ch_cnt); in dw_edma_probe()
880 dw->chan = devm_kcalloc(dev, dw->wr_ch_cnt + dw->rd_ch_cnt, in dw_edma_probe()
881 sizeof(*dw->chan), GFP_KERNEL); in dw_edma_probe()
882 if (!dw->chan) in dw_edma_probe()
885 snprintf(dw->name, sizeof(dw->name), "dw-edma-core:%d", chip->id); in dw_edma_probe()
888 dw_edma_v0_core_off(dw); in dw_edma_probe()
914 for (i = (dw->nr_irqs - 1); i >= 0; i--) in dw_edma_probe()
915 free_irq(dw->ops->irq_vector(dev, i), &dw->irq[i]); in dw_edma_probe()
917 dw->nr_irqs = 0; in dw_edma_probe()
927 struct dw_edma *dw = chip->dw; in dw_edma_remove() local
931 dw_edma_v0_core_off(dw); in dw_edma_remove()
934 for (i = (dw->nr_irqs - 1); i >= 0; i--) in dw_edma_remove()
935 free_irq(dw->ops->irq_vector(dev, i), &dw->irq[i]); in dw_edma_remove()
940 list_for_each_entry_safe(chan, _chan, &dw->wr_edma.channels, in dw_edma_remove()
946 list_for_each_entry_safe(chan, _chan, &dw->rd_edma.channels, in dw_edma_remove()
953 dma_async_device_unregister(&dw->wr_edma); in dw_edma_remove()
954 dma_async_device_unregister(&dw->rd_edma); in dw_edma_remove()