OSDN Git Service

powerpc: add ISA v3.0 / v3.1 wait opcode macro
authorNicholas Piggin <npiggin@gmail.com>
Tue, 20 Sep 2022 12:22:58 +0000 (22:22 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 28 Sep 2022 09:22:10 +0000 (19:22 +1000)
The wait instruction encoding changed between ISA v2.07 and ISA v3.0.
In v3.1 the instruction gained a new field.

Update the PPC_WAIT macro to the current encoding. Rename the older
incompatible one with a _v203 suffix as it was introduced in v2.03
(the WC field was introduced in v2.07 but the kernel only uses WC=0).

Reviewed-by: Segher Boessenkool <segher@kernel.crashing.org>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220920122259.363092-1-npiggin@gmail.com
arch/powerpc/include/asm/ppc-opcode.h
arch/powerpc/kernel/idle_64e.S

index c6d7241..21e33e4 100644 (file)
 #define __PPC_XSP(s)   ((((s) & 0x1e) | (((s) >> 5) & 0x1)) << 21)
 #define __PPC_XTP(s)   __PPC_XSP(s)
 #define __PPC_T_TLB(t) (((t) & 0x3) << 21)
+#define __PPC_PL(p)    (((p) & 0x3) << 16)
 #define __PPC_WC(w)    (((w) & 0x3) << 21)
 #define __PPC_WS(w)    (((w) & 0x1f) << 11)
 #define __PPC_SH(s)    __PPC_WS(s)
 #define PPC_RAW_RFDI                   (0x4c00004e)
 #define PPC_RAW_RFMCI                  (0x4c00004c)
 #define PPC_RAW_TLBILX(t, a, b)                (0x7c000024 | __PPC_T_TLB(t) |  __PPC_RA0(a) | __PPC_RB(b))
-#define PPC_RAW_WAIT(w)                        (0x7c00007c | __PPC_WC(w))
+#define PPC_RAW_WAIT_v203              (0x7c00007c)
+#define PPC_RAW_WAIT(w, p)             (0x7c00003c | __PPC_WC(w) | __PPC_PL(p))
 #define PPC_RAW_TLBIE(lp, a)           (0x7c000264 | ___PPC_RB(a) | ___PPC_RS(lp))
 #define PPC_RAW_TLBIE_5(rb, rs, ric, prs, r) \
        (0x7c000264 | ___PPC_RB(rb) | ___PPC_RS(rs) | ___PPC_RIC(ric) | ___PPC_PRS(prs) | ___PPC_R(r))
 #define PPC_TLBILX_ALL(a, b)   PPC_TLBILX(0, a, b)
 #define PPC_TLBILX_PID(a, b)   PPC_TLBILX(1, a, b)
 #define PPC_TLBILX_VA(a, b)    PPC_TLBILX(3, a, b)
-#define PPC_WAIT(w)            stringify_in_c(.long PPC_RAW_WAIT(w))
+#define PPC_WAIT_v203          stringify_in_c(.long PPC_RAW_WAIT_v203)
+#define PPC_WAIT(w, p)         stringify_in_c(.long PPC_RAW_WAIT(w, p))
 #define PPC_TLBIE(lp, a)       stringify_in_c(.long PPC_RAW_TLBIE(lp, a))
 #define        PPC_TLBIE_5(rb, rs, ric, prs, r) \
                                stringify_in_c(.long PPC_RAW_TLBIE_5(rb, rs, ric, prs, r))
index 1736aad..0fc680e 100644 (file)
@@ -75,7 +75,7 @@ _GLOBAL(\name)
 
 .macro BOOK3E_IDLE_LOOP
 1:
-       PPC_WAIT(0)
+       PPC_WAIT_v203
        b       1b
 .endm