Merge tag 'mips_5.1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[muen/linux.git] / arch / mips / include / asm / barrier.h
index b7f6ac5e513c9a47e0943c768666f2ccab2144e0..b865e317a14f70298ed47d77a12a277f5472156b 100644 (file)
  */
 #define STYPE_SYNC_MB 0x10
 
+/*
+ * stype 0x14 - A completion barrier specific to global invalidations
+ *
+ * When a sync instruction of this type completes any preceding GINVI or GINVT
+ * operation has been globalized & completed on all coherent CPUs. Anything
+ * that the GINV* instruction should invalidate will have been invalidated on
+ * all coherent CPUs when this instruction completes. It is implementation
+ * specific whether the GINV* instructions themselves will ensure completion,
+ * or this sync type will.
+ *
+ * In systems implementing global invalidates (ie. with Config5.GI == 2 or 3)
+ * this sync type also requires that previous SYNCI operations have completed.
+ */
+#define STYPE_GINV     0x14
 
 #ifdef CONFIG_CPU_HAS_SYNC
 #define __sync()                               \
 #define loongson_llsc_mb()     do { } while (0)
 #endif
 
+static inline void sync_ginv(void)
+{
+       asm volatile("sync\t%0" :: "i"(STYPE_GINV));
+}
+
 #include <asm-generic/barrier.h>
 
 #endif /* __ASM_BARRIER_H */