echan 149 drivers/dma/fsl-edma-common.c dma_pool_free(fsl_desc->echan->tcd_pool, fsl_desc->tcd[i].vtcd, echan 424 drivers/dma/fsl-edma-common.c fsl_desc->echan = fsl_chan; echan 133 drivers/dma/fsl-edma-common.h struct fsl_edma_chan *echan; echan 186 drivers/dma/ti/edma.c struct edma_chan *echan; echan 435 drivers/dma/ti/edma.c static void edma_set_chmap(struct edma_chan *echan, int slot) echan 437 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 438 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 446 drivers/dma/ti/edma.c static void edma_setup_interrupt(struct edma_chan *echan, bool enable) echan 448 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 449 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 591 drivers/dma/ti/edma.c static void edma_start(struct edma_chan *echan) echan 593 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 594 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 598 drivers/dma/ti/edma.c if (!echan->hw_triggered) { echan 618 drivers/dma/ti/edma.c static void edma_stop(struct edma_chan *echan) echan 620 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 621 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 645 drivers/dma/ti/edma.c static void edma_pause(struct edma_chan *echan) echan 647 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 649 drivers/dma/ti/edma.c edma_shadow0_write_array(echan->ecc, SH_EECR, echan 655 drivers/dma/ti/edma.c static void edma_resume(struct edma_chan *echan) echan 657 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 659 drivers/dma/ti/edma.c edma_shadow0_write_array(echan->ecc, SH_EESR, echan 664 drivers/dma/ti/edma.c static void edma_trigger_channel(struct edma_chan *echan) echan 666 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 667 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 677 drivers/dma/ti/edma.c static void edma_clean_channel(struct edma_chan *echan) echan 679 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 680 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 695 drivers/dma/ti/edma.c static void edma_assign_channel_eventq(struct edma_chan *echan, echan 698 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 699 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 713 drivers/dma/ti/edma.c static int edma_alloc_channel(struct edma_chan *echan, echan 716 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 717 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 724 drivers/dma/ti/edma.c edma_stop(echan); echan 726 drivers/dma/ti/edma.c edma_setup_interrupt(echan, true); echan 728 drivers/dma/ti/edma.c edma_assign_channel_eventq(echan, eventq_no); echan 733 drivers/dma/ti/edma.c static void edma_free_channel(struct edma_chan *echan) echan 736 drivers/dma/ti/edma.c edma_stop(echan); echan 738 drivers/dma/ti/edma.c edma_setup_interrupt(echan, false); echan 762 drivers/dma/ti/edma.c static void edma_execute(struct edma_chan *echan) echan 764 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 767 drivers/dma/ti/edma.c struct device *dev = echan->vchan.chan.device->dev; echan 770 drivers/dma/ti/edma.c if (!echan->edesc) { echan 772 drivers/dma/ti/edma.c vdesc = vchan_next_desc(&echan->vchan); echan 776 drivers/dma/ti/edma.c echan->edesc = to_edma_desc(&vdesc->tx); echan 779 drivers/dma/ti/edma.c edesc = echan->edesc; echan 789 drivers/dma/ti/edma.c edma_write_slot(ecc, echan->slot[i], &edesc->pset[j].param); echan 803 drivers/dma/ti/edma.c j, echan->ch_num, echan->slot[i], echan 814 drivers/dma/ti/edma.c edma_link(ecc, echan->slot[i], echan->slot[i + 1]); echan 826 drivers/dma/ti/edma.c edma_link(ecc, echan->slot[nslots - 1], echan->slot[1]); echan 828 drivers/dma/ti/edma.c edma_link(ecc, echan->slot[nslots - 1], echan 829 drivers/dma/ti/edma.c echan->ecc->dummy_slot); echan 832 drivers/dma/ti/edma.c if (echan->missed) { echan 838 drivers/dma/ti/edma.c dev_dbg(dev, "missed event on channel %d\n", echan->ch_num); echan 839 drivers/dma/ti/edma.c edma_clean_channel(echan); echan 840 drivers/dma/ti/edma.c edma_stop(echan); echan 841 drivers/dma/ti/edma.c edma_start(echan); echan 842 drivers/dma/ti/edma.c edma_trigger_channel(echan); echan 843 drivers/dma/ti/edma.c echan->missed = 0; echan 846 drivers/dma/ti/edma.c echan->ch_num); echan 847 drivers/dma/ti/edma.c edma_start(echan); echan 850 drivers/dma/ti/edma.c echan->ch_num, edesc->processed); echan 851 drivers/dma/ti/edma.c edma_resume(echan); echan 857 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 861 drivers/dma/ti/edma.c spin_lock_irqsave(&echan->vchan.lock, flags); echan 868 drivers/dma/ti/edma.c if (echan->edesc) { echan 869 drivers/dma/ti/edma.c edma_stop(echan); echan 871 drivers/dma/ti/edma.c if (!echan->tc && echan->edesc->cyclic) echan 872 drivers/dma/ti/edma.c edma_assign_channel_eventq(echan, EVENTQ_DEFAULT); echan 874 drivers/dma/ti/edma.c vchan_terminate_vdesc(&echan->edesc->vdesc); echan 875 drivers/dma/ti/edma.c echan->edesc = NULL; echan 878 drivers/dma/ti/edma.c vchan_get_all_descriptors(&echan->vchan, &head); echan 879 drivers/dma/ti/edma.c spin_unlock_irqrestore(&echan->vchan.lock, flags); echan 880 drivers/dma/ti/edma.c vchan_dma_desc_free_list(&echan->vchan, &head); echan 887 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 889 drivers/dma/ti/edma.c vchan_synchronize(&echan->vchan); echan 895 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 905 drivers/dma/ti/edma.c memcpy(&echan->cfg, cfg, sizeof(echan->cfg)); echan 912 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 914 drivers/dma/ti/edma.c if (!echan->edesc) echan 917 drivers/dma/ti/edma.c edma_pause(echan); echan 923 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 925 drivers/dma/ti/edma.c edma_resume(echan); echan 945 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1030 drivers/dma/ti/edma.c param->opt = EDMA_TCC(EDMA_CHAN_SLOT(echan->ch_num)); echan 1058 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1067 drivers/dma/ti/edma.c if (unlikely(!echan || !sgl || !sg_len)) echan 1071 drivers/dma/ti/edma.c src_addr = echan->cfg.src_addr; echan 1072 drivers/dma/ti/edma.c dev_width = echan->cfg.src_addr_width; echan 1073 drivers/dma/ti/edma.c burst = echan->cfg.src_maxburst; echan 1075 drivers/dma/ti/edma.c dst_addr = echan->cfg.dst_addr; echan 1076 drivers/dma/ti/edma.c dev_width = echan->cfg.dst_addr_width; echan 1077 drivers/dma/ti/edma.c burst = echan->cfg.dst_maxburst; echan 1095 drivers/dma/ti/edma.c edesc->echan = echan; echan 1101 drivers/dma/ti/edma.c if (echan->slot[i] < 0) { echan 1102 drivers/dma/ti/edma.c echan->slot[i] = echan 1103 drivers/dma/ti/edma.c edma_alloc_slot(echan->ecc, EDMA_SLOT_ANY); echan 1104 drivers/dma/ti/edma.c if (echan->slot[i] < 0) { echan 1146 drivers/dma/ti/edma.c return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); echan 1156 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1159 drivers/dma/ti/edma.c if (unlikely(!echan || !len)) echan 1212 drivers/dma/ti/edma.c edesc->echan = echan; echan 1232 drivers/dma/ti/edma.c if (echan->slot[1] < 0) { echan 1233 drivers/dma/ti/edma.c echan->slot[1] = edma_alloc_slot(echan->ecc, echan 1235 drivers/dma/ti/edma.c if (echan->slot[1] < 0) { echan 1262 drivers/dma/ti/edma.c return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); echan 1270 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1279 drivers/dma/ti/edma.c if (unlikely(!echan || !buf_len || !period_len)) echan 1283 drivers/dma/ti/edma.c src_addr = echan->cfg.src_addr; echan 1285 drivers/dma/ti/edma.c dev_width = echan->cfg.src_addr_width; echan 1286 drivers/dma/ti/edma.c burst = echan->cfg.src_maxburst; echan 1289 drivers/dma/ti/edma.c dst_addr = echan->cfg.dst_addr; echan 1290 drivers/dma/ti/edma.c dev_width = echan->cfg.dst_addr_width; echan 1291 drivers/dma/ti/edma.c burst = echan->cfg.dst_maxburst; echan 1341 drivers/dma/ti/edma.c edesc->echan = echan; echan 1344 drivers/dma/ti/edma.c __func__, echan->ch_num, nslots, period_len, buf_len); echan 1348 drivers/dma/ti/edma.c if (echan->slot[i] < 0) { echan 1349 drivers/dma/ti/edma.c echan->slot[i] = echan 1350 drivers/dma/ti/edma.c edma_alloc_slot(echan->ecc, EDMA_SLOT_ANY); echan 1351 drivers/dma/ti/edma.c if (echan->slot[i] < 0) { echan 1391 drivers/dma/ti/edma.c i, echan->ch_num, echan->slot[i], echan 1416 drivers/dma/ti/edma.c if (!echan->tc) echan 1417 drivers/dma/ti/edma.c edma_assign_channel_eventq(echan, EVENTQ_0); echan 1419 drivers/dma/ti/edma.c return vchan_tx_prep(&echan->vchan, &edesc->vdesc, tx_flags); echan 1422 drivers/dma/ti/edma.c static void edma_completion_handler(struct edma_chan *echan) echan 1424 drivers/dma/ti/edma.c struct device *dev = echan->vchan.chan.device->dev; echan 1427 drivers/dma/ti/edma.c spin_lock(&echan->vchan.lock); echan 1428 drivers/dma/ti/edma.c edesc = echan->edesc; echan 1432 drivers/dma/ti/edma.c spin_unlock(&echan->vchan.lock); echan 1436 drivers/dma/ti/edma.c edma_stop(echan); echan 1438 drivers/dma/ti/edma.c echan->edesc = NULL; echan 1441 drivers/dma/ti/edma.c echan->ch_num); echan 1444 drivers/dma/ti/edma.c echan->ch_num); echan 1446 drivers/dma/ti/edma.c edma_pause(echan); echan 1453 drivers/dma/ti/edma.c edma_execute(echan); echan 1456 drivers/dma/ti/edma.c spin_unlock(&echan->vchan.lock); echan 1505 drivers/dma/ti/edma.c static void edma_error_handler(struct edma_chan *echan) echan 1507 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 1508 drivers/dma/ti/edma.c struct device *dev = echan->vchan.chan.device->dev; echan 1512 drivers/dma/ti/edma.c if (!echan->edesc) echan 1515 drivers/dma/ti/edma.c spin_lock(&echan->vchan.lock); echan 1517 drivers/dma/ti/edma.c err = edma_read_slot(ecc, echan->slot[0], &p); echan 1533 drivers/dma/ti/edma.c echan->missed = 1; echan 1540 drivers/dma/ti/edma.c edma_clean_channel(echan); echan 1541 drivers/dma/ti/edma.c edma_stop(echan); echan 1542 drivers/dma/ti/edma.c edma_start(echan); echan 1543 drivers/dma/ti/edma.c edma_trigger_channel(echan); echan 1545 drivers/dma/ti/edma.c spin_unlock(&echan->vchan.lock); echan 1637 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1638 drivers/dma/ti/edma.c struct edma_cc *ecc = echan->ecc; echan 1643 drivers/dma/ti/edma.c if (echan->tc) { echan 1644 drivers/dma/ti/edma.c eventq_no = echan->tc->id; echan 1647 drivers/dma/ti/edma.c echan->tc = &ecc->tc_list[ecc->info->default_queue]; echan 1648 drivers/dma/ti/edma.c eventq_no = echan->tc->id; echan 1651 drivers/dma/ti/edma.c ret = edma_alloc_channel(echan, eventq_no); echan 1655 drivers/dma/ti/edma.c echan->slot[0] = edma_alloc_slot(ecc, echan->ch_num); echan 1656 drivers/dma/ti/edma.c if (echan->slot[0] < 0) { echan 1658 drivers/dma/ti/edma.c EDMA_CHAN_SLOT(echan->ch_num)); echan 1659 drivers/dma/ti/edma.c ret = echan->slot[0]; echan 1664 drivers/dma/ti/edma.c edma_set_chmap(echan, echan->slot[0]); echan 1665 drivers/dma/ti/edma.c echan->alloced = true; echan 1668 drivers/dma/ti/edma.c EDMA_CHAN_SLOT(echan->ch_num), chan->chan_id, echan 1669 drivers/dma/ti/edma.c echan->hw_triggered ? "HW" : "SW"); echan 1674 drivers/dma/ti/edma.c edma_free_channel(echan); echan 1681 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1682 drivers/dma/ti/edma.c struct device *dev = echan->ecc->dev; echan 1686 drivers/dma/ti/edma.c edma_stop(echan); echan 1688 drivers/dma/ti/edma.c vchan_free_chan_resources(&echan->vchan); echan 1692 drivers/dma/ti/edma.c if (echan->slot[i] >= 0) { echan 1693 drivers/dma/ti/edma.c edma_free_slot(echan->ecc, echan->slot[i]); echan 1694 drivers/dma/ti/edma.c echan->slot[i] = -1; echan 1699 drivers/dma/ti/edma.c edma_set_chmap(echan, echan->ecc->dummy_slot); echan 1702 drivers/dma/ti/edma.c if (echan->alloced) { echan 1703 drivers/dma/ti/edma.c edma_free_channel(echan); echan 1704 drivers/dma/ti/edma.c echan->alloced = false; echan 1707 drivers/dma/ti/edma.c echan->tc = NULL; echan 1708 drivers/dma/ti/edma.c echan->hw_triggered = false; echan 1711 drivers/dma/ti/edma.c EDMA_CHAN_SLOT(echan->ch_num), chan->chan_id); echan 1717 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1720 drivers/dma/ti/edma.c spin_lock_irqsave(&echan->vchan.lock, flags); echan 1721 drivers/dma/ti/edma.c if (vchan_issue_pending(&echan->vchan) && !echan->edesc) echan 1722 drivers/dma/ti/edma.c edma_execute(echan); echan 1723 drivers/dma/ti/edma.c spin_unlock_irqrestore(&echan->vchan.lock, flags); echan 1739 drivers/dma/ti/edma.c struct edma_chan *echan = edesc->echan; echan 1742 drivers/dma/ti/edma.c int channel = EDMA_CHAN_SLOT(echan->ch_num); echan 1752 drivers/dma/ti/edma.c pos = edma_get_position(echan->ecc, echan->slot[0], dst); echan 1768 drivers/dma/ti/edma.c while (edma_shadow0_read_array(echan->ecc, event_reg, idx) & ch_bit) { echan 1769 drivers/dma/ti/edma.c pos = edma_get_position(echan->ecc, echan->slot[0], dst); echan 1774 drivers/dma/ti/edma.c dev_dbg_ratelimited(echan->vchan.chan.device->dev, echan 1829 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 1843 drivers/dma/ti/edma.c spin_lock_irqsave(&echan->vchan.lock, flags); echan 1844 drivers/dma/ti/edma.c if (echan->edesc && echan->edesc->vdesc.tx.cookie == cookie) { echan 1845 drivers/dma/ti/edma.c txstate->residue = edma_residue(echan->edesc); echan 1847 drivers/dma/ti/edma.c struct virt_dma_desc *vdesc = vchan_find_desc(&echan->vchan, echan 1861 drivers/dma/ti/edma.c echan->edesc && echan->edesc->polled && echan 1862 drivers/dma/ti/edma.c echan->edesc->vdesc.tx.cookie == cookie) { echan 1863 drivers/dma/ti/edma.c edma_stop(echan); echan 1864 drivers/dma/ti/edma.c vchan_cookie_complete(&echan->edesc->vdesc); echan 1865 drivers/dma/ti/edma.c echan->edesc = NULL; echan 1866 drivers/dma/ti/edma.c edma_execute(echan); echan 1870 drivers/dma/ti/edma.c spin_unlock_irqrestore(&echan->vchan.lock, flags); echan 1968 drivers/dma/ti/edma.c struct edma_chan *echan = &ecc->slave_chans[i]; echan 1969 drivers/dma/ti/edma.c echan->ch_num = EDMA_CTLR_CHAN(ecc->id, i); echan 1970 drivers/dma/ti/edma.c echan->ecc = ecc; echan 1971 drivers/dma/ti/edma.c echan->vchan.desc_free = edma_desc_free; echan 1974 drivers/dma/ti/edma.c vchan_init(&echan->vchan, m_ddev); echan 1976 drivers/dma/ti/edma.c vchan_init(&echan->vchan, s_ddev); echan 1978 drivers/dma/ti/edma.c INIT_LIST_HEAD(&echan->node); echan 1980 drivers/dma/ti/edma.c echan->slot[j] = -1; echan 2200 drivers/dma/ti/edma.c struct edma_chan *echan; echan 2207 drivers/dma/ti/edma.c echan = &ecc->slave_chans[i]; echan 2208 drivers/dma/ti/edma.c if (echan->ch_num == dma_spec->args[0]) { echan 2209 drivers/dma/ti/edma.c chan = &echan->vchan.chan; echan 2217 drivers/dma/ti/edma.c if (echan->ecc->legacy_mode && dma_spec->args_count == 1) echan 2220 drivers/dma/ti/edma.c if (!echan->ecc->legacy_mode && dma_spec->args_count == 2 && echan 2221 drivers/dma/ti/edma.c dma_spec->args[1] < echan->ecc->num_tc) { echan 2222 drivers/dma/ti/edma.c echan->tc = &echan->ecc->tc_list[dma_spec->args[1]]; echan 2229 drivers/dma/ti/edma.c echan->hw_triggered = true; echan 2483 drivers/dma/ti/edma.c struct edma_chan *echan, *_echan; echan 2485 drivers/dma/ti/edma.c list_for_each_entry_safe(echan, _echan, echan 2487 drivers/dma/ti/edma.c list_del(&echan->vchan.chan.device_node); echan 2488 drivers/dma/ti/edma.c tasklet_kill(&echan->vchan.task); echan 2516 drivers/dma/ti/edma.c struct edma_chan *echan = ecc->slave_chans; echan 2520 drivers/dma/ti/edma.c if (echan[i].alloced) echan 2521 drivers/dma/ti/edma.c edma_setup_interrupt(&echan[i], false); echan 2530 drivers/dma/ti/edma.c struct edma_chan *echan = ecc->slave_chans; echan 2545 drivers/dma/ti/edma.c if (echan[i].alloced) { echan 2551 drivers/dma/ti/edma.c edma_setup_interrupt(&echan[i], true); echan 2554 drivers/dma/ti/edma.c edma_set_chmap(&echan[i], echan[i].slot[0]); echan 2595 drivers/dma/ti/edma.c struct edma_chan *echan = to_edma_chan(chan); echan 2597 drivers/dma/ti/edma.c if (ch_req == echan->ch_num) { echan 2599 drivers/dma/ti/edma.c echan->hw_triggered = true;