diff options
author | Sonic Zhang <sonic.zhang@analog.com> | 2009-06-01 00:49:32 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-06-12 06:11:57 -0400 |
commit | ea8538a039607cd959d28ed10086484e051ce7db (patch) | |
tree | da311d3d0e84af6398a58384fe937684df8dcdcc /arch/blackfin/include/asm/dma.h | |
parent | 9b9bfded623cffb4259b95e5419404015dba361f (diff) |
Blackfin: add SSYNC to set_dma_sg() for descriptor fetching
Make sure the internal core buffers are flushed before telling the DMA
engine to fetch the descriptor structure so that it gets the right values.
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/include/asm/dma.h')
-rw-r--r-- | arch/blackfin/include/asm/dma.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/blackfin/include/asm/dma.h b/arch/blackfin/include/asm/dma.h index 46c56185417a..c9a59622e23f 100644 --- a/arch/blackfin/include/asm/dma.h +++ b/arch/blackfin/include/asm/dma.h | |||
@@ -206,10 +206,16 @@ static inline unsigned long get_dma_curr_addr(unsigned int channel) | |||
206 | 206 | ||
207 | static inline void set_dma_sg(unsigned int channel, struct dmasg *sg, int ndsize) | 207 | static inline void set_dma_sg(unsigned int channel, struct dmasg *sg, int ndsize) |
208 | { | 208 | { |
209 | /* Make sure the internal data buffers in the core are drained | ||
210 | * so that the DMA descriptors are completely written when the | ||
211 | * DMA engine goes to fetch them below. | ||
212 | */ | ||
213 | SSYNC(); | ||
214 | |||
215 | dma_ch[channel].regs->next_desc_ptr = sg; | ||
209 | dma_ch[channel].regs->cfg = | 216 | dma_ch[channel].regs->cfg = |
210 | (dma_ch[channel].regs->cfg & ~(0xf << 8)) | | 217 | (dma_ch[channel].regs->cfg & ~(0xf << 8)) | |
211 | ((ndsize & 0xf) << 8); | 218 | ((ndsize & 0xf) << 8); |
212 | dma_ch[channel].regs->next_desc_ptr = sg; | ||
213 | } | 219 | } |
214 | 220 | ||
215 | static inline int dma_channel_active(unsigned int channel) | 221 | static inline int dma_channel_active(unsigned int channel) |