jzchan            176 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan)
jzchan            178 drivers/dma/dma-jz4780.c 	return container_of(jzchan->vchan.chan.device, struct jz4780_dma_dev,
jzchan            230 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan, unsigned int count,
jzchan            242 drivers/dma/dma-jz4780.c 	desc->desc = dma_pool_alloc(jzchan->desc_pool, GFP_NOWAIT,
jzchan            257 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(vdesc->tx.chan);
jzchan            259 drivers/dma/dma-jz4780.c 	dma_pool_free(jzchan->desc_pool, desc->desc, desc->desc_phys);
jzchan            263 drivers/dma/dma-jz4780.c static uint32_t jz4780_dma_transfer_size(struct jz4780_dma_chan *jzchan,
jzchan            266 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            301 drivers/dma/dma-jz4780.c static int jz4780_dma_setup_hwdesc(struct jz4780_dma_chan *jzchan,
jzchan            305 drivers/dma/dma-jz4780.c 	struct dma_slave_config *config = &jzchan->config;
jzchan            331 drivers/dma/dma-jz4780.c 	tsz = jz4780_dma_transfer_size(jzchan, addr | len | (width * maxburst),
jzchan            332 drivers/dma/dma-jz4780.c 				       &jzchan->transfer_shift);
jzchan            349 drivers/dma/dma-jz4780.c 	desc->dtc = len >> jzchan->transfer_shift;
jzchan            358 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            359 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            364 drivers/dma/dma-jz4780.c 	desc = jz4780_dma_desc_alloc(jzchan, sg_len, DMA_SLAVE);
jzchan            369 drivers/dma/dma-jz4780.c 		err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i],
jzchan            374 drivers/dma/dma-jz4780.c 			jz4780_dma_desc_free(&jzchan->desc->vdesc);
jzchan            395 drivers/dma/dma-jz4780.c 	return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags);
jzchan            403 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            413 drivers/dma/dma-jz4780.c 	desc = jz4780_dma_desc_alloc(jzchan, periods, DMA_CYCLIC);
jzchan            418 drivers/dma/dma-jz4780.c 		err = jz4780_dma_setup_hwdesc(jzchan, &desc->desc[i], buf_addr,
jzchan            421 drivers/dma/dma-jz4780.c 			jz4780_dma_desc_free(&jzchan->desc->vdesc);
jzchan            447 drivers/dma/dma-jz4780.c 	return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags);
jzchan            454 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            458 drivers/dma/dma-jz4780.c 	desc = jz4780_dma_desc_alloc(jzchan, 1, DMA_MEMCPY);
jzchan            462 drivers/dma/dma-jz4780.c 	tsz = jz4780_dma_transfer_size(jzchan, dest | src | len,
jzchan            463 drivers/dma/dma-jz4780.c 				       &jzchan->transfer_shift);
jzchan            465 drivers/dma/dma-jz4780.c 	jzchan->transfer_type = JZ_DMA_DRT_AUTO;
jzchan            473 drivers/dma/dma-jz4780.c 	desc->desc[0].dtc = len >> jzchan->transfer_shift;
jzchan            475 drivers/dma/dma-jz4780.c 	return vchan_tx_prep(&jzchan->vchan, &desc->vdesc, flags);
jzchan            478 drivers/dma/dma-jz4780.c static void jz4780_dma_begin(struct jz4780_dma_chan *jzchan)
jzchan            480 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            485 drivers/dma/dma-jz4780.c 	if (!jzchan->desc) {
jzchan            486 drivers/dma/dma-jz4780.c 		vdesc = vchan_next_desc(&jzchan->vchan);
jzchan            492 drivers/dma/dma-jz4780.c 		jzchan->desc = to_jz4780_dma_desc(vdesc);
jzchan            493 drivers/dma/dma-jz4780.c 		jzchan->curr_hwdesc = 0;
jzchan            495 drivers/dma/dma-jz4780.c 		if (jzchan->desc->type == DMA_CYCLIC && vdesc->tx.callback) {
jzchan            510 drivers/dma/dma-jz4780.c 			for (i = 0; i < jzchan->desc->count; i++)
jzchan            511 drivers/dma/dma-jz4780.c 				jzchan->desc->desc[i].dcm &= ~JZ_DMA_DCM_LINK;
jzchan            519 drivers/dma/dma-jz4780.c 		jzchan->curr_hwdesc =
jzchan            520 drivers/dma/dma-jz4780.c 			(jzchan->curr_hwdesc + 1) % jzchan->desc->count;
jzchan            524 drivers/dma/dma-jz4780.c 	jz4780_dma_chan_enable(jzdma, jzchan->id);
jzchan            527 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0);
jzchan            530 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DRT,
jzchan            531 drivers/dma/dma-jz4780.c 			      jzchan->transfer_type);
jzchan            539 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DTC,
jzchan            540 drivers/dma/dma-jz4780.c 				jzchan->desc->desc[jzchan->curr_hwdesc].dtc);
jzchan            543 drivers/dma/dma-jz4780.c 	desc_phys = jzchan->desc->desc_phys +
jzchan            544 drivers/dma/dma-jz4780.c 		    (jzchan->curr_hwdesc * sizeof(*jzchan->desc->desc));
jzchan            545 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DDA, desc_phys);
jzchan            546 drivers/dma/dma-jz4780.c 	jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DDRS, BIT(jzchan->id));
jzchan            549 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS,
jzchan            555 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            558 drivers/dma/dma-jz4780.c 	spin_lock_irqsave(&jzchan->vchan.lock, flags);
jzchan            560 drivers/dma/dma-jz4780.c 	if (vchan_issue_pending(&jzchan->vchan) && !jzchan->desc)
jzchan            561 drivers/dma/dma-jz4780.c 		jz4780_dma_begin(jzchan);
jzchan            563 drivers/dma/dma-jz4780.c 	spin_unlock_irqrestore(&jzchan->vchan.lock, flags);
jzchan            568 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            569 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            573 drivers/dma/dma-jz4780.c 	spin_lock_irqsave(&jzchan->vchan.lock, flags);
jzchan            576 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0);
jzchan            577 drivers/dma/dma-jz4780.c 	if (jzchan->desc) {
jzchan            578 drivers/dma/dma-jz4780.c 		vchan_terminate_vdesc(&jzchan->desc->vdesc);
jzchan            579 drivers/dma/dma-jz4780.c 		jzchan->desc = NULL;
jzchan            582 drivers/dma/dma-jz4780.c 	jz4780_dma_chan_disable(jzdma, jzchan->id);
jzchan            584 drivers/dma/dma-jz4780.c 	vchan_get_all_descriptors(&jzchan->vchan, &head);
jzchan            586 drivers/dma/dma-jz4780.c 	spin_unlock_irqrestore(&jzchan->vchan.lock, flags);
jzchan            588 drivers/dma/dma-jz4780.c 	vchan_dma_desc_free_list(&jzchan->vchan, &head);
jzchan            594 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            595 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            597 drivers/dma/dma-jz4780.c 	vchan_synchronize(&jzchan->vchan);
jzchan            598 drivers/dma/dma-jz4780.c 	jz4780_dma_chan_disable(jzdma, jzchan->id);
jzchan            604 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            611 drivers/dma/dma-jz4780.c 	memcpy(&jzchan->config, config, sizeof(jzchan->config));
jzchan            616 drivers/dma/dma-jz4780.c static size_t jz4780_dma_desc_residue(struct jz4780_dma_chan *jzchan,
jzchan            619 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            627 drivers/dma/dma-jz4780.c 		count += jz4780_dma_chn_readl(jzdma, jzchan->id,
jzchan            630 drivers/dma/dma-jz4780.c 	return count << jzchan->transfer_shift;
jzchan            636 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            646 drivers/dma/dma-jz4780.c 	spin_lock_irqsave(&jzchan->vchan.lock, flags);
jzchan            648 drivers/dma/dma-jz4780.c 	vdesc = vchan_find_desc(&jzchan->vchan, cookie);
jzchan            651 drivers/dma/dma-jz4780.c 		residue = jz4780_dma_desc_residue(jzchan,
jzchan            653 drivers/dma/dma-jz4780.c 	} else if (cookie == jzchan->desc->vdesc.tx.cookie) {
jzchan            654 drivers/dma/dma-jz4780.c 		residue = jz4780_dma_desc_residue(jzchan, jzchan->desc,
jzchan            655 drivers/dma/dma-jz4780.c 					jzchan->curr_hwdesc + 1);
jzchan            659 drivers/dma/dma-jz4780.c 	if (vdesc && jzchan->desc && vdesc == &jzchan->desc->vdesc
jzchan            660 drivers/dma/dma-jz4780.c 	    && jzchan->desc->status & (JZ_DMA_DCS_AR | JZ_DMA_DCS_HLT))
jzchan            663 drivers/dma/dma-jz4780.c 	spin_unlock_irqrestore(&jzchan->vchan.lock, flags);
jzchan            668 drivers/dma/dma-jz4780.c 				struct jz4780_dma_chan *jzchan)
jzchan            671 drivers/dma/dma-jz4780.c 	struct jz4780_dma_desc *desc = jzchan->desc;
jzchan            675 drivers/dma/dma-jz4780.c 	spin_lock(&jzchan->vchan.lock);
jzchan            677 drivers/dma/dma-jz4780.c 	dcs = jz4780_dma_chn_readl(jzdma, jzchan->id, JZ_DMA_REG_DCS);
jzchan            678 drivers/dma/dma-jz4780.c 	jz4780_dma_chn_writel(jzdma, jzchan->id, JZ_DMA_REG_DCS, 0);
jzchan            681 drivers/dma/dma-jz4780.c 		dev_warn(&jzchan->vchan.chan.dev->device,
jzchan            686 drivers/dma/dma-jz4780.c 		dev_warn(&jzchan->vchan.chan.dev->device,
jzchan            690 drivers/dma/dma-jz4780.c 	if (jzchan->desc) {
jzchan            691 drivers/dma/dma-jz4780.c 		jzchan->desc->status = dcs;
jzchan            694 drivers/dma/dma-jz4780.c 			if (jzchan->desc->type == DMA_CYCLIC) {
jzchan            695 drivers/dma/dma-jz4780.c 				vchan_cyclic_callback(&jzchan->desc->vdesc);
jzchan            697 drivers/dma/dma-jz4780.c 				jz4780_dma_begin(jzchan);
jzchan            700 drivers/dma/dma-jz4780.c 				    (jzchan->curr_hwdesc + 1 == desc->count)) {
jzchan            702 drivers/dma/dma-jz4780.c 					jzchan->desc = NULL;
jzchan            705 drivers/dma/dma-jz4780.c 				jz4780_dma_begin(jzchan);
jzchan            709 drivers/dma/dma-jz4780.c 				jz4780_dma_chn_writel(jzdma, jzchan->id,
jzchan            715 drivers/dma/dma-jz4780.c 		dev_err(&jzchan->vchan.chan.dev->device,
jzchan            719 drivers/dma/dma-jz4780.c 	spin_unlock(&jzchan->vchan.lock);
jzchan            752 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            754 drivers/dma/dma-jz4780.c 	jzchan->desc_pool = dma_pool_create(dev_name(&chan->dev->device),
jzchan            758 drivers/dma/dma-jz4780.c 	if (!jzchan->desc_pool) {
jzchan            769 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            771 drivers/dma/dma-jz4780.c 	vchan_free_chan_resources(&jzchan->vchan);
jzchan            772 drivers/dma/dma-jz4780.c 	dma_pool_destroy(jzchan->desc_pool);
jzchan            773 drivers/dma/dma-jz4780.c 	jzchan->desc_pool = NULL;
jzchan            778 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan = to_jz4780_dma_chan(chan);
jzchan            779 drivers/dma/dma-jz4780.c 	struct jz4780_dma_dev *jzdma = jz4780_dma_chan_parent(jzchan);
jzchan            784 drivers/dma/dma-jz4780.c 		if (data->channel != jzchan->id)
jzchan            786 drivers/dma/dma-jz4780.c 	} else if (jzdma->chan_reserved & BIT(jzchan->id)) {
jzchan            790 drivers/dma/dma-jz4780.c 	jzchan->transfer_type = data->transfer_type;
jzchan            839 drivers/dma/dma-jz4780.c 	struct jz4780_dma_chan *jzchan;
jzchan            951 drivers/dma/dma-jz4780.c 		jzchan = &jzdma->chan[i];
jzchan            952 drivers/dma/dma-jz4780.c 		jzchan->id = i;
jzchan            954 drivers/dma/dma-jz4780.c 		vchan_init(&jzchan->vchan, dd);
jzchan            955 drivers/dma/dma-jz4780.c 		jzchan->vchan.desc_free = jz4780_dma_desc_free;