powerpc/swsusp: Only use tlbie in POWER4 mode
authorRussell Currey <ruscur@russell.cc>
Wed, 2 Mar 2016 06:12:45 +0000 (17:12 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 11 Apr 2016 10:30:44 +0000 (20:30 +1000)
If CONFIG_HIBERNATION and CONFIG_PPC_BOOK3S_64 are set, code in
arch/powerpc/kernel/swsusp_amd64.S which uses the tlbia macro is enabled.
tlbia in turn uses tlbie, an instruction which takes more than one
operand in newer versions of POWER.  As such, the kernel fails to build
due to the assembler complaining about missing operands.

This can be worked around by assembling the instruction as in POWER4.
This fixes the build breakage caused by enabling CONFIG_HIBERNATION.
Hibernation is currently only tested on G5 PowerMacs, which should be
unaffected by this change.  For other platforms it may now build,
whether or not it works is a different story.

Signed-off-by: Russell Currey <ruscur@russell.cc>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/ppc_asm.h

index 499d9f89435a2dbe1216a58047bb3c1135932746..2b31632376a5bec7c926d12f5506a670d4a3b739 100644 (file)
@@ -427,7 +427,10 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601)
        li      r4,1024;                        \
        mtctr   r4;                             \
        lis     r4,KERNELBASE@h;                \
+       .machine push;                          \
+       .machine "power4";                      \
 0:     tlbie   r4;                             \
+       .machine pop;                           \
        addi    r4,r4,0x1000;                   \
        bdnz    0b
 #endif