Lines Matching refs:idma64

39 static void idma64_off(struct idma64 *idma64)  in idma64_off()  argument
43 dma_writel(idma64, CFG, 0); in idma64_off()
45 channel_clear_bit(idma64, MASK(XFER), idma64->all_chan_mask); in idma64_off()
46 channel_clear_bit(idma64, MASK(BLOCK), idma64->all_chan_mask); in idma64_off()
47 channel_clear_bit(idma64, MASK(SRC_TRAN), idma64->all_chan_mask); in idma64_off()
48 channel_clear_bit(idma64, MASK(DST_TRAN), idma64->all_chan_mask); in idma64_off()
49 channel_clear_bit(idma64, MASK(ERROR), idma64->all_chan_mask); in idma64_off()
53 } while (dma_readl(idma64, CFG) & IDMA64_CFG_DMA_EN && --count); in idma64_off()
56 static void idma64_on(struct idma64 *idma64) in idma64_on() argument
58 dma_writel(idma64, CFG, IDMA64_CFG_DMA_EN); in idma64_on()
63 static void idma64_chan_init(struct idma64 *idma64, struct idma64_chan *idma64c) in idma64_chan_init() argument
75 channel_set_bit(idma64, MASK(XFER), idma64c->mask); in idma64_chan_init()
76 channel_set_bit(idma64, MASK(ERROR), idma64c->mask); in idma64_chan_init()
85 idma64_on(idma64); in idma64_chan_init()
88 static void idma64_chan_stop(struct idma64 *idma64, struct idma64_chan *idma64c) in idma64_chan_stop() argument
90 channel_clear_bit(idma64, CH_EN, idma64c->mask); in idma64_chan_stop()
93 static void idma64_chan_start(struct idma64 *idma64, struct idma64_chan *idma64c) in idma64_chan_start() argument
106 channel_set_bit(idma64, CH_EN, idma64c->mask); in idma64_chan_start()
111 struct idma64 *idma64 = to_idma64(idma64c->vchan.chan.device); in idma64_stop_transfer() local
113 idma64_chan_stop(idma64, idma64c); in idma64_stop_transfer()
118 struct idma64 *idma64 = to_idma64(idma64c->vchan.chan.device); in idma64_start_transfer() local
132 idma64_chan_init(idma64, idma64c); in idma64_start_transfer()
135 idma64_chan_start(idma64, idma64c); in idma64_start_transfer()
140 static void idma64_chan_irq(struct idma64 *idma64, unsigned short c, in idma64_chan_irq() argument
143 struct idma64_chan *idma64c = &idma64->chan[c]; in idma64_chan_irq()
151 dma_writel(idma64, CLEAR(ERROR), idma64c->mask); in idma64_chan_irq()
154 dma_writel(idma64, CLEAR(XFER), idma64c->mask); in idma64_chan_irq()
169 struct idma64 *idma64 = dev; in idma64_irq() local
170 u32 status = dma_readl(idma64, STATUS_INT); in idma64_irq()
175 dev_vdbg(idma64->dma.dev, "%s: status=%#x\n", __func__, status); in idma64_irq()
182 channel_clear_bit(idma64, MASK(XFER), idma64->all_chan_mask); in idma64_irq()
183 channel_clear_bit(idma64, MASK(ERROR), idma64->all_chan_mask); in idma64_irq()
185 status_xfer = dma_readl(idma64, RAW(XFER)); in idma64_irq()
186 status_err = dma_readl(idma64, RAW(ERROR)); in idma64_irq()
188 for (i = 0; i < idma64->dma.chancnt; i++) in idma64_irq()
189 idma64_chan_irq(idma64, i, status_err, status_xfer); in idma64_irq()
192 channel_set_bit(idma64, MASK(XFER), idma64->all_chan_mask); in idma64_irq()
193 channel_set_bit(idma64, MASK(ERROR), idma64->all_chan_mask); in idma64_irq()
538 struct idma64 *idma64; in idma64_probe() local
543 idma64 = devm_kzalloc(chip->dev, sizeof(*idma64), GFP_KERNEL); in idma64_probe()
544 if (!idma64) in idma64_probe()
547 idma64->regs = chip->regs; in idma64_probe()
548 chip->idma64 = idma64; in idma64_probe()
550 idma64->chan = devm_kcalloc(chip->dev, nr_chan, sizeof(*idma64->chan), in idma64_probe()
552 if (!idma64->chan) in idma64_probe()
555 idma64->all_chan_mask = (1 << nr_chan) - 1; in idma64_probe()
558 idma64_off(idma64); in idma64_probe()
561 dev_name(chip->dev), idma64); in idma64_probe()
565 INIT_LIST_HEAD(&idma64->dma.channels); in idma64_probe()
567 struct idma64_chan *idma64c = &idma64->chan[i]; in idma64_probe()
570 vchan_init(&idma64c->vchan, &idma64->dma); in idma64_probe()
572 idma64c->regs = idma64->regs + i * IDMA64_CH_LENGTH; in idma64_probe()
576 dma_cap_set(DMA_SLAVE, idma64->dma.cap_mask); in idma64_probe()
577 dma_cap_set(DMA_PRIVATE, idma64->dma.cap_mask); in idma64_probe()
579 idma64->dma.device_alloc_chan_resources = idma64_alloc_chan_resources; in idma64_probe()
580 idma64->dma.device_free_chan_resources = idma64_free_chan_resources; in idma64_probe()
582 idma64->dma.device_prep_slave_sg = idma64_prep_slave_sg; in idma64_probe()
584 idma64->dma.device_issue_pending = idma64_issue_pending; in idma64_probe()
585 idma64->dma.device_tx_status = idma64_tx_status; in idma64_probe()
587 idma64->dma.device_config = idma64_slave_config; in idma64_probe()
588 idma64->dma.device_pause = idma64_pause; in idma64_probe()
589 idma64->dma.device_resume = idma64_resume; in idma64_probe()
590 idma64->dma.device_terminate_all = idma64_terminate_all; in idma64_probe()
592 idma64->dma.src_addr_widths = IDMA64_BUSWIDTHS; in idma64_probe()
593 idma64->dma.dst_addr_widths = IDMA64_BUSWIDTHS; in idma64_probe()
594 idma64->dma.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV); in idma64_probe()
595 idma64->dma.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST; in idma64_probe()
597 idma64->dma.dev = chip->dev; in idma64_probe()
599 ret = dma_async_device_register(&idma64->dma); in idma64_probe()
609 struct idma64 *idma64 = chip->idma64; in idma64_remove() local
612 dma_async_device_unregister(&idma64->dma); in idma64_remove()
618 devm_free_irq(chip->dev, chip->irq, idma64); in idma64_remove()
620 for (i = 0; i < idma64->dma.chancnt; i++) { in idma64_remove()
621 struct idma64_chan *idma64c = &idma64->chan[i]; in idma64_remove()
679 idma64_off(chip->idma64); in idma64_pm_suspend()
688 idma64_on(chip->idma64); in idma64_pm_resume()