Commit 49ce7d35 authored by Tetsuo Yamabe's avatar Tetsuo Yamabe Committed by Juha Yrjola

ARM: OMAP: DSP: Fix shared memory synchronization

This fix assures DMA domain is kept awake till ARM completes
its access to DSP internal memories.
Signed-off-by: default avatarTetsuo Yamabe <tetsuo.yamabe@nokia.com>
Signed-off-by: default avatarJuha Yrjola <juha.yrjola@solidboot.com>
parent 9ba03e67
...@@ -170,7 +170,7 @@ extern void dsp_dbg_stop(void); ...@@ -170,7 +170,7 @@ extern void dsp_dbg_stop(void);
extern int ipbuf_is_held(unsigned char tid, unsigned short bid); extern int ipbuf_is_held(unsigned char tid, unsigned short bid);
extern void dsp_mem_sync_inc(void); extern int dsp_mem_sync_inc(void);
extern int dsp_mem_sync_config(struct mem_sync_struct *sync); extern int dsp_mem_sync_config(struct mem_sync_struct *sync);
extern enum dsp_mem_type_e dsp_mem_type(void *vadr, size_t len); extern enum dsp_mem_type_e dsp_mem_type(void *vadr, size_t len);
extern int dsp_address_validate(void *p, size_t len, char *fmt, ...); extern int dsp_address_validate(void *p, size_t len, char *fmt, ...);
......
...@@ -155,17 +155,18 @@ static __inline__ unsigned long lineup_offset(unsigned long adr, ...@@ -155,17 +155,18 @@ static __inline__ unsigned long lineup_offset(unsigned long adr,
return newadr; return newadr;
} }
void dsp_mem_sync_inc(void) int dsp_mem_sync_inc(void)
{ {
/* if (dsp_mem_enable((void *)dspmem_base) < 0)
* FIXME: dsp_mem_enable()!!! return -1;
*/
if (mem_sync.DARAM) if (mem_sync.DARAM)
mem_sync.DARAM->ad_arm++; mem_sync.DARAM->ad_arm++;
if (mem_sync.SARAM) if (mem_sync.SARAM)
mem_sync.SARAM->ad_arm++; mem_sync.SARAM->ad_arm++;
if (mem_sync.SDRAM) if (mem_sync.SDRAM)
mem_sync.SDRAM->ad_arm++; mem_sync.SDRAM->ad_arm++;
dsp_mem_disable((void *)dspmem_base);
return 0;
} }
/* /*
......
...@@ -1914,7 +1914,11 @@ int dsp_tadd(unsigned char minor, unsigned long adr) ...@@ -1914,7 +1914,11 @@ int dsp_tadd(unsigned char minor, unsigned long adr)
arg.argc = 2; arg.argc = 2;
arg.argv = argv; arg.argv = argv;
dsp_mem_sync_inc(); if (dsp_mem_sync_inc() < 0) {
printk(KERN_ERR "omapdsp: memory sync failed!\n");
ret = -EBUSY;
goto fail_out;
}
dsp_mbcmd_send_and_wait_exarg(&mb, &arg, &cfg_wait_q); dsp_mbcmd_send_and_wait_exarg(&mb, &arg, &cfg_wait_q);
tid = cfg_tid; tid = cfg_tid;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment