]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dmaengine: fsl-edma: fix dmamux index calculating error
authorJingchang Lu <jingchang.lu@freescale.com>
Tue, 1 Jul 2014 08:41:03 +0000 (16:41 +0800)
committerVinod Koul <vinod.koul@intel.com>
Fri, 25 Jul 2014 08:41:50 +0000 (14:11 +0530)
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>
drivers/dma/fsl-edma.c

index b396a7fb53abb5df611e4fbd551000758f876100..24ab3d37195405f57df5937bb294291ebcd884e1 100644 (file)
@@ -248,11 +248,12 @@ static void fsl_edma_chan_mux(struct fsl_edma_chan *fsl_chan,
                        unsigned int slot, bool enable)
 {
        u32 ch = fsl_chan->vchan.chan.chan_id;
-       void __iomem *muxaddr = fsl_chan->edma->muxbase[ch / DMAMUX_NR];
+       void __iomem *muxaddr;
        unsigned chans_per_mux, ch_off;
 
        chans_per_mux = fsl_chan->edma->n_chans / DMAMUX_NR;
        ch_off = fsl_chan->vchan.chan.chan_id % chans_per_mux;
+       muxaddr = fsl_chan->edma->muxbase[ch / chans_per_mux];
 
        if (enable)
                edma_writeb(fsl_chan->edma,
@@ -724,6 +725,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec,
 {
        struct fsl_edma_engine *fsl_edma = ofdma->of_dma_data;
        struct dma_chan *chan, *_chan;
+       unsigned long chans_per_mux = fsl_edma->n_chans / DMAMUX_NR;
 
        if (dma_spec->args_count != 2)
                return NULL;
@@ -732,7 +734,7 @@ static struct dma_chan *fsl_edma_xlate(struct of_phandle_args *dma_spec,
        list_for_each_entry_safe(chan, _chan, &fsl_edma->dma_dev.channels, device_node) {
                if (chan->client_count)
                        continue;
-               if ((chan->chan_id / DMAMUX_NR) == dma_spec->args[0]) {
+               if ((chan->chan_id / chans_per_mux) == dma_spec->args[0]) {
                        chan = dma_get_slave_channel(chan);
                        if (chan) {
                                chan->device->privatecnt++;