|
@@ -24,6 +24,7 @@
|
|
|
#define PPC_INST_ISEL_MASK 0xfc00003e
|
|
|
#define PPC_INST_LSWI 0x7c0004aa
|
|
|
#define PPC_INST_LSWX 0x7c00042a
|
|
|
+#define PPC_INST_LWARX 0x7c000029
|
|
|
#define PPC_INST_LWSYNC 0x7c2004ac
|
|
|
#define PPC_INST_LXVD2X 0x7c000698
|
|
|
#define PPC_INST_MCRXR 0x7c000400
|
|
@@ -55,15 +56,28 @@
|
|
|
#define __PPC_RA(a) (((a) & 0x1f) << 16)
|
|
|
#define __PPC_RB(b) (((b) & 0x1f) << 11)
|
|
|
#define __PPC_RS(s) (((s) & 0x1f) << 21)
|
|
|
+#define __PPC_RT(s) __PPC_RS(s)
|
|
|
#define __PPC_XS(s) ((((s) & 0x1f) << 21) | (((s) & 0x20) >> 5))
|
|
|
#define __PPC_T_TLB(t) (((t) & 0x3) << 21)
|
|
|
#define __PPC_WC(w) (((w) & 0x3) << 21)
|
|
|
+/*
|
|
|
+ * Only use the larx hint bit on 64bit CPUs. Once we verify it doesn't have
|
|
|
+ * any side effects on all 32bit processors, we can do this all the time.
|
|
|
+ */
|
|
|
+#ifdef CONFIG_PPC64
|
|
|
+#define __PPC_EH(eh) (((eh) & 0x1) << 0)
|
|
|
+#else
|
|
|
+#define __PPC_EH(eh) 0
|
|
|
+#endif
|
|
|
|
|
|
/* Deal with instructions that older assemblers aren't aware of */
|
|
|
#define PPC_DCBAL(a, b) stringify_in_c(.long PPC_INST_DCBAL | \
|
|
|
__PPC_RA(a) | __PPC_RB(b))
|
|
|
#define PPC_DCBZL(a, b) stringify_in_c(.long PPC_INST_DCBZL | \
|
|
|
__PPC_RA(a) | __PPC_RB(b))
|
|
|
+#define PPC_LWARX(t, a, b, eh) stringify_in_c(.long PPC_INST_LWARX | \
|
|
|
+ __PPC_RT(t) | __PPC_RA(a) | \
|
|
|
+ __PPC_RB(b) | __PPC_EH(eh))
|
|
|
#define PPC_MSGSND(b) stringify_in_c(.long PPC_INST_MSGSND | \
|
|
|
__PPC_RB(b))
|
|
|
#define PPC_RFCI stringify_in_c(.long PPC_INST_RFCI)
|