]> git.sur5r.net Git - u-boot/commitdiff
arc: Fine-tune implementation of memory barriers
authorAlexey Brodkin <abrodkin@synopsys.com>
Wed, 21 Feb 2018 09:58:00 +0000 (12:58 +0300)
committerAlexey Brodkin <abrodkin@synopsys.com>
Wed, 21 Mar 2018 13:21:34 +0000 (16:21 +0300)
We improve on 2 things:
 1. Only ARC HS family has "dmb" instructions so do compile-time
    check for automatically defined macro __ARCHS__.
    Previous check for ARCv2 ISA was not good enough because ARC EM
    family is v2 ISA as well but still "dmb" instaruction is not
    supported in EM family.

 2. Still if there's no dedicated instruction for memory barrier
    let's at least insert compile-time barrier to make sure
    compiler deosn't reorder critical memory operations.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
arch/arc/include/asm/io.h

index a12303bc7367cd1b709357ca402a57443b0e5363..060cdf637bc0e8d7dcd3ae0133e6c3d37ff6c7f7 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/types.h>
 #include <asm/byteorder.h>
 
-#ifdef CONFIG_ISA_ARCV2
+#ifdef __ARCHS__
 
 /*
  * ARCv2 based HS38 cores are in-order issue, but still weakly ordered
 #define mb()   asm volatile("sync\n" : : : "memory")
 #endif
 
-#ifdef CONFIG_ISA_ARCV2
+#ifdef __ARCHS__
 #define __iormb()              rmb()
 #define __iowmb()              wmb()
 #else
-#define __iormb()              do { } while (0)
-#define __iowmb()              do { } while (0)
+#define __iormb()              asm volatile("" : : : "memory")
+#define __iowmb()              asm volatile("" : : : "memory")
 #endif
 
 static inline void sync(void)