Commit 900325a6ce33995688b7a680a34e7698f16f4d72
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 | } |