diff options
author | Jingchang Lu <jingchang.lu@freescale.com> | 2014-07-01 04:41:03 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-07-25 04:41:50 -0400 |
commit | 211bfef7c2bc8c67e3878e54747e6bb2be3456da (patch) | |
tree | fe97cdf4ba2bb7f09afdc22b7e243242c2ce328d /drivers/dma/fsl-edma.c | |
parent | f892afb07eeecf575179c4747952644a82a92a36 (diff) |
dmaengine: fsl-edma: fix dmamux index calculating error
Signed-off-by: Jingchang Lu <jingchang.lu@freescale.com>
Tested-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/fsl-edma.c')
-rw-r--r-- | drivers/dma/fsl-edma.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c index b396a7fb53ab..24ab3d371954 100644 --- a/drivers/dma/fsl-edma.c +++ b/drivers/dma/fsl-edma.c | |||
@@ -248,11 +248,12 @@ static void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan, | |||
248 | unsigned int slot, bool enable) | 248 | unsigned int slot, bool enable) |
249 | { | 249 | { |
250 | u32 ch = fsl_chan->vchan.chan.chan_id; | 250 | u32 ch = fsl_chan->vchan.chan.chan_id; |
251 | void __iomem *muxaddr = fsl_chan->edma->muxbase[ch / DMAMUX_NR]; | 251 | void __iomem *muxaddr; |
252 | unsigned chans_per_mux, ch_off; | 252 | unsigned chans_per_mux, ch_off; |
253 | 253 | ||
254 | chans_per_mux = fsl_chan->edma->n_chans / DMAMUX_NR; | 254 | chans_per_mux = fsl_chan->edma->n_chans / DMAMUX_NR; |
255 | ch_off = fsl_chan->vchan.chan.chan_id % chans_per_mux; | 255 | ch_off = fsl_chan->vchan.chan.chan_id % chans_per_mux; |
256 | muxaddr = fsl_chan->edma->muxbase[ch / chans_per_mux]; | ||
256 | 257 | ||
257 | if (enable) | 258 | if (enable) |
258 | edma_writeb(fsl_chan->edma, | 259 | edma_writeb(fsl_chan->edma, |
@@ -724,6 +725,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, | |||
724 | { | 725 | { |
725 | struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data; | 726 | struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data; |
726 | struct dma_chan *chan, *_chan; | 727 | struct dma_chan *chan, *_chan; |
728 | unsigned long chans_per_mux = fsl_edma->n_chans / DMAMUX_NR; | ||
727 | 729 | ||
728 | if (dma_spec->args_count != 2) | 730 | if (dma_spec->args_count != 2) |
729 | return NULL; | 731 | return NULL; |
@@ -732,7 +734,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec, | |||
732 | list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { | 734 | list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) { |
733 | if (chan->client_count) | 735 | if (chan->client_count) |
734 | continue; | 736 | continue; |
735 | if ((chan->chan_id / DMAMUX_NR) == dma_spec->args[0]) { | 737 | if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) { |
736 | chan = dma_get_slave_channel(chan); | 738 | chan = dma_get_slave_channel(chan); |
737 | if (chan) { | 739 | if (chan) { |
738 | chan->device->privatecnt++; | 740 | chan->device->privatecnt++; |