Lines Matching refs:chan

39 static void mv_xor_issue_pending(struct dma_chan *chan);
41 #define to_mv_xor_chan(chan) \ argument
42 container_of(chan, struct mv_xor_chan, dmachan)
47 #define mv_chan_to_devp(chan) \ argument
48 ((chan)->dmadev.dev)
100 static u32 mv_chan_get_current_desc(struct mv_xor_chan *chan) in mv_chan_get_current_desc() argument
102 return readl_relaxed(XOR_CURR_DESC(chan)); in mv_chan_get_current_desc()
105 static void mv_chan_set_next_descriptor(struct mv_xor_chan *chan, in mv_chan_set_next_descriptor() argument
108 writel_relaxed(next_desc_addr, XOR_NEXT_DESC(chan)); in mv_chan_set_next_descriptor()
111 static void mv_chan_unmask_interrupts(struct mv_xor_chan *chan) in mv_chan_unmask_interrupts() argument
113 u32 val = readl_relaxed(XOR_INTR_MASK(chan)); in mv_chan_unmask_interrupts()
114 val |= XOR_INTR_MASK_VALUE << (chan->idx * 16); in mv_chan_unmask_interrupts()
115 writel_relaxed(val, XOR_INTR_MASK(chan)); in mv_chan_unmask_interrupts()
118 static u32 mv_chan_get_intr_cause(struct mv_xor_chan *chan) in mv_chan_get_intr_cause() argument
120 u32 intr_cause = readl_relaxed(XOR_INTR_CAUSE(chan)); in mv_chan_get_intr_cause()
121 intr_cause = (intr_cause >> (chan->idx * 16)) & 0xFFFF; in mv_chan_get_intr_cause()
125 static void mv_chan_clear_eoc_cause(struct mv_xor_chan *chan) in mv_chan_clear_eoc_cause() argument
130 val = ~(val << (chan->idx * 16)); in mv_chan_clear_eoc_cause()
131 dev_dbg(mv_chan_to_devp(chan), "%s, val 0x%08x\n", __func__, val); in mv_chan_clear_eoc_cause()
132 writel_relaxed(val, XOR_INTR_CAUSE(chan)); in mv_chan_clear_eoc_cause()
135 static void mv_chan_clear_err_status(struct mv_xor_chan *chan) in mv_chan_clear_err_status() argument
137 u32 val = 0xFFFF0000 >> (chan->idx * 16); in mv_chan_clear_err_status()
138 writel_relaxed(val, XOR_INTR_CAUSE(chan)); in mv_chan_clear_err_status()
141 static void mv_chan_set_mode(struct mv_xor_chan *chan, in mv_chan_set_mode() argument
145 u32 config = readl_relaxed(XOR_CONFIG(chan)); in mv_chan_set_mode()
155 dev_err(mv_chan_to_devp(chan), in mv_chan_set_mode()
171 writel_relaxed(config, XOR_CONFIG(chan)); in mv_chan_set_mode()
172 chan->current_type = type; in mv_chan_set_mode()
175 static void mv_chan_set_mode_to_desc(struct mv_xor_chan *chan) in mv_chan_set_mode_to_desc() argument
178 u32 config = readl_relaxed(XOR_CONFIG(chan)); in mv_chan_set_mode_to_desc()
191 writel_relaxed(config, XOR_CONFIG(chan)); in mv_chan_set_mode_to_desc()
194 static void mv_chan_activate(struct mv_xor_chan *chan) in mv_chan_activate() argument
196 dev_dbg(mv_chan_to_devp(chan), " activate chan.\n"); in mv_chan_activate()
199 writel(BIT(0), XOR_ACTIVATION(chan)); in mv_chan_activate()
202 static char mv_chan_is_busy(struct mv_xor_chan *chan) in mv_chan_is_busy() argument
204 u32 state = readl_relaxed(XOR_ACTIVATION(chan)); in mv_chan_is_busy()
368 struct mv_xor_chan *chan = (struct mv_xor_chan *) data; in mv_xor_tasklet() local
370 spin_lock_bh(&chan->lock); in mv_xor_tasklet()
371 mv_chan_slot_cleanup(chan); in mv_xor_tasklet()
372 spin_unlock_bh(&chan->lock); in mv_xor_tasklet()
412 struct mv_xor_chan *mv_chan = to_mv_xor_chan(tx->chan); in mv_xor_tx_submit()
461 static int mv_xor_alloc_chan_resources(struct dma_chan *chan) in mv_xor_alloc_chan_resources() argument
466 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_alloc_chan_resources()
483 dma_async_tx_descriptor_init(&slot->async_tx, chan); in mv_xor_alloc_chan_resources()
504 mv_xor_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src, in mv_xor_prep_dma_xor() argument
507 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_prep_dma_xor()
537 mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, in mv_xor_prep_dma_memcpy() argument
544 return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags); in mv_xor_prep_dma_memcpy()
548 mv_xor_prep_dma_interrupt(struct dma_chan *chan, unsigned long flags) in mv_xor_prep_dma_interrupt() argument
550 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_prep_dma_interrupt()
562 return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags); in mv_xor_prep_dma_interrupt()
565 static void mv_xor_free_chan_resources(struct dma_chan *chan) in mv_xor_free_chan_resources() argument
567 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_free_chan_resources()
612 static enum dma_status mv_xor_status(struct dma_chan *chan, in mv_xor_status() argument
616 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_status()
619 ret = dma_cookie_status(chan, cookie, txstate); in mv_xor_status()
627 return dma_cookie_status(chan, cookie, txstate); in mv_xor_status()
630 static void mv_chan_dump_regs(struct mv_xor_chan *chan) in mv_chan_dump_regs() argument
634 val = readl_relaxed(XOR_CONFIG(chan)); in mv_chan_dump_regs()
635 dev_err(mv_chan_to_devp(chan), "config 0x%08x\n", val); in mv_chan_dump_regs()
637 val = readl_relaxed(XOR_ACTIVATION(chan)); in mv_chan_dump_regs()
638 dev_err(mv_chan_to_devp(chan), "activation 0x%08x\n", val); in mv_chan_dump_regs()
640 val = readl_relaxed(XOR_INTR_CAUSE(chan)); in mv_chan_dump_regs()
641 dev_err(mv_chan_to_devp(chan), "intr cause 0x%08x\n", val); in mv_chan_dump_regs()
643 val = readl_relaxed(XOR_INTR_MASK(chan)); in mv_chan_dump_regs()
644 dev_err(mv_chan_to_devp(chan), "intr mask 0x%08x\n", val); in mv_chan_dump_regs()
646 val = readl_relaxed(XOR_ERROR_CAUSE(chan)); in mv_chan_dump_regs()
647 dev_err(mv_chan_to_devp(chan), "error cause 0x%08x\n", val); in mv_chan_dump_regs()
649 val = readl_relaxed(XOR_ERROR_ADDR(chan)); in mv_chan_dump_regs()
650 dev_err(mv_chan_to_devp(chan), "error addr 0x%08x\n", val); in mv_chan_dump_regs()
653 static void mv_chan_err_interrupt_handler(struct mv_xor_chan *chan, in mv_chan_err_interrupt_handler() argument
657 dev_dbg(mv_chan_to_devp(chan), "ignoring address decode error\n"); in mv_chan_err_interrupt_handler()
661 dev_err(mv_chan_to_devp(chan), "error on chan %d. intr cause 0x%08x\n", in mv_chan_err_interrupt_handler()
662 chan->idx, intr_cause); in mv_chan_err_interrupt_handler()
664 mv_chan_dump_regs(chan); in mv_chan_err_interrupt_handler()
670 struct mv_xor_chan *chan = data; in mv_xor_interrupt_handler() local
671 u32 intr_cause = mv_chan_get_intr_cause(chan); in mv_xor_interrupt_handler()
673 dev_dbg(mv_chan_to_devp(chan), "intr cause %x\n", intr_cause); in mv_xor_interrupt_handler()
676 mv_chan_err_interrupt_handler(chan, intr_cause); in mv_xor_interrupt_handler()
678 tasklet_schedule(&chan->irq_tasklet); in mv_xor_interrupt_handler()
680 mv_chan_clear_eoc_cause(chan); in mv_xor_interrupt_handler()
685 static void mv_xor_issue_pending(struct dma_chan *chan) in mv_xor_issue_pending() argument
687 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_issue_pending()
947 struct dma_chan *chan, *_chan; in mv_xor_channel_remove() local
959 list_for_each_entry_safe(chan, _chan, &mv_chan->dmadev.channels, in mv_xor_channel_remove()
961 list_del(&chan->device_node); in mv_xor_channel_remove()
1205 struct mv_xor_chan *chan; in mv_xor_probe() local
1224 chan = mv_xor_channel_add(xordev, pdev, i, in mv_xor_probe()
1226 if (IS_ERR(chan)) { in mv_xor_probe()
1227 ret = PTR_ERR(chan); in mv_xor_probe()
1232 xordev->channels[i] = chan; in mv_xor_probe()
1238 struct mv_xor_chan *chan; in mv_xor_probe() local
1253 chan = mv_xor_channel_add(xordev, pdev, i, in mv_xor_probe()
1256 if (IS_ERR(chan)) { in mv_xor_probe()
1257 ret = PTR_ERR(chan); in mv_xor_probe()
1261 xordev->channels[i] = chan; in mv_xor_probe()