[U-Boot] [PATCH] arc: Fine-tune implementation of memory barriers
Alexey Brodkin
Alexey.Brodkin at synopsys.com
Wed Feb 21 10:55:47 UTC 2018
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 at synopsys.com>
---
arch/arc/include/asm/io.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arc/include/asm/io.h b/arch/arc/include/asm/io.h
index a12303bc7367..060cdf637bc0 100644
--- a/arch/arc/include/asm/io.h
+++ b/arch/arc/include/asm/io.h
@@ -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
@@ -42,12 +42,12 @@
#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)
--
2.14.3
More information about the U-Boot
mailing list