arm64: barriers: introduce nops and __nops macros for NOP sequences
authorWill Deacon <will.deacon@arm.com>
Tue, 6 Sep 2016 15:40:23 +0000 (16:40 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 9 Sep 2016 17:12:28 +0000 (18:12 +0100)
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>
arch/arm64/include/asm/assembler.h
arch/arm64/include/asm/barrier.h

index f09a5ae48a44a007f6e1f4af713fab836fb7c6f5..28bfe6132eb69240648aee4ce754dfaaee2b4aa0 100644 (file)
        dmb     \opt
        .endm
 
+/*
+ * NOP sequence
+ */
+       .macro  nops, num
+       .rept   \num
+       nop
+       .endr
+       .endm
+
 /*
  * Emit an entry into the exception table
  */
index 4eea7f618dcefff4be6e3f4d99c503cba5e7c779..4e0497f581a05ea791564badc73ffa7a1f4a0699 100644 (file)
@@ -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")