Commit 900325a6ce33995688b7a680a34e7698f16f4d72

Authored by Dan Williams
1 parent 0c33e1ca3d

fsldma: fix off by one in dma_halt

Prevent dev_err from firing even if we successfully detected 'dma-idle'
before the full 1ms timeout has elapsed.

Acked-by: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

Showing 1 changed file with 6 additions and 2 deletions Side-by-side Diff

drivers/dma/fsldma.c
... ... @@ -158,7 +158,8 @@
158 158  
159 159 static void dma_halt(struct fsl_dma_chan *fsl_chan)
160 160 {
161   - int i = 0;
  161 + int i;
  162 +
162 163 DMA_OUT(fsl_chan, &fsl_chan->reg_base->mr,
163 164 DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) | FSL_DMA_MR_CA,
164 165 32);
165 166  
... ... @@ -166,8 +167,11 @@
166 167 DMA_IN(fsl_chan, &fsl_chan->reg_base->mr, 32) & ~(FSL_DMA_MR_CS
167 168 | FSL_DMA_MR_EMS_EN | FSL_DMA_MR_CA), 32);
168 169  
169   - while (!dma_is_idle(fsl_chan) && (i++ < 100))
  170 + for (i = 0; i < 100; i++) {
  171 + if (dma_is_idle(fsl_chan))
  172 + break;
170 173 udelay(10);
  174 + }
171 175 if (i >= 100 && !dma_is_idle(fsl_chan))
172 176 dev_err(fsl_chan->dev, "DMA halt timeout!\n");
173 177 }