Commit 81b23ba6 authored by Guo Ren's avatar Guo Ren

csky: Fixup mb() synchronization problem

The mb() is the superset of dma and smp. Using bar.xxx to implement
mb() will cause problem when sync data with dma device, becasue
bar.xxx couldn't guarantee bus transactions finished at outside bus
level.

We must use sync.s instead of bar.xxx for dma data synchronization
and it will guarantee retirement after getting the bus bresponse.

Changes for V2:
 - Use sync.s for all mb, rmb, wmb, dma_wmb, dma_rmb.
Signed-off-by: default avatarGuo Ren <ren_guo@c-sky.com>
Cc: Arnd Bergmann <arnd@arndb.de>
parent 609488bc
...@@ -9,11 +9,12 @@ ...@@ -9,11 +9,12 @@
#define nop() asm volatile ("nop\n":::"memory") #define nop() asm volatile ("nop\n":::"memory")
/* /*
* sync: completion barrier * sync: completion barrier, all sync.xx instructions
* sync.s: completion barrier and shareable to other cores * guarantee the last response recieved by bus transaction
* sync.i: completion barrier with flush cpu pipeline * made by ld/st instructions before sync.s
* sync.is: completion barrier with flush cpu pipeline and shareable to * sync.s: inherit from sync, but also shareable to other cores
* other cores * sync.i: inherit from sync, but also flush cpu pipeline
* sync.is: the same with sync.i + sync.s
* *
* bar.brwarw: ordering barrier for all load/store instructions before it * bar.brwarw: ordering barrier for all load/store instructions before it
* bar.brwarws: ordering barrier for all load/store instructions before it * bar.brwarws: ordering barrier for all load/store instructions before it
...@@ -27,9 +28,7 @@ ...@@ -27,9 +28,7 @@
*/ */
#ifdef CONFIG_CPU_HAS_CACHEV2 #ifdef CONFIG_CPU_HAS_CACHEV2
#define mb() asm volatile ("bar.brwarw\n":::"memory") #define mb() asm volatile ("sync.s\n":::"memory")
#define rmb() asm volatile ("bar.brar\n":::"memory")
#define wmb() asm volatile ("bar.bwaw\n":::"memory")
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
#define __smp_mb() asm volatile ("bar.brwarws\n":::"memory") #define __smp_mb() asm volatile ("bar.brwarws\n":::"memory")
......
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