cohc             1260 drivers/dma/coh901318.c #define COHC_2_DEV(cohc) (&cohc->chan.dev->device)
cohc             1316 drivers/dma/coh901318.c static void coh901318_list_print(struct coh901318_chan *cohc,
cohc             1323 drivers/dma/coh901318.c 		dev_vdbg(COHC_2_DEV(cohc), "i %d, lli %p, ctrl 0x%x, src %pad"
cohc             1409 drivers/dma/coh901318.c cohc_chan_param(struct coh901318_chan *cohc)
cohc             1411 drivers/dma/coh901318.c 	return &chan_config[cohc->id].param;
cohc             1415 drivers/dma/coh901318.c cohc_chan_conf(struct coh901318_chan *cohc)
cohc             1417 drivers/dma/coh901318.c 	return &chan_config[cohc->id];
cohc             1420 drivers/dma/coh901318.c static void enable_powersave(struct coh901318_chan *cohc)
cohc             1423 drivers/dma/coh901318.c 	struct powersave *pm = &cohc->base->pm;
cohc             1427 drivers/dma/coh901318.c 	pm->started_channels &= ~(1ULL << cohc->id);
cohc             1431 drivers/dma/coh901318.c static void disable_powersave(struct coh901318_chan *cohc)
cohc             1434 drivers/dma/coh901318.c 	struct powersave *pm = &cohc->base->pm;
cohc             1438 drivers/dma/coh901318.c 	pm->started_channels |= (1ULL << cohc->id);
cohc             1443 drivers/dma/coh901318.c static inline int coh901318_set_ctrl(struct coh901318_chan *cohc, u32 control)
cohc             1445 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1446 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1454 drivers/dma/coh901318.c static inline int coh901318_set_conf(struct coh901318_chan *cohc, u32 conf)
cohc             1456 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1457 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1466 drivers/dma/coh901318.c static int coh901318_start(struct coh901318_chan *cohc)
cohc             1469 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1470 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1472 drivers/dma/coh901318.c 	disable_powersave(cohc);
cohc             1485 drivers/dma/coh901318.c static int coh901318_prep_linked_list(struct coh901318_chan *cohc,
cohc             1488 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1489 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1513 drivers/dma/coh901318.c coh901318_desc_get(struct coh901318_chan *cohc)
cohc             1517 drivers/dma/coh901318.c 	if (list_empty(&cohc->free)) {
cohc             1526 drivers/dma/coh901318.c 		dma_async_tx_descriptor_init(&desc->desc, &cohc->chan);
cohc             1529 drivers/dma/coh901318.c 		desc = list_first_entry(&cohc->free,
cohc             1545 drivers/dma/coh901318.c coh901318_desc_free(struct coh901318_chan *cohc, struct coh901318_desc *cohd)
cohc             1547 drivers/dma/coh901318.c 	list_add_tail(&cohd->node, &cohc->free);
cohc             1552 drivers/dma/coh901318.c coh901318_desc_submit(struct coh901318_chan *cohc, struct coh901318_desc *desc)
cohc             1554 drivers/dma/coh901318.c 	list_add_tail(&desc->node, &cohc->active);
cohc             1558 drivers/dma/coh901318.c coh901318_first_active_get(struct coh901318_chan *cohc)
cohc             1560 drivers/dma/coh901318.c 	return list_first_entry_or_null(&cohc->active, struct coh901318_desc,
cohc             1571 drivers/dma/coh901318.c coh901318_desc_queue(struct coh901318_chan *cohc, struct coh901318_desc *desc)
cohc             1573 drivers/dma/coh901318.c 	list_add_tail(&desc->node, &cohc->queue);
cohc             1577 drivers/dma/coh901318.c coh901318_first_queued(struct coh901318_chan *cohc)
cohc             1579 drivers/dma/coh901318.c 	return list_first_entry_or_null(&cohc->queue, struct coh901318_desc,
cohc             1603 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             1610 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             1617 drivers/dma/coh901318.c 	list_for_each(pos, &cohc->active) {
cohc             1631 drivers/dma/coh901318.c 			left = readl(cohc->base->virtbase +
cohc             1633 drivers/dma/coh901318.c 				     COH901318_CX_CTRL_SPACING * cohc->id) &
cohc             1637 drivers/dma/coh901318.c 			ladd = readl(cohc->base->virtbase +
cohc             1640 drivers/dma/coh901318.c 				     cohc->id) &
cohc             1669 drivers/dma/coh901318.c 	list_for_each(pos, &cohc->queue) {
cohc             1674 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1687 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             1688 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1689 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1691 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             1700 drivers/dma/coh901318.c 		cohc->stopped = 1;
cohc             1718 drivers/dma/coh901318.c 		cohc->stopped = 1;
cohc             1720 drivers/dma/coh901318.c 	enable_powersave(cohc);
cohc             1722 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1733 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             1734 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1736 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             1738 drivers/dma/coh901318.c 	disable_powersave(cohc);
cohc             1740 drivers/dma/coh901318.c 	if (cohc->stopped) {
cohc             1742 drivers/dma/coh901318.c 		val = readl(cohc->base->virtbase + COH901318_CX_CFG +
cohc             1747 drivers/dma/coh901318.c 		writel(val, cohc->base->virtbase + COH901318_CX_CFG +
cohc             1750 drivers/dma/coh901318.c 		cohc->stopped = 0;
cohc             1753 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1800 drivers/dma/coh901318.c static int coh901318_config(struct coh901318_chan *cohc,
cohc             1804 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             1805 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             1810 drivers/dma/coh901318.c 		p = cohc_chan_param(cohc);
cohc             1823 drivers/dma/coh901318.c 	coh901318_set_conf(cohc, p->config);
cohc             1824 drivers/dma/coh901318.c 	coh901318_set_ctrl(cohc, p->ctrl_lli_last);
cohc             1836 drivers/dma/coh901318.c static struct coh901318_desc *coh901318_queue_start(struct coh901318_chan *cohc)
cohc             1844 drivers/dma/coh901318.c 	cohd = coh901318_first_queued(cohc);
cohc             1850 drivers/dma/coh901318.c 		cohc->busy = 1;
cohc             1852 drivers/dma/coh901318.c 		coh901318_desc_submit(cohc, cohd);
cohc             1855 drivers/dma/coh901318.c 		coh901318_set_conf(cohc, cohd->head_config);
cohc             1856 drivers/dma/coh901318.c 		coh901318_set_ctrl(cohc, cohd->head_ctrl);
cohc             1857 drivers/dma/coh901318.c 		coh901318_prep_linked_list(cohc, cohd->lli);
cohc             1860 drivers/dma/coh901318.c 		coh901318_start(cohc);
cohc             1873 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = (struct coh901318_chan *) data;
cohc             1878 drivers/dma/coh901318.c 	dev_vdbg(COHC_2_DEV(cohc), "[%s] chan_id %d"
cohc             1880 drivers/dma/coh901318.c 		 cohc->id, cohc->nbr_active_done);
cohc             1882 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             1885 drivers/dma/coh901318.c 	cohd_fin = coh901318_first_active_get(cohc);
cohc             1897 drivers/dma/coh901318.c 	coh901318_lli_free(&cohc->base->pool, &cohd_fin->lli);
cohc             1901 drivers/dma/coh901318.c 	coh901318_desc_free(cohc, cohd_fin);
cohc             1903 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1908 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             1917 drivers/dma/coh901318.c 	cohc->nbr_active_done--;
cohc             1918 drivers/dma/coh901318.c 	if (cohc->nbr_active_done) {
cohc             1919 drivers/dma/coh901318.c 		dev_dbg(COHC_2_DEV(cohc), "scheduling tasklet again, new IRQs "
cohc             1921 drivers/dma/coh901318.c 		if (cohc_chan_conf(cohc)->priority_high)
cohc             1922 drivers/dma/coh901318.c 			tasklet_hi_schedule(&cohc->tasklet);
cohc             1924 drivers/dma/coh901318.c 			tasklet_schedule(&cohc->tasklet);
cohc             1927 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1932 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             1933 drivers/dma/coh901318.c 	dev_err(COHC_2_DEV(cohc), "[%s] No active dma desc\n", __func__);
cohc             1938 drivers/dma/coh901318.c static void dma_tc_handle(struct coh901318_chan *cohc)
cohc             1944 drivers/dma/coh901318.c 	if (!cohc->allocated) {
cohc             1945 drivers/dma/coh901318.c 		dev_err(COHC_2_DEV(cohc), "spurious interrupt from "
cohc             1959 drivers/dma/coh901318.c 	BUG_ON(list_empty(&cohc->active));
cohc             1961 drivers/dma/coh901318.c 	cohc->nbr_active_done++;
cohc             1967 drivers/dma/coh901318.c 	if (coh901318_queue_start(cohc) == NULL)
cohc             1968 drivers/dma/coh901318.c 		cohc->busy = 0;
cohc             1974 drivers/dma/coh901318.c 	if (cohc_chan_conf(cohc)->priority_high)
cohc             1975 drivers/dma/coh901318.c 		tasklet_hi_schedule(&cohc->tasklet);
cohc             1977 drivers/dma/coh901318.c 		tasklet_schedule(&cohc->tasklet);
cohc             1988 drivers/dma/coh901318.c 	struct coh901318_chan *cohc;
cohc             2008 drivers/dma/coh901318.c 		cohc = &base->chans[ch];
cohc             2009 drivers/dma/coh901318.c 		spin_lock(&cohc->lock);
cohc             2015 drivers/dma/coh901318.c 			dev_crit(COHC_2_DEV(cohc),
cohc             2024 drivers/dma/coh901318.c 				dev_warn(COHC_2_DEV(cohc),
cohc             2034 drivers/dma/coh901318.c 					enable_powersave(cohc);
cohc             2043 drivers/dma/coh901318.c 				dma_tc_handle(cohc);
cohc             2046 drivers/dma/coh901318.c 		spin_unlock(&cohc->lock);
cohc             2054 drivers/dma/coh901318.c 		cohc = &base->chans[ch];
cohc             2055 drivers/dma/coh901318.c 		spin_lock(&cohc->lock);
cohc             2061 drivers/dma/coh901318.c 			dev_crit(COHC_2_DEV(cohc),
cohc             2070 drivers/dma/coh901318.c 				dev_warn(COHC_2_DEV(cohc),
cohc             2080 drivers/dma/coh901318.c 					enable_powersave(cohc);
cohc             2088 drivers/dma/coh901318.c 				dma_tc_handle(cohc);
cohc             2091 drivers/dma/coh901318.c 		spin_unlock(&cohc->lock);
cohc             2100 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2102 drivers/dma/coh901318.c 	void __iomem *virtbase = cohc->base->virtbase;
cohc             2106 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             2109 drivers/dma/coh901318.c 	if (cohc->id < 32) {
cohc             2110 drivers/dma/coh901318.c 		writel(1 << cohc->id, virtbase + COH901318_BE_INT_CLEAR1);
cohc             2111 drivers/dma/coh901318.c 		writel(1 << cohc->id, virtbase + COH901318_TC_INT_CLEAR1);
cohc             2113 drivers/dma/coh901318.c 		writel(1 << (cohc->id - 32), virtbase +
cohc             2115 drivers/dma/coh901318.c 		writel(1 << (cohc->id - 32), virtbase +
cohc             2119 drivers/dma/coh901318.c 	enable_powersave(cohc);
cohc             2121 drivers/dma/coh901318.c 	while ((cohd = coh901318_first_active_get(cohc))) {
cohc             2123 drivers/dma/coh901318.c 		coh901318_lli_free(&cohc->base->pool, &cohd->lli);
cohc             2127 drivers/dma/coh901318.c 		coh901318_desc_free(cohc, cohd);
cohc             2130 drivers/dma/coh901318.c 	while ((cohd = coh901318_first_queued(cohc))) {
cohc             2132 drivers/dma/coh901318.c 		coh901318_lli_free(&cohc->base->pool, &cohd->lli);
cohc             2136 drivers/dma/coh901318.c 		coh901318_desc_free(cohc, cohd);
cohc             2140 drivers/dma/coh901318.c 	cohc->nbr_active_done = 0;
cohc             2141 drivers/dma/coh901318.c 	cohc->busy = 0;
cohc             2143 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             2150 drivers/dma/coh901318.c 	struct coh901318_chan	*cohc = to_coh901318_chan(chan);
cohc             2153 drivers/dma/coh901318.c 	dev_vdbg(COHC_2_DEV(cohc), "[%s] DMA channel %d\n",
cohc             2154 drivers/dma/coh901318.c 		 __func__, cohc->id);
cohc             2159 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             2161 drivers/dma/coh901318.c 	coh901318_config(cohc, NULL);
cohc             2163 drivers/dma/coh901318.c 	cohc->allocated = 1;
cohc             2166 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             2174 drivers/dma/coh901318.c 	struct coh901318_chan	*cohc = to_coh901318_chan(chan);
cohc             2175 drivers/dma/coh901318.c 	int channel = cohc->id;
cohc             2178 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             2181 drivers/dma/coh901318.c 	writel(0x00000000U, cohc->base->virtbase + COH901318_CX_CFG +
cohc             2183 drivers/dma/coh901318.c 	writel(0x00000000U, cohc->base->virtbase + COH901318_CX_CTRL +
cohc             2186 drivers/dma/coh901318.c 	cohc->allocated = 0;
cohc             2188 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             2199 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(tx->chan);
cohc             2203 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             2206 drivers/dma/coh901318.c 	coh901318_desc_queue(cohc, cohd);
cohc             2208 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             2220 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2222 drivers/dma/coh901318.c 	u32 ctrl_last = cohc_chan_param(cohc)->ctrl_lli_last;
cohc             2225 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flg);
cohc             2227 drivers/dma/coh901318.c 	dev_vdbg(COHC_2_DEV(cohc),
cohc             2229 drivers/dma/coh901318.c 		 __func__, cohc->id, &src, &dest, size);
cohc             2239 drivers/dma/coh901318.c 	lli = coh901318_lli_alloc(&cohc->base->pool, lli_len);
cohc             2245 drivers/dma/coh901318.c 		&cohc->base->pool, lli, src, size, dest,
cohc             2246 drivers/dma/coh901318.c 		cohc_chan_param(cohc)->ctrl_lli_chained,
cohc             2251 drivers/dma/coh901318.c 	COH_DBG(coh901318_list_print(cohc, lli));
cohc             2254 drivers/dma/coh901318.c 	cohd = coh901318_desc_get(cohc);
cohc             2259 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flg);
cohc             2263 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flg);
cohc             2272 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2280 drivers/dma/coh901318.c 	u32 ctrl_chained = cohc_chan_param(cohc)->ctrl_lli_chained;
cohc             2281 drivers/dma/coh901318.c 	u32 ctrl = cohc_chan_param(cohc)->ctrl_lli;
cohc             2282 drivers/dma/coh901318.c 	u32 ctrl_last = cohc_chan_param(cohc)->ctrl_lli_last;
cohc             2292 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flg);
cohc             2294 drivers/dma/coh901318.c 	dev_vdbg(COHC_2_DEV(cohc), "[%s] sg_len %d dir %d\n",
cohc             2301 drivers/dma/coh901318.c 	params = cohc_chan_param(cohc);
cohc             2308 drivers/dma/coh901318.c 	ctrl_chained |= cohc->ctrl;
cohc             2309 drivers/dma/coh901318.c 	ctrl_last |= cohc->ctrl;
cohc             2310 drivers/dma/coh901318.c 	ctrl |= cohc->ctrl;
cohc             2352 drivers/dma/coh901318.c 	lli = coh901318_lli_alloc(&cohc->base->pool, len);
cohc             2357 drivers/dma/coh901318.c 	coh901318_dma_set_runtimeconfig(chan, &cohc->config, direction);
cohc             2360 drivers/dma/coh901318.c 	ret = coh901318_lli_fill_sg(&cohc->base->pool, lli, sgl, sg_len,
cohc             2361 drivers/dma/coh901318.c 				    cohc->addr,
cohc             2370 drivers/dma/coh901318.c 	COH_DBG(coh901318_list_print(cohc, lli));
cohc             2373 drivers/dma/coh901318.c 	cohd = coh901318_desc_get(cohc);
cohc             2386 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flg);
cohc             2392 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flg);
cohc             2401 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2410 drivers/dma/coh901318.c 	if (ret == DMA_IN_PROGRESS && cohc->stopped)
cohc             2419 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2422 drivers/dma/coh901318.c 	spin_lock_irqsave(&cohc->lock, flags);
cohc             2430 drivers/dma/coh901318.c 	if (!cohc->busy)
cohc             2431 drivers/dma/coh901318.c 		coh901318_queue_start(cohc);
cohc             2433 drivers/dma/coh901318.c 	spin_unlock_irqrestore(&cohc->lock, flags);
cohc             2501 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2518 drivers/dma/coh901318.c 		dev_err(COHC_2_DEV(cohc), "illegal channel mode\n");
cohc             2522 drivers/dma/coh901318.c 	dev_dbg(COHC_2_DEV(cohc), "configure channel for %d byte transfers\n",
cohc             2563 drivers/dma/coh901318.c 		dev_err(COHC_2_DEV(cohc),
cohc             2569 drivers/dma/coh901318.c 	dev_dbg(COHC_2_DEV(cohc),
cohc             2573 drivers/dma/coh901318.c 	cohc->addr = addr;
cohc             2574 drivers/dma/coh901318.c 	cohc->ctrl = ctrl;
cohc             2582 drivers/dma/coh901318.c 	struct coh901318_chan *cohc = to_coh901318_chan(chan);
cohc             2584 drivers/dma/coh901318.c 	memcpy(&cohc->config, config, sizeof(*config));
cohc             2594 drivers/dma/coh901318.c 	struct coh901318_chan *cohc;
cohc             2600 drivers/dma/coh901318.c 			cohc = &base->chans[i];
cohc             2602 drivers/dma/coh901318.c 			cohc->base = base;
cohc             2603 drivers/dma/coh901318.c 			cohc->chan.device = dma;
cohc             2604 drivers/dma/coh901318.c 			cohc->id = i;
cohc             2610 drivers/dma/coh901318.c 			spin_lock_init(&cohc->lock);
cohc             2612 drivers/dma/coh901318.c 			cohc->nbr_active_done = 0;
cohc             2613 drivers/dma/coh901318.c 			cohc->busy = 0;
cohc             2614 drivers/dma/coh901318.c 			INIT_LIST_HEAD(&cohc->free);
cohc             2615 drivers/dma/coh901318.c 			INIT_LIST_HEAD(&cohc->active);
cohc             2616 drivers/dma/coh901318.c 			INIT_LIST_HEAD(&cohc->queue);
cohc             2618 drivers/dma/coh901318.c 			tasklet_init(&cohc->tasklet, dma_tasklet,
cohc             2619 drivers/dma/coh901318.c 				     (unsigned long) cohc);
cohc             2621 drivers/dma/coh901318.c 			list_add_tail(&cohc->chan.device_node,
cohc             2755 drivers/dma/coh901318.c 	struct coh901318_chan *cohc;
cohc             2759 drivers/dma/coh901318.c 			cohc = &base->chans[i];
cohc             2761 drivers/dma/coh901318.c 			tasklet_kill(&cohc->tasklet);