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>
This commit is contained in:
parent
9b9bfded62
commit
ea8538a039
1 changed files with 7 additions and 1 deletions
|
@ -206,10 +206,16 @@ static inline unsigned long get_dma_curr_addr(unsigned int channel)
|
|||
|
||||
static inline void set_dma_sg(unsigned int channel, struct dmasg *sg, int ndsize)
|
||||
{
|
||||
/* Make sure the internal data buffers in the core are drained
|
||||
* so that the DMA descriptors are completely written when the
|
||||
* DMA engine goes to fetch them below.
|
||||
*/
|
||||
SSYNC();
|
||||
|
||||
dma_ch[channel].regs->next_desc_ptr = sg;
|
||||
dma_ch[channel].regs->cfg =
|
||||
(dma_ch[channel].regs->cfg & ~(0xf << 8)) |
|
||||
((ndsize & 0xf) << 8);
|
||||
dma_ch[channel].regs->next_desc_ptr = sg;
|
||||
}
|
||||
|
||||
static inline int dma_channel_active(unsigned int channel)
|
||||
|
|
Loading…
Reference in a new issue