powerpc: remove do-nothing cpu setup routines
PATCH 1/1 powerpc: remove do-nothing cpu setup routines
Removes the processor specific do-nothing routines __setup_cpu_power3 and __setup_cpu_power4 with the generic routine __setup_cpu_null.
arch/powerpc/kernel/cpu_setup_power4.S +0 -3
@@ -73,9 +73,6 @@ isync blr -_GLOBAL(__setup_cpu_power4) - blr - _GLOBAL(__setup_cpu_ppc970) mfspr r0,SPRN_HID0 li r11,5 /* clear DOZE and SLEEP */
arch/powerpc/kernel/cputable.c +11 -13
@@ -32,8 +32,6 @@*/ #ifdef CONFIG_PPC64 extern void __setup_cpu_null (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_power3 (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_power4 (unsigned long offset,struct cpu_spec * spec);#else extern void __setup_cpu_603 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_604 (unsigned long offset,struct cpu_spec * spec);
@@ -80,7 +78,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -94,7 +92,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -108,7 +106,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -122,7 +120,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -136,7 +134,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -150,7 +148,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -164,7 +162,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -178,7 +176,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -244,7 +242,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power5", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5",
@@ -258,7 +256,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, + .cpu_setup = __setup_cpu_null, .oprofile_cpu_type = "ppc64/power5+", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5+",
@@ -285,7 +283,7 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, + .cpu_setup = __setup_cpu_null, .platform = "power4", }#endif /* CONFIG_PPC64 */
arch/powerpc/kernel/misc_64.S +0 -3
@@ -771,9 +771,6 @@ _GLOBAL(__setup_cpu_null) blr -_GLOBAL(__setup_cpu_power3) - blr - _GLOBAL(execve) li r0,__NR_execve sc
Quoted 2 lines · Geoff Levand
Removes the processor specific do-nothing routines
__setup_cpu_power3and__setup_cpu_power4with the generic routine__setup_cpu_null.
Why not just change the caller to test for NULL ?
Cheers,
Ben.
Quoted 4 lines
Quoted 2 lines
Removes the processor specific do-nothing routines
__setup_cpu_power3and__setup_cpu_power4with the generic routine__setup_cpu_null.Why not just change the caller to test for NULL ?
Yes, please do (as Paul suggested already).
Segher
Quoted 5 lines · Segher Boessenkool
Quoted 5 lines
Quoted 3 lines
Removes the processor specific do-nothing routines
__setup_cpu_power3and__setup_cpu_power4with the generic routine__setup_cpu_null.Why not just change the caller to test for NULL ?
OK, I see the 32 bit version already does this, but I'm wondering if there is some restriction on the instruction sequence between the compare and the branch. Here's what's there:
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 add r5,r5,r3 beqlr mtctr r5 bctr
But, could this also be:
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 beqlr add r5,r5,r3 mtctr r5 bctr
-Geoff
Quoted 19 lines · Geoff Levand
Quoted 5 lines · Segher Boessenkool
Quoted 5 lines
Quoted 3 lines
Removes the processor specific do-nothing routines
__setup_cpu_power3and__setup_cpu_power4with the generic routine__setup_cpu_null.Why not just change the caller to test for NULL ?
OK, I see the 32 bit version already does this, but I'm wondering if there is some restriction on the instruction sequence between the compare and the branch. Here's what's there:
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 add r5,r5,r3 beqlr mtctr r5 bctr
Quoted 8 lines
But, could this also be:
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 beqlr add r5,r5,r3 mtctr r5 bctr
Just an optimisation for a code path that doesn't really need any :) Blame habits...
Ben.
Quoted 7 lines
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 add r5,r5,r3 beqlr mtctr r5 bctr
Quoted 8 lines
But, could this also be:
lwz r5,CPU_SPEC_SETUP(r4) cmpi 0,r5,0 beqlr add r5,r5,r3 mtctr r5 bctr
Sure. Except it should be cmpwi cr0,r5,0 or cmpwi r5,0 -- cmpi with three arguments is not valid PowerPC assembler code.
Segher
Quoted 7 lines · Segher Boessenkool
Quoted 5 lines
Quoted 3 lines
Removes the processor specific do-nothing routines
__setup_cpu_power3and__setup_cpu_power4with the generic routine__setup_cpu_null.Why not just change the caller to test for NULL ?
Yes, please do (as Paul suggested already).
Paul, here is an updated patch. This version makes my other patch 'cell: remove broken __setup_cpu_be function', send by Arnd, obsolete.
-Geoff
Removed the do-nothing routines __setup_cpu_power3 and __setup_cpu_power4 and replaced them with a null pointer check in the caller. Also removed the Cell processor specific routine __setup_cpu_be which improperly accessed the hypervisor page size configuration at SPR HID6.
---
arch/powerpc/kernel/cpu_setup_power4.S +0 -17
@@ -73,23 +73,6 @@ isync blr -_GLOBAL(__setup_cpu_power4) - blr - -_GLOBAL(__setup_cpu_be) - /* Set large page sizes LP=0: 16MB, LP=1: 64KB */ - addi r3, 0, 0 - ori r3, r3, HID6_LB - sldi r3, r3, 32 - nor r3, r3, r3 - mfspr r4, SPRN_HID6 - and r4, r4, r3 - addi r3, 0, 0x02000 - sldi r3, r3, 32 - or r4, r4, r3 - mtspr SPRN_HID6, r4 - blr - _GLOBAL(__setup_cpu_ppc970) mfspr r0,SPRN_HID0 li r11,5 /* clear DOZE and SLEEP */
arch/powerpc/kernel/cputable.c +0 -18
@@ -30,11 +30,6 @@* part of the cputable though. That has to be fixed for both ppc32 * and ppc64 */ -#ifdef CONFIG_PPC64 -extern void __setup_cpu_power3 (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_power4 (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_be (unsigned long offset,struct cpu_spec * spec); -#else extern void __setup_cpu_603 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_604 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_750 (unsigned long offset,struct cpu_spec * spec);
@@ -43,7 +38,6 @@extern void __setup_cpu_7400 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_7410 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_745x (unsigned long offset,struct cpu_spec * spec); -#endif /* CONFIG_PPC32 */ extern void __setup_cpu_ppc970 (unsigned long offset,struct cpu_spec * spec);/* This table only contains "desktop" CPUs, it need to be filled with embedded
@@ -80,7 +74,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -94,7 +87,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -108,7 +100,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -122,7 +113,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -136,7 +126,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -150,7 +139,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -164,7 +152,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -178,7 +165,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -244,7 +230,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power5", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5",
@@ -258,7 +243,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power5+", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5+",
@@ -273,7 +257,6 @@ PPC_FEATURE_SMT, .icache_bsize = 128, .dcache_bsize = 128, - .cpu_setup = __setup_cpu_be, .platform = "ppc-cell-be", }, {/* default match */
@@ -285,7 +268,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .platform = "power4", }#endif /* CONFIG_PPC64 */
arch/powerpc/kernel/misc_32.S +1 -1
@@ -216,7 +216,7 @@ lwz r4,0(r4) add r4,r4,r3 lwz r5,CPU_SPEC_SETUP(r4) - cmpi 0,r5,0 + cmpwi 0,r5,0 add r5,r5,r3 beqlr mtctr r5
arch/powerpc/kernel/misc_64.S +2 -3
@@ -482,7 +482,9 @@ sub r0,r3,r5 std r0,0(r4) ld r4,CPU_SPEC_SETUP(r3) + cmpdi 0,r4,0 add r4,r4,r5 + beqlr ld r4,0(r4) add r4,r4,r5 mtctr r4
@@ -768,9 +770,6 @@ #endif /* CONFIG_ALTIVEC */ -_GLOBAL(__setup_cpu_power3) - blr - _GLOBAL(execve) li r0,__NR_execve sc
Sorry, the last patch accidentally removed the preprocessor conditionals on the 32 bit declarations.
Updated patch below.
-Geoff
Removed the do-nothing routines __setup_cpu_power3 and __setup_cpu_power4 and replaced them with a null pointer check in the caller. Also removed the Cell processor specific routine __setup_cpu_be which improperly accessed the hypervisor page size configuration at SPR HID6.
---
arch/powerpc/kernel/cpu_setup_power4.S +0 -17
@@ -73,23 +73,6 @@ isync blr -_GLOBAL(__setup_cpu_power4) - blr - -_GLOBAL(__setup_cpu_be) - /* Set large page sizes LP=0: 16MB, LP=1: 64KB */ - addi r3, 0, 0 - ori r3, r3, HID6_LB - sldi r3, r3, 32 - nor r3, r3, r3 - mfspr r4, SPRN_HID6 - and r4, r4, r3 - addi r3, 0, 0x02000 - sldi r3, r3, 32 - or r4, r4, r3 - mtspr SPRN_HID6, r4 - blr - _GLOBAL(__setup_cpu_ppc970) mfspr r0,SPRN_HID0 li r11,5 /* clear DOZE and SLEEP */
arch/powerpc/kernel/cputable.c +1 -17
@@ -30,11 +30,7 @@* part of the cputable though. That has to be fixed for both ppc32 * and ppc64 */ -#ifdef CONFIG_PPC64 -extern void __setup_cpu_power3 (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_power4 (unsigned long offset,struct cpu_spec * spec); -extern void __setup_cpu_be (unsigned long offset,struct cpu_spec * spec); -#else +#ifdef CONFIG_PPC32 extern void __setup_cpu_603 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_604 (unsigned long offset,struct cpu_spec * spec);extern void __setup_cpu_750 (unsigned long offset,struct cpu_spec * spec);
@@ -80,7 +76,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -94,7 +89,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/power3", .oprofile_type = PPC_OPROFILE_RS64, .platform = "power3",
@@ -108,7 +102,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -122,7 +115,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -136,7 +128,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -150,7 +141,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power3, .oprofile_cpu_type = "ppc64/rs64", .oprofile_type = PPC_OPROFILE_RS64, .platform = "rs64",
@@ -164,7 +154,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -178,7 +167,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 8, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power4", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power4",
@@ -244,7 +232,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power5", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5",
@@ -258,7 +245,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .oprofile_cpu_type = "ppc64/power5+", .oprofile_type = PPC_OPROFILE_POWER4, .platform = "power5+",
@@ -273,7 +259,6 @@ PPC_FEATURE_SMT, .icache_bsize = 128, .dcache_bsize = 128, - .cpu_setup = __setup_cpu_be, .platform = "ppc-cell-be", }, {/* default match */
@@ -285,7 +270,6 @@ .icache_bsize = 128, .dcache_bsize = 128, .num_pmcs = 6, - .cpu_setup = __setup_cpu_power4, .platform = "power4", }#endif /* CONFIG_PPC64 */
arch/powerpc/kernel/misc_32.S +1 -1
@@ -216,7 +216,7 @@ lwz r4,0(r4) add r4,r4,r3 lwz r5,CPU_SPEC_SETUP(r4) - cmpi 0,r5,0 + cmpwi 0,r5,0 add r5,r5,r3 beqlr mtctr r5
arch/powerpc/kernel/misc_64.S +2 -3
@@ -482,7 +482,9 @@ sub r0,r3,r5 std r0,0(r4) ld r4,CPU_SPEC_SETUP(r3) + cmpdi 0,r4,0 add r4,r4,r5 + beqlr ld r4,0(r4) add r4,r4,r5 mtctr r4
@@ -768,9 +770,6 @@ #endif /* CONFIG_ALTIVEC */ -_GLOBAL(__setup_cpu_power3) - blr - _GLOBAL(execve) li r0,__NR_execve sc