powerpc: Remove CONFIG_POWER4_ONLY

Remove CONFIG_POWER4_ONLY, the option is badly named and only does two
things:

- It wraps the MMU segment table code. With feature fixups there is
  little downside to compiling this in.

- It uses the newer mtocrf instruction in various assembly functions.
  Instead of making this a compile option just do it at runtime via
  a feature fixup.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Anton Blanchard 2012-04-18 02:21:52 +00:00 committed by Benjamin Herrenschmidt
parent 6cd3209967
commit 694caf0255
10 changed files with 19 additions and 36 deletions

View File

@ -1,5 +1,4 @@
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_POWER4_ONLY=y
CONFIG_ALTIVEC=y CONFIG_ALTIVEC=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=4 CONFIG_NR_CPUS=4

View File

@ -1,5 +1,4 @@
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_POWER4_ONLY=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=4 CONFIG_NR_CPUS=4
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y

View File

@ -1,5 +1,4 @@
CONFIG_PPC64=y CONFIG_PPC64=y
CONFIG_POWER4_ONLY=y
CONFIG_ALTIVEC=y CONFIG_ALTIVEC=y
# CONFIG_VIRT_CPU_ACCOUNTING is not set # CONFIG_VIRT_CPU_ACCOUNTING is not set
CONFIG_SMP=y CONFIG_SMP=y

View File

@ -29,18 +29,9 @@
#define PPC_LLARX(t, a, b, eh) PPC_LDARX(t, a, b, eh) #define PPC_LLARX(t, a, b, eh) PPC_LDARX(t, a, b, eh)
#define PPC_STLCX stringify_in_c(stdcx.) #define PPC_STLCX stringify_in_c(stdcx.)
#define PPC_CNTLZL stringify_in_c(cntlzd) #define PPC_CNTLZL stringify_in_c(cntlzd)
#define PPC_MTOCRF(FXM, RS) MTOCRF((FXM), (RS))
#define PPC_LR_STKOFF 16 #define PPC_LR_STKOFF 16
#define PPC_MIN_STKFRM 112 #define PPC_MIN_STKFRM 112
/* Move to CR, single-entry optimized version. Only available
* on POWER4 and later.
*/
#ifdef CONFIG_POWER4_ONLY
#define PPC_MTOCRF stringify_in_c(mtocrf)
#else
#define PPC_MTOCRF stringify_in_c(mtcrf)
#endif
#else /* 32-bit */ #else /* 32-bit */
/* operations for longs and pointers */ /* operations for longs and pointers */

View File

@ -369,6 +369,14 @@ BEGIN_FTR_SECTION \
END_FTR_SECTION_IFCLR(CPU_FTR_601) END_FTR_SECTION_IFCLR(CPU_FTR_601)
#endif #endif
#ifdef CONFIG_PPC64
#define MTOCRF(FXM, RS) \
BEGIN_FTR_SECTION_NESTED(848); \
mtcrf (FXM), (RS); \
FTR_SECTION_ELSE_NESTED(848); \
mtocrf (FXM), (RS); \
ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_NOEXECUTE, 848)
#endif
/* /*
* This instruction is not implemented on the PPC 603 or 601; however, on * This instruction is not implemented on the PPC 603 or 601; however, on

View File

@ -94,12 +94,10 @@ machine_check_pSeries_1:
data_access_pSeries: data_access_pSeries:
HMT_MEDIUM HMT_MEDIUM
SET_SCRATCH0(r13) SET_SCRATCH0(r13)
#ifndef CONFIG_POWER4_ONLY
BEGIN_FTR_SECTION BEGIN_FTR_SECTION
b data_access_check_stab b data_access_check_stab
data_access_not_stab: data_access_not_stab:
END_MMU_FTR_SECTION_IFCLR(MMU_FTR_SLB) END_MMU_FTR_SECTION_IFCLR(MMU_FTR_SLB)
#endif
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common, EXC_STD, EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, data_access_common, EXC_STD,
KVMTEST, 0x300) KVMTEST, 0x300)
@ -301,7 +299,6 @@ machine_check_fwnmi:
EXC_STD, KVMTEST, 0x200) EXC_STD, KVMTEST, 0x200)
KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200) KVM_HANDLER_SKIP(PACA_EXMC, EXC_STD, 0x200)
#ifndef CONFIG_POWER4_ONLY
/* moved from 0x300 */ /* moved from 0x300 */
data_access_check_stab: data_access_check_stab:
GET_PACA(r13) GET_PACA(r13)
@ -328,7 +325,6 @@ do_stab_bolted_pSeries:
GET_SCRATCH0(r10) GET_SCRATCH0(r10)
std r10,PACA_EXSLB+EX_R13(r13) std r10,PACA_EXSLB+EX_R13(r13)
EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD)
#endif /* CONFIG_POWER4_ONLY */
KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300) KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380) KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)

View File

@ -30,7 +30,7 @@ _GLOBAL(__copy_tofrom_user_base)
dcbt 0,r4 dcbt 0,r4
beq .Lcopy_page_4K beq .Lcopy_page_4K
andi. r6,r6,7 andi. r6,r6,7
PPC_MTOCRF 0x01,r5 PPC_MTOCRF(0x01,r5)
blt cr1,.Lshort_copy blt cr1,.Lshort_copy
/* Below we want to nop out the bne if we're on a CPU that has the /* Below we want to nop out the bne if we're on a CPU that has the
* CPU_FTR_UNALIGNED_LD_STD bit set and the CPU_FTR_CP_USE_DCBTZ bit * CPU_FTR_UNALIGNED_LD_STD bit set and the CPU_FTR_CP_USE_DCBTZ bit
@ -186,7 +186,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
blr blr
.Ldst_unaligned: .Ldst_unaligned:
PPC_MTOCRF 0x01,r6 /* put #bytes to 8B bdry into cr7 */ PPC_MTOCRF(0x01,r6) /* put #bytes to 8B bdry into cr7 */
subf r5,r6,r5 subf r5,r6,r5
li r7,0 li r7,0
cmpldi cr1,r5,16 cmpldi cr1,r5,16
@ -201,7 +201,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
2: bf cr7*4+1,3f 2: bf cr7*4+1,3f
37: lwzx r0,r7,r4 37: lwzx r0,r7,r4
83: stwx r0,r7,r3 83: stwx r0,r7,r3
3: PPC_MTOCRF 0x01,r5 3: PPC_MTOCRF(0x01,r5)
add r4,r6,r4 add r4,r6,r4
add r3,r6,r3 add r3,r6,r3
b .Ldst_aligned b .Ldst_aligned

View File

@ -19,7 +19,7 @@ _GLOBAL(memset)
rlwimi r4,r4,16,0,15 rlwimi r4,r4,16,0,15
cmplw cr1,r5,r0 /* do we get that far? */ cmplw cr1,r5,r0 /* do we get that far? */
rldimi r4,r4,32,0 rldimi r4,r4,32,0
PPC_MTOCRF 1,r0 PPC_MTOCRF(1,r0)
mr r6,r3 mr r6,r3
blt cr1,8f blt cr1,8f
beq+ 3f /* if already 8-byte aligned */ beq+ 3f /* if already 8-byte aligned */
@ -49,7 +49,7 @@ _GLOBAL(memset)
bdnz 4b bdnz 4b
5: srwi. r0,r5,3 5: srwi. r0,r5,3
clrlwi r5,r5,29 clrlwi r5,r5,29
PPC_MTOCRF 1,r0 PPC_MTOCRF(1,r0)
beq 8f beq 8f
bf 29,6f bf 29,6f
std r4,0(r6) std r4,0(r6)
@ -65,7 +65,7 @@ _GLOBAL(memset)
std r4,0(r6) std r4,0(r6)
addi r6,r6,8 addi r6,r6,8
8: cmpwi r5,0 8: cmpwi r5,0
PPC_MTOCRF 1,r5 PPC_MTOCRF(1,r5)
beqlr+ beqlr+
bf 29,9f bf 29,9f
stw r4,0(r6) stw r4,0(r6)

View File

@ -12,7 +12,7 @@
.align 7 .align 7
_GLOBAL(memcpy) _GLOBAL(memcpy)
std r3,48(r1) /* save destination pointer for return value */ std r3,48(r1) /* save destination pointer for return value */
PPC_MTOCRF 0x01,r5 PPC_MTOCRF(0x01,r5)
cmpldi cr1,r5,16 cmpldi cr1,r5,16
neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry neg r6,r3 # LS 3 bits = # bytes to 8-byte dest bdry
andi. r6,r6,7 andi. r6,r6,7
@ -154,7 +154,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
blr blr
.Ldst_unaligned: .Ldst_unaligned:
PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7 PPC_MTOCRF(0x01,r6) # put #bytes to 8B bdry into cr7
subf r5,r6,r5 subf r5,r6,r5
li r7,0 li r7,0
cmpldi cr1,r5,16 cmpldi cr1,r5,16
@ -169,7 +169,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD)
2: bf cr7*4+1,3f 2: bf cr7*4+1,3f
lwzx r0,r7,r4 lwzx r0,r7,r4
stwx r0,r7,r3 stwx r0,r7,r3
3: PPC_MTOCRF 0x01,r5 3: PPC_MTOCRF(0x01,r5)
add r4,r6,r4 add r4,r6,r4
add r3,r6,r3 add r3,r6,r3
b .Ldst_aligned b .Ldst_aligned

View File

@ -86,15 +86,6 @@ config PPC_BOOK3E
def_bool y def_bool y
depends on PPC_BOOK3E_64 depends on PPC_BOOK3E_64
config POWER4_ONLY
bool "Optimize for POWER4"
depends on PPC64 && PPC_BOOK3S
default n
---help---
Cause the compiler to optimize for POWER4/POWER5/PPC970 processors.
The resulting binary will not work on POWER3 or RS64 processors
when compiled with binutils 2.15 or later.
config 6xx config 6xx
def_bool y def_bool y
depends on PPC32 && PPC_BOOK3S depends on PPC32 && PPC_BOOK3S