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
85 chunk->ll_region.paddr = dw->ll_region_wr[chan->id].paddr; in dw_edma_alloc_chunk()
86 chunk->ll_region.vaddr = dw->ll_region_wr[chan->id].vaddr; in dw_edma_alloc_chunk()
88 chunk->ll_region.paddr = dw->ll_region_rd[chan->id].paddr; in dw_edma_alloc_chunk()
89 chunk->ll_region.vaddr = dw->ll_region_rd[chan->id].vaddr; in dw_edma_alloc_chunk()
604 struct dw_edma *dw = dw_irq->dw; in dw_edma_interrupt() local
610 total = dw->wr_ch_cnt; in dw_edma_interrupt()
614 total = dw->rd_ch_cnt; in dw_edma_interrupt()
615 off = dw->wr_ch_cnt; in dw_edma_interrupt()
619 val = dw_edma_v0_core_status_done_int(dw, write ? in dw_edma_interrupt()
624 struct dw_edma_chan *chan = &dw->chan[pos + off]; in dw_edma_interrupt()
629 val = dw_edma_v0_core_status_abort_int(dw, write ? in dw_edma_interrupt()
634 struct dw_edma_chan *chan = &dw->chan[pos + off]; in dw_edma_interrupt()
697 struct dw_edma *dw = chip->dw; in dw_edma_channel_setup() local
708 cnt = dw->wr_ch_cnt; in dw_edma_channel_setup()
709 dma = &dw->wr_edma; in dw_edma_channel_setup()
713 i = dw->wr_ch_cnt; in dw_edma_channel_setup()
714 cnt = dw->rd_ch_cnt; in dw_edma_channel_setup()
715 dma = &dw->rd_edma; in dw_edma_channel_setup()
721 for (j = 0; (alloc || dw->nr_irqs == 1) && j < cnt; j++, i++) { in dw_edma_channel_setup()
722 chan = &dw->chan[i]; in dw_edma_channel_setup()
738 chan->ll_max = (dw->ll_region_wr[j].sz / EDMA_LL_SZ); in dw_edma_channel_setup()
740 chan->ll_max = (dw->ll_region_rd[j].sz / EDMA_LL_SZ); in dw_edma_channel_setup()
746 if (dw->nr_irqs == 1) in dw_edma_channel_setup()
751 irq = &dw->irq[pos]; in dw_edma_channel_setup()
758 irq->dw = dw; in dw_edma_channel_setup()
770 dt_region->paddr = dw->dt_region_wr[j].paddr; in dw_edma_channel_setup()
771 dt_region->vaddr = dw->dt_region_wr[j].vaddr; in dw_edma_channel_setup()
772 dt_region->sz = dw->dt_region_wr[j].sz; in dw_edma_channel_setup()
774 dt_region->paddr = dw->dt_region_rd[j].paddr; in dw_edma_channel_setup()
775 dt_region->vaddr = dw->dt_region_rd[j].vaddr; in dw_edma_channel_setup()
776 dt_region->sz = dw->dt_region_rd[j].sz; in dw_edma_channel_setup()
834 struct dw_edma *dw = chip->dw; in dw_edma_irq_request() local
841 ch_cnt = dw->wr_ch_cnt + dw->rd_ch_cnt; in dw_edma_irq_request()
843 if (dw->nr_irqs < 1) in dw_edma_irq_request()
846 if (dw->nr_irqs == 1) { in dw_edma_irq_request()
848 irq = dw->ops->irq_vector(dev, 0); in dw_edma_irq_request()
850 IRQF_SHARED, dw->name, &dw->irq[0]); in dw_edma_irq_request()
852 dw->nr_irqs = 0; in dw_edma_irq_request()
857 get_cached_msi_msg(irq, &dw->irq[0].msi); in dw_edma_irq_request()
860 int tmp = dw->nr_irqs; in dw_edma_irq_request()
863 dw_edma_dec_irq_alloc(&tmp, wr_alloc, dw->wr_ch_cnt); in dw_edma_irq_request()
864 dw_edma_dec_irq_alloc(&tmp, rd_alloc, dw->rd_ch_cnt); in dw_edma_irq_request()
867 dw_edma_add_irq_mask(&wr_mask, *wr_alloc, dw->wr_ch_cnt); in dw_edma_irq_request()
868 dw_edma_add_irq_mask(&rd_mask, *rd_alloc, dw->rd_ch_cnt); in dw_edma_irq_request()
871 irq = dw->ops->irq_vector(dev, i); in dw_edma_irq_request()
876 IRQF_SHARED, dw->name, in dw_edma_irq_request()
877 &dw->irq[i]); in dw_edma_irq_request()
879 dw->nr_irqs = i; in dw_edma_irq_request()
884 get_cached_msi_msg(irq, &dw->irq[i].msi); in dw_edma_irq_request()
887 dw->nr_irqs = i; in dw_edma_irq_request()
896 struct dw_edma *dw; in dw_edma_probe() local
908 dw = chip->dw; in dw_edma_probe()
909 if (!dw || !dw->irq || !dw->ops || !dw->ops->irq_vector) in dw_edma_probe()
912 raw_spin_lock_init(&dw->lock); in dw_edma_probe()
914 dw->wr_ch_cnt = min_t(u16, dw->wr_ch_cnt, in dw_edma_probe()
915 dw_edma_v0_core_ch_count(dw, EDMA_DIR_WRITE)); in dw_edma_probe()
916 dw->wr_ch_cnt = min_t(u16, dw->wr_ch_cnt, EDMA_MAX_WR_CH); in dw_edma_probe()
918 dw->rd_ch_cnt = min_t(u16, dw->rd_ch_cnt, in dw_edma_probe()
919 dw_edma_v0_core_ch_count(dw, EDMA_DIR_READ)); in dw_edma_probe()
920 dw->rd_ch_cnt = min_t(u16, dw->rd_ch_cnt, EDMA_MAX_RD_CH); in dw_edma_probe()
922 if (!dw->wr_ch_cnt && !dw->rd_ch_cnt) in dw_edma_probe()
926 dw->wr_ch_cnt, dw->rd_ch_cnt); in dw_edma_probe()
929 dw->chan = devm_kcalloc(dev, dw->wr_ch_cnt + dw->rd_ch_cnt, in dw_edma_probe()
930 sizeof(*dw->chan), GFP_KERNEL); in dw_edma_probe()
931 if (!dw->chan) in dw_edma_probe()
934 snprintf(dw->name, sizeof(dw->name), "dw-edma-core:%d", chip->id); in dw_edma_probe()
937 dw_edma_v0_core_off(dw); in dw_edma_probe()
963 for (i = (dw->nr_irqs - 1); i >= 0; i--) in dw_edma_probe()
964 free_irq(dw->ops->irq_vector(dev, i), &dw->irq[i]); in dw_edma_probe()
966 dw->nr_irqs = 0; in dw_edma_probe()
976 struct dw_edma *dw = chip->dw; in dw_edma_remove() local
980 dw_edma_v0_core_off(dw); in dw_edma_remove()
983 for (i = (dw->nr_irqs - 1); i >= 0; i--) in dw_edma_remove()
984 free_irq(dw->ops->irq_vector(dev, i), &dw->irq[i]); in dw_edma_remove()
990 dma_async_device_unregister(&dw->wr_edma); in dw_edma_remove()
991 list_for_each_entry_safe(chan, _chan, &dw->wr_edma.channels, in dw_edma_remove()
997 dma_async_device_unregister(&dw->rd_edma); in dw_edma_remove()
998 list_for_each_entry_safe(chan, _chan, &dw->rd_edma.channels, in dw_edma_remove()