Browse Source

arm64: barriers: introduce nops and __nops macros for NOP sequences

NOP sequences tend to get used for padding out alternative sections
and uarch-specific pipeline flushes in errata workarounds.

This patch adds macros for generating these sequences as both inline
asm blocks, but also as strings suitable for embedding in other asm
blocks directly.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Will Deacon 9 years ago
parent
commit
f99a250cb6
2 changed files with 12 additions and 0 deletions
  1. 9 0
      arch/arm64/include/asm/assembler.h
  2. 3 0
      arch/arm64/include/asm/barrier.h

+ 9 - 0
arch/arm64/include/asm/assembler.h

@@ -86,6 +86,15 @@
 	dmb	\opt
 	.endm
 
+/*
+ * NOP sequence
+ */
+	.macro	nops, num
+	.rept	\num
+	nop
+	.endr
+	.endm
+
 /*
  * Emit an entry into the exception table
  */

+ 3 - 0
arch/arm64/include/asm/barrier.h

@@ -20,6 +20,9 @@
 
 #ifndef __ASSEMBLY__
 
+#define __nops(n)	".rept	" #n "\nnop\n.endr\n"
+#define nops(n)		asm volatile(__nops(n))
+
 #define sev()		asm volatile("sev" : : : "memory")
 #define wfe()		asm volatile("wfe" : : : "memory")
 #define wfi()		asm volatile("wfi" : : : "memory")