Lines Matching refs:chan
33 static void mv_xor_issue_pending(struct dma_chan *chan);
35 #define to_mv_xor_chan(chan) \ argument
36 container_of(chan, struct mv_xor_chan, dmachan)
41 #define mv_chan_to_devp(chan) \ argument
42 ((chan)->dmadev.dev)
82 static u32 mv_chan_get_current_desc(struct mv_xor_chan *chan) in mv_chan_get_current_desc() argument
84 return readl_relaxed(XOR_CURR_DESC(chan)); in mv_chan_get_current_desc()
87 static void mv_chan_set_next_descriptor(struct mv_xor_chan *chan, in mv_chan_set_next_descriptor() argument
90 writel_relaxed(next_desc_addr, XOR_NEXT_DESC(chan)); in mv_chan_set_next_descriptor()
93 static void mv_chan_unmask_interrupts(struct mv_xor_chan *chan) in mv_chan_unmask_interrupts() argument
95 u32 val = readl_relaxed(XOR_INTR_MASK(chan)); in mv_chan_unmask_interrupts()
96 val |= XOR_INTR_MASK_VALUE << (chan->idx * 16); in mv_chan_unmask_interrupts()
97 writel_relaxed(val, XOR_INTR_MASK(chan)); in mv_chan_unmask_interrupts()
100 static u32 mv_chan_get_intr_cause(struct mv_xor_chan *chan) in mv_chan_get_intr_cause() argument
102 u32 intr_cause = readl_relaxed(XOR_INTR_CAUSE(chan)); in mv_chan_get_intr_cause()
103 intr_cause = (intr_cause >> (chan->idx * 16)) & 0xFFFF; in mv_chan_get_intr_cause()
107 static void mv_xor_device_clear_eoc_cause(struct mv_xor_chan *chan) in mv_xor_device_clear_eoc_cause() argument
112 val = ~(val << (chan->idx * 16)); in mv_xor_device_clear_eoc_cause()
113 dev_dbg(mv_chan_to_devp(chan), "%s, val 0x%08x\n", __func__, val); in mv_xor_device_clear_eoc_cause()
114 writel_relaxed(val, XOR_INTR_CAUSE(chan)); in mv_xor_device_clear_eoc_cause()
117 static void mv_xor_device_clear_err_status(struct mv_xor_chan *chan) in mv_xor_device_clear_err_status() argument
119 u32 val = 0xFFFF0000 >> (chan->idx * 16); in mv_xor_device_clear_err_status()
120 writel_relaxed(val, XOR_INTR_CAUSE(chan)); in mv_xor_device_clear_err_status()
123 static void mv_set_mode(struct mv_xor_chan *chan, in mv_set_mode() argument
127 u32 config = readl_relaxed(XOR_CONFIG(chan)); in mv_set_mode()
137 dev_err(mv_chan_to_devp(chan), in mv_set_mode()
153 writel_relaxed(config, XOR_CONFIG(chan)); in mv_set_mode()
154 chan->current_type = type; in mv_set_mode()
157 static void mv_chan_activate(struct mv_xor_chan *chan) in mv_chan_activate() argument
159 dev_dbg(mv_chan_to_devp(chan), " activate chan.\n"); in mv_chan_activate()
162 writel(BIT(0), XOR_ACTIVATION(chan)); in mv_chan_activate()
165 static char mv_chan_is_busy(struct mv_xor_chan *chan) in mv_chan_is_busy() argument
167 u32 state = readl_relaxed(XOR_ACTIVATION(chan)); in mv_chan_is_busy()
348 struct mv_xor_chan *chan = (struct mv_xor_chan *) data; in mv_xor_tasklet() local
350 spin_lock_bh(&chan->lock); in mv_xor_tasklet()
351 mv_xor_slot_cleanup(chan); in mv_xor_tasklet()
352 spin_unlock_bh(&chan->lock); in mv_xor_tasklet()
413 struct mv_xor_chan *mv_chan = to_mv_xor_chan(tx->chan); in mv_xor_tx_submit()
462 static int mv_xor_alloc_chan_resources(struct dma_chan *chan) in mv_xor_alloc_chan_resources() argument
467 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_alloc_chan_resources()
484 dma_async_tx_descriptor_init(&slot->async_tx, chan); in mv_xor_alloc_chan_resources()
511 mv_xor_prep_dma_xor(struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src, in mv_xor_prep_dma_xor() argument
514 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_prep_dma_xor()
543 mv_xor_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, in mv_xor_prep_dma_memcpy() argument
550 return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags); in mv_xor_prep_dma_memcpy()
554 mv_xor_prep_dma_interrupt(struct dma_chan *chan, unsigned long flags) in mv_xor_prep_dma_interrupt() argument
556 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_prep_dma_interrupt()
568 return mv_xor_prep_dma_xor(chan, dest, &src, 1, len, flags); in mv_xor_prep_dma_interrupt()
571 static void mv_xor_free_chan_resources(struct dma_chan *chan) in mv_xor_free_chan_resources() argument
573 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_free_chan_resources()
614 static enum dma_status mv_xor_status(struct dma_chan *chan, in mv_xor_status() argument
618 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_status()
621 ret = dma_cookie_status(chan, cookie, txstate); in mv_xor_status()
629 return dma_cookie_status(chan, cookie, txstate); in mv_xor_status()
632 static void mv_dump_xor_regs(struct mv_xor_chan *chan) in mv_dump_xor_regs() argument
636 val = readl_relaxed(XOR_CONFIG(chan)); in mv_dump_xor_regs()
637 dev_err(mv_chan_to_devp(chan), "config 0x%08x\n", val); in mv_dump_xor_regs()
639 val = readl_relaxed(XOR_ACTIVATION(chan)); in mv_dump_xor_regs()
640 dev_err(mv_chan_to_devp(chan), "activation 0x%08x\n", val); in mv_dump_xor_regs()
642 val = readl_relaxed(XOR_INTR_CAUSE(chan)); in mv_dump_xor_regs()
643 dev_err(mv_chan_to_devp(chan), "intr cause 0x%08x\n", val); in mv_dump_xor_regs()
645 val = readl_relaxed(XOR_INTR_MASK(chan)); in mv_dump_xor_regs()
646 dev_err(mv_chan_to_devp(chan), "intr mask 0x%08x\n", val); in mv_dump_xor_regs()
648 val = readl_relaxed(XOR_ERROR_CAUSE(chan)); in mv_dump_xor_regs()
649 dev_err(mv_chan_to_devp(chan), "error cause 0x%08x\n", val); in mv_dump_xor_regs()
651 val = readl_relaxed(XOR_ERROR_ADDR(chan)); in mv_dump_xor_regs()
652 dev_err(mv_chan_to_devp(chan), "error addr 0x%08x\n", val); in mv_dump_xor_regs()
655 static void mv_xor_err_interrupt_handler(struct mv_xor_chan *chan, in mv_xor_err_interrupt_handler() argument
659 dev_dbg(mv_chan_to_devp(chan), "ignoring address decode error\n"); in mv_xor_err_interrupt_handler()
663 dev_err(mv_chan_to_devp(chan), "error on chan %d. intr cause 0x%08x\n", in mv_xor_err_interrupt_handler()
664 chan->idx, intr_cause); in mv_xor_err_interrupt_handler()
666 mv_dump_xor_regs(chan); in mv_xor_err_interrupt_handler()
672 struct mv_xor_chan *chan = data; in mv_xor_interrupt_handler() local
673 u32 intr_cause = mv_chan_get_intr_cause(chan); in mv_xor_interrupt_handler()
675 dev_dbg(mv_chan_to_devp(chan), "intr cause %x\n", intr_cause); in mv_xor_interrupt_handler()
678 mv_xor_err_interrupt_handler(chan, intr_cause); in mv_xor_interrupt_handler()
680 tasklet_schedule(&chan->irq_tasklet); in mv_xor_interrupt_handler()
682 mv_xor_device_clear_eoc_cause(chan); in mv_xor_interrupt_handler()
687 static void mv_xor_issue_pending(struct dma_chan *chan) in mv_xor_issue_pending() argument
689 struct mv_xor_chan *mv_chan = to_mv_xor_chan(chan); in mv_xor_issue_pending()
949 struct dma_chan *chan, *_chan; in mv_xor_channel_remove() local
961 list_for_each_entry_safe(chan, _chan, &mv_chan->dmadev.channels, in mv_xor_channel_remove()
963 list_del(&chan->device_node); in mv_xor_channel_remove()
1173 struct mv_xor_chan *chan; in mv_xor_probe() local
1191 chan = mv_xor_channel_add(xordev, pdev, i, in mv_xor_probe()
1193 if (IS_ERR(chan)) { in mv_xor_probe()
1194 ret = PTR_ERR(chan); in mv_xor_probe()
1199 xordev->channels[i] = chan; in mv_xor_probe()
1205 struct mv_xor_chan *chan; in mv_xor_probe() local
1220 chan = mv_xor_channel_add(xordev, pdev, i, in mv_xor_probe()
1222 if (IS_ERR(chan)) { in mv_xor_probe()
1223 ret = PTR_ERR(chan); in mv_xor_probe()
1227 xordev->channels[i] = chan; in mv_xor_probe()