aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/fsldma.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/fsldma.c')
-rw-r--r--drivers/dma/fsldma.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index cc9a68158d99..5dfedf326573 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -57,12 +57,12 @@ static void dma_init(struct fsl_dma_chan *fsl_chan)
57 57
58} 58}
59 59
60static void set_sr(struct fsl_dma_chan *fsl_chan, dma_addr_t val) 60static void set_sr(struct fsl_dma_chan *fsl_chan, u32 val)
61{ 61{
62 DMA_OUT(fsl_chan, &fsl_chan->reg_base->sr, val, 32); 62 DMA_OUT(fsl_chan, &fsl_chan->reg_base->sr, val, 32);
63} 63}
64 64
65static dma_addr_t get_sr(struct fsl_dma_chan *fsl_chan) 65static u32 get_sr(struct fsl_dma_chan *fsl_chan)
66{ 66{
67 return DMA_IN(fsl_chan, &fsl_chan->reg_base->sr, 32); 67 return DMA_IN(fsl_chan, &fsl_chan->reg_base->sr, 32);
68} 68}
@@ -436,7 +436,7 @@ static struct dma_async_tx_descriptor *fsl_dma_prep_memcpy(
436 dev_dbg(fsl_chan->dev, "new link desc alloc %p\n", new); 436 dev_dbg(fsl_chan->dev, "new link desc alloc %p\n", new);
437#endif 437#endif
438 438
439 copy = min(len, FSL_DMA_BCR_MAX_CNT); 439 copy = min(len, (size_t)FSL_DMA_BCR_MAX_CNT);
440 440
441 set_desc_cnt(fsl_chan, &new->hw, copy); 441 set_desc_cnt(fsl_chan, &new->hw, copy);
442 set_desc_src(fsl_chan, &new->hw, dma_src); 442 set_desc_src(fsl_chan, &new->hw, dma_src);
@@ -581,8 +581,8 @@ static void fsl_chan_xfer_ld_queue(struct fsl_dma_chan *fsl_chan)
581 if (ld_node != &fsl_chan->ld_queue) { 581 if (ld_node != &fsl_chan->ld_queue) {
582 /* Get the ld start address from ld_queue */ 582 /* Get the ld start address from ld_queue */
583 next_dest_addr = to_fsl_desc(ld_node)->async_tx.phys; 583 next_dest_addr = to_fsl_desc(ld_node)->async_tx.phys;
584 dev_dbg(fsl_chan->dev, "xfer LDs staring from 0x%016llx\n", 584 dev_dbg(fsl_chan->dev, "xfer LDs staring from %p\n",
585 (u64)next_dest_addr); 585 (void *)next_dest_addr);
586 set_cdar(fsl_chan, next_dest_addr); 586 set_cdar(fsl_chan, next_dest_addr);
587 dma_start(fsl_chan); 587 dma_start(fsl_chan);
588 } else { 588 } else {
@@ -662,7 +662,7 @@ static enum dma_status fsl_dma_is_complete(struct dma_chan *chan,
662static irqreturn_t fsl_dma_chan_do_interrupt(int irq, void *data) 662static irqreturn_t fsl_dma_chan_do_interrupt(int irq, void *data)
663{ 663{
664 struct fsl_dma_chan *fsl_chan = (struct fsl_dma_chan *)data; 664 struct fsl_dma_chan *fsl_chan = (struct fsl_dma_chan *)data;
665 dma_addr_t stat; 665 u32 stat;
666 666
667 stat = get_sr(fsl_chan); 667 stat = get_sr(fsl_chan);
668 dev_dbg(fsl_chan->dev, "event: channel %d, stat = 0x%x\n", 668 dev_dbg(fsl_chan->dev, "event: channel %d, stat = 0x%x\n",
@@ -681,9 +681,8 @@ static irqreturn_t fsl_dma_chan_do_interrupt(int irq, void *data)
681 */ 681 */
682 if (stat & FSL_DMA_SR_EOSI) { 682 if (stat & FSL_DMA_SR_EOSI) {
683 dev_dbg(fsl_chan->dev, "event: End-of-segments INT\n"); 683 dev_dbg(fsl_chan->dev, "event: End-of-segments INT\n");
684 dev_dbg(fsl_chan->dev, "event: clndar 0x%016llx, " 684 dev_dbg(fsl_chan->dev, "event: clndar %p, nlndar %p\n",
685 "nlndar 0x%016llx\n", (u64)get_cdar(fsl_chan), 685 (void *)get_cdar(fsl_chan), (void *)get_ndar(fsl_chan));
686 (u64)get_ndar(fsl_chan));
687 stat &= ~FSL_DMA_SR_EOSI; 686 stat &= ~FSL_DMA_SR_EOSI;
688 } 687 }
689 688
@@ -726,12 +725,15 @@ static void dma_do_tasklet(unsigned long data)
726 fsl_chan_ld_cleanup(fsl_chan); 725 fsl_chan_ld_cleanup(fsl_chan);
727} 726}
728 727
728#ifdef FSL_DMA_CALLBACKTEST
729static void fsl_dma_callback_test(struct fsl_dma_chan *fsl_chan) 729static void fsl_dma_callback_test(struct fsl_dma_chan *fsl_chan)
730{ 730{
731 if (fsl_chan) 731 if (fsl_chan)
732 dev_info(fsl_chan->dev, "selftest: callback is ok!\n"); 732 dev_info(fsl_chan->dev, "selftest: callback is ok!\n");
733} 733}
734#endif
734 735
736#ifdef CONFIG_FSL_DMA_SELFTEST
735static int fsl_dma_self_test(struct fsl_dma_chan *fsl_chan) 737static int fsl_dma_self_test(struct fsl_dma_chan *fsl_chan)
736{ 738{
737 struct dma_chan *chan; 739 struct dma_chan *chan;
@@ -837,9 +839,9 @@ static int fsl_dma_self_test(struct fsl_dma_chan *fsl_chan)
837 if (err) { 839 if (err) {
838 for (i = 0; (*(src + i) == *(dest + i)) && (i < test_size); 840 for (i = 0; (*(src + i) == *(dest + i)) && (i < test_size);
839 i++); 841 i++);
840 dev_err(fsl_chan->dev, "selftest: Test failed, data %d/%d is " 842 dev_err(fsl_chan->dev, "selftest: Test failed, data %d/%ld is "
841 "error! src 0x%x, dest 0x%x\n", 843 "error! src 0x%x, dest 0x%x\n",
842 i, test_size, *(src + i), *(dest + i)); 844 i, (long)test_size, *(src + i), *(dest + i));
843 } 845 }
844 846
845free_resources: 847free_resources:
@@ -848,6 +850,7 @@ out:
848 kfree(src); 850 kfree(src);
849 return err; 851 return err;
850} 852}
853#endif
851 854
852static int __devinit of_fsl_dma_chan_probe(struct of_device *dev, 855static int __devinit of_fsl_dma_chan_probe(struct of_device *dev,
853 const struct of_device_id *match) 856 const struct of_device_id *match)
@@ -1008,8 +1011,8 @@ static int __devinit of_fsl_dma_probe(struct of_device *dev,
1008 } 1011 }
1009 1012
1010 dev_info(&dev->dev, "Probe the Freescale DMA driver for %s " 1013 dev_info(&dev->dev, "Probe the Freescale DMA driver for %s "
1011 "controller at 0x%08x...\n", 1014 "controller at %p...\n",
1012 match->compatible, fdev->reg.start); 1015 match->compatible, (void *)fdev->reg.start);
1013 fdev->reg_base = ioremap(fdev->reg.start, fdev->reg.end 1016 fdev->reg_base = ioremap(fdev->reg.start, fdev->reg.end
1014 - fdev->reg.start + 1); 1017 - fdev->reg.start + 1);
1015 1018