|
@@ -36,9 +36,21 @@
|
|
|
* not. The macros handles invoking the asm with or without the
|
|
|
* register argument as appropriate.
|
|
|
*/
|
|
|
-#define __TLBI_0(op, arg) asm ("tlbi " #op)
|
|
|
-#define __TLBI_1(op, arg) asm ("tlbi " #op ", %0" : : "r" (arg))
|
|
|
-#define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)
|
|
|
+#define __TLBI_0(op, arg) asm ("tlbi " #op "\n" \
|
|
|
+ ALTERNATIVE("nop\n nop", \
|
|
|
+ "dsb ish\n tlbi " #op, \
|
|
|
+ ARM64_WORKAROUND_REPEAT_TLBI, \
|
|
|
+ CONFIG_QCOM_FALKOR_ERRATUM_1009) \
|
|
|
+ : : )
|
|
|
+
|
|
|
+#define __TLBI_1(op, arg) asm ("tlbi " #op ", %0\n" \
|
|
|
+ ALTERNATIVE("nop\n nop", \
|
|
|
+ "dsb ish\n tlbi " #op ", %0", \
|
|
|
+ ARM64_WORKAROUND_REPEAT_TLBI, \
|
|
|
+ CONFIG_QCOM_FALKOR_ERRATUM_1009) \
|
|
|
+ : : "r" (arg))
|
|
|
+
|
|
|
+#define __TLBI_N(op, arg, n, ...) __TLBI_##n(op, arg)
|
|
|
|
|
|
#define __tlbi(op, ...) __TLBI_N(op, ##__VA_ARGS__, 1, 0)
|
|
|
|