powerpc: Remove 64-bit cpu support from ppc32.

These days there is no good reason to run a ppc32 kernel on a 64-bit
cpu, rather than a ppc64 kernel, so remove the config option and a
bunch of code (and ifdefs) from head.S.

Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Paul Mackerras 2005-10-06 12:49:05 +10:00
Родитель 7c8c6b9776
Коммит 187a00679a
2 изменённых файлов: 11 добавлений и 153 удалений

Просмотреть файл

@ -109,10 +109,6 @@ config 40x
config 44x config 44x
bool "AMCC 44x" bool "AMCC 44x"
config PPC64BRIDGE
select PPC_FPU
bool "POWER3, POWER4 and PPC970 (G5)"
config 8xx config 8xx
bool "Freescale 8xx" bool "Freescale 8xx"
@ -125,7 +121,7 @@ endchoice
config POWER4_ONLY config POWER4_ONLY
bool "Optimize for POWER4" bool "Optimize for POWER4"
depends on PPC64 || PPC64BRIDGE depends on PPC64
default n default n
---help--- ---help---
Cause the compiler to optimize for POWER4/POWER5/PPC970 processors. Cause the compiler to optimize for POWER4/POWER5/PPC970 processors.
@ -134,16 +130,16 @@ config POWER4_ONLY
config POWER3 config POWER3
bool bool
depends on PPC64 || PPC64BRIDGE depends on PPC64
default y if !POWER4_ONLY default y if !POWER4_ONLY
config POWER4 config POWER4
depends on PPC64 || PPC64BRIDGE depends on PPC64
def_bool y def_bool y
config PPC_FPU config PPC_FPU
depends on PPC32 bool
def_bool y default y if PPC64
config BOOKE config BOOKE
bool bool
@ -317,7 +313,7 @@ config PPC_BPA
config PPC_OF config PPC_OF
bool bool
depends on PPC_MULTIPLATFORM || PPC_ISERIES depends on PPC_MULTIPLATFORM # for now
default y default y
config XICS config XICS

Просмотреть файл

@ -37,19 +37,6 @@
#include <asm/amigappc.h> #include <asm/amigappc.h>
#endif #endif
#ifdef CONFIG_PPC64BRIDGE
#define LOAD_BAT(n, reg, RA, RB) \
ld RA,(n*32)+0(reg); \
ld RB,(n*32)+8(reg); \
mtspr SPRN_IBAT##n##U,RA; \
mtspr SPRN_IBAT##n##L,RB; \
ld RA,(n*32)+16(reg); \
ld RB,(n*32)+24(reg); \
mtspr SPRN_DBAT##n##U,RA; \
mtspr SPRN_DBAT##n##L,RB; \
#else /* CONFIG_PPC64BRIDGE */
/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */ /* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
#define LOAD_BAT(n, reg, RA, RB) \ #define LOAD_BAT(n, reg, RA, RB) \
/* see the comment for clear_bats() -- Cort */ \ /* see the comment for clear_bats() -- Cort */ \
@ -66,7 +53,6 @@
mtspr SPRN_DBAT##n##U,RA; \ mtspr SPRN_DBAT##n##U,RA; \
mtspr SPRN_DBAT##n##L,RB; \ mtspr SPRN_DBAT##n##L,RB; \
1: 1:
#endif /* CONFIG_PPC64BRIDGE */
.text .text
.stabs "arch/ppc/kernel/",N_SO,0,0,0f .stabs "arch/ppc/kernel/",N_SO,0,0,0f
@ -150,14 +136,6 @@ __start:
*/ */
bl early_init bl early_init
/*
* On POWER4, we first need to tweak some CPU configuration registers
* like real mode cache inhibit or exception base
*/
#ifdef CONFIG_POWER4
bl __970_cpu_preinit
#endif /* CONFIG_POWER4 */
#ifdef CONFIG_APUS #ifdef CONFIG_APUS
/* On APUS the __va/__pa constants need to be set to the correct /* On APUS the __va/__pa constants need to be set to the correct
* values before continuing. * values before continuing.
@ -171,7 +149,6 @@ __start:
*/ */
bl mmu_off bl mmu_off
__after_mmu_off: __after_mmu_off:
#ifndef CONFIG_POWER4
bl clear_bats bl clear_bats
bl flush_tlbs bl flush_tlbs
@ -179,10 +156,6 @@ __after_mmu_off:
#if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) #if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT)
bl setup_disp_bat bl setup_disp_bat
#endif #endif
#else /* CONFIG_POWER4 */
bl reloc_offset
bl initial_mm_power4
#endif /* CONFIG_POWER4 */
/* /*
* Call setup_cpu for CPU 0 and initialize 6xx Idle * Call setup_cpu for CPU 0 and initialize 6xx Idle
@ -194,10 +167,6 @@ __after_mmu_off:
bl reloc_offset bl reloc_offset
bl init_idle_6xx bl init_idle_6xx
#endif /* CONFIG_6xx */ #endif /* CONFIG_6xx */
#ifdef CONFIG_POWER4
bl reloc_offset
bl init_idle_power4
#endif /* CONFIG_POWER4 */
#ifndef CONFIG_APUS #ifndef CONFIG_APUS
@ -397,13 +366,8 @@ i##n: \
/* Data access exception. */ /* Data access exception. */
. = 0x300 . = 0x300
#ifdef CONFIG_PPC64BRIDGE
b DataAccess
DataAccessCont:
#else
DataAccess: DataAccess:
EXCEPTION_PROLOG EXCEPTION_PROLOG
#endif /* CONFIG_PPC64BRIDGE */
mfspr r10,SPRN_DSISR mfspr r10,SPRN_DSISR
andis. r0,r10,0xa470 /* weird error? */ andis. r0,r10,0xa470 /* weird error? */
bne 1f /* if not, try to put a PTE */ bne 1f /* if not, try to put a PTE */
@ -415,21 +379,11 @@ DataAccess:
mfspr r4,SPRN_DAR mfspr r4,SPRN_DAR
EXC_XFER_EE_LITE(0x300, handle_page_fault) EXC_XFER_EE_LITE(0x300, handle_page_fault)
#ifdef CONFIG_PPC64BRIDGE
/* SLB fault on data access. */
. = 0x380
b DataSegment
#endif /* CONFIG_PPC64BRIDGE */
/* Instruction access exception. */ /* Instruction access exception. */
. = 0x400 . = 0x400
#ifdef CONFIG_PPC64BRIDGE
b InstructionAccess
InstructionAccessCont:
#else
InstructionAccess: InstructionAccess:
EXCEPTION_PROLOG EXCEPTION_PROLOG
#endif /* CONFIG_PPC64BRIDGE */
andis. r0,r9,0x4000 /* no pte found? */ andis. r0,r9,0x4000 /* no pte found? */
beq 1f /* if so, try to put a PTE */ beq 1f /* if so, try to put a PTE */
li r3,0 /* into the hash table */ li r3,0 /* into the hash table */
@ -439,12 +393,6 @@ InstructionAccess:
mr r5,r9 mr r5,r9
EXC_XFER_EE_LITE(0x400, handle_page_fault) EXC_XFER_EE_LITE(0x400, handle_page_fault)
#ifdef CONFIG_PPC64BRIDGE
/* SLB fault on instruction access. */
. = 0x480
b InstructionSegment
#endif /* CONFIG_PPC64BRIDGE */
/* External interrupt */ /* External interrupt */
EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE) EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
@ -709,15 +657,9 @@ DataStoreTLBMiss:
EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_EE) EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_EE)
EXCEPTION(0x1400, SMI, SMIException, EXC_XFER_EE) EXCEPTION(0x1400, SMI, SMIException, EXC_XFER_EE)
EXCEPTION(0x1500, Trap_15, unknown_exception, EXC_XFER_EE) EXCEPTION(0x1500, Trap_15, unknown_exception, EXC_XFER_EE)
#ifdef CONFIG_POWER4
EXCEPTION(0x1600, Trap_16, unknown_exception, EXC_XFER_EE)
EXCEPTION(0x1700, Trap_17, altivec_assist_exception, EXC_XFER_EE)
EXCEPTION(0x1800, Trap_18, TAUException, EXC_XFER_STD)
#else /* !CONFIG_POWER4 */
EXCEPTION(0x1600, Trap_16, altivec_assist_exception, EXC_XFER_EE) EXCEPTION(0x1600, Trap_16, altivec_assist_exception, EXC_XFER_EE)
EXCEPTION(0x1700, Trap_17, TAUException, EXC_XFER_STD) EXCEPTION(0x1700, Trap_17, TAUException, EXC_XFER_STD)
EXCEPTION(0x1800, Trap_18, unknown_exception, EXC_XFER_EE) EXCEPTION(0x1800, Trap_18, unknown_exception, EXC_XFER_EE)
#endif /* CONFIG_POWER4 */
EXCEPTION(0x1900, Trap_19, unknown_exception, EXC_XFER_EE) EXCEPTION(0x1900, Trap_19, unknown_exception, EXC_XFER_EE)
EXCEPTION(0x1a00, Trap_1a, unknown_exception, EXC_XFER_EE) EXCEPTION(0x1a00, Trap_1a, unknown_exception, EXC_XFER_EE)
EXCEPTION(0x1b00, Trap_1b, unknown_exception, EXC_XFER_EE) EXCEPTION(0x1b00, Trap_1b, unknown_exception, EXC_XFER_EE)
@ -754,28 +696,6 @@ AltiVecUnavailable:
#endif /* CONFIG_ALTIVEC */ #endif /* CONFIG_ALTIVEC */
EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception) EXC_XFER_EE_LITE(0xf20, altivec_unavailable_exception)
#ifdef CONFIG_PPC64BRIDGE
DataAccess:
EXCEPTION_PROLOG
b DataAccessCont
InstructionAccess:
EXCEPTION_PROLOG
b InstructionAccessCont
DataSegment:
EXCEPTION_PROLOG
addi r3,r1,STACK_FRAME_OVERHEAD
mfspr r4,SPRN_DAR
stw r4,_DAR(r11)
EXC_XFER_STD(0x380, unknown_exception)
InstructionSegment:
EXCEPTION_PROLOG
addi r3,r1,STACK_FRAME_OVERHEAD
EXC_XFER_STD(0x480, unknown_exception)
#endif /* CONFIG_PPC64BRIDGE */
#ifdef CONFIG_ALTIVEC #ifdef CONFIG_ALTIVEC
/* Note that the AltiVec support is closely modeled after the FP /* Note that the AltiVec support is closely modeled after the FP
* support. Changes to one are likely to be applicable to the * support. Changes to one are likely to be applicable to the
@ -1048,13 +968,6 @@ __secondary_start_pmac_0:
.globl __secondary_start .globl __secondary_start
__secondary_start: __secondary_start:
#ifdef CONFIG_PPC64BRIDGE
mfmsr r0
clrldi r0,r0,1 /* make sure it's in 32-bit mode */
SYNC
MTMSRD(r0)
isync
#endif
/* Copy some CPU settings from CPU 0 */ /* Copy some CPU settings from CPU 0 */
bl __restore_cpu_setup bl __restore_cpu_setup
@ -1065,10 +978,6 @@ __secondary_start:
lis r3,-KERNELBASE@h lis r3,-KERNELBASE@h
bl init_idle_6xx bl init_idle_6xx
#endif /* CONFIG_6xx */ #endif /* CONFIG_6xx */
#ifdef CONFIG_POWER4
lis r3,-KERNELBASE@h
bl init_idle_power4
#endif /* CONFIG_POWER4 */
/* get current_thread_info and current */ /* get current_thread_info and current */
lis r1,secondary_ti@ha lis r1,secondary_ti@ha
@ -1109,12 +1018,12 @@ __secondary_start:
* Those generic dummy functions are kept for CPUs not * Those generic dummy functions are kept for CPUs not
* included in CONFIG_6xx * included in CONFIG_6xx
*/ */
#if !defined(CONFIG_6xx) && !defined(CONFIG_POWER4) #if !defined(CONFIG_6xx)
_GLOBAL(__save_cpu_setup) _GLOBAL(__save_cpu_setup)
blr blr
_GLOBAL(__restore_cpu_setup) _GLOBAL(__restore_cpu_setup)
blr blr
#endif /* !defined(CONFIG_6xx) && !defined(CONFIG_POWER4) */ #endif /* !defined(CONFIG_6xx) */
/* /*
@ -1132,11 +1041,6 @@ load_up_mmu:
tophys(r6,r6) tophys(r6,r6)
lwz r6,_SDR1@l(r6) lwz r6,_SDR1@l(r6)
mtspr SPRN_SDR1,r6 mtspr SPRN_SDR1,r6
#ifdef CONFIG_PPC64BRIDGE
/* clear the ASR so we only use the pseudo-segment registers. */
li r6,0
mtasr r6
#endif /* CONFIG_PPC64BRIDGE */
li r0,16 /* load up segment register values */ li r0,16 /* load up segment register values */
mtctr r0 /* for context 0 */ mtctr r0 /* for context 0 */
lis r3,0x2000 /* Ku = 1, VSID = 0 */ lis r3,0x2000 /* Ku = 1, VSID = 0 */
@ -1145,7 +1049,7 @@ load_up_mmu:
addi r3,r3,0x111 /* increment VSID */ addi r3,r3,0x111 /* increment VSID */
addis r4,r4,0x1000 /* address of next segment */ addis r4,r4,0x1000 /* address of next segment */
bdnz 3b bdnz 3b
#ifndef CONFIG_POWER4
/* Load the BAT registers with the values set up by MMU_init. /* Load the BAT registers with the values set up by MMU_init.
MMU_init takes care of whether we're on a 601 or not. */ MMU_init takes care of whether we're on a 601 or not. */
mfpvr r3 mfpvr r3
@ -1158,7 +1062,7 @@ load_up_mmu:
LOAD_BAT(1,r3,r4,r5) LOAD_BAT(1,r3,r4,r5)
LOAD_BAT(2,r3,r4,r5) LOAD_BAT(2,r3,r4,r5)
LOAD_BAT(3,r3,r4,r5) LOAD_BAT(3,r3,r4,r5)
#endif /* CONFIG_POWER4 */
blr blr
/* /*
@ -1183,7 +1087,7 @@ start_here:
li r0,0 li r0,0
stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1) stwu r0,THREAD_SIZE-STACK_FRAME_OVERHEAD(r1)
/* /*
* Do early bootinfo parsing, platform-specific initialization, * Do early platform-specific initialization,
* and set up the MMU. * and set up the MMU.
*/ */
mr r3,r31 mr r3,r31
@ -1266,9 +1170,6 @@ _GLOBAL(set_context)
li r4,0 li r4,0
isync isync
3: 3:
#ifdef CONFIG_PPC64BRIDGE
slbie r4
#endif /* CONFIG_PPC64BRIDGE */
mtsrin r3,r4 mtsrin r3,r4
addi r3,r3,0x111 /* next VSID */ addi r3,r3,0x111 /* next VSID */
rlwinm r3,r3,0,8,3 /* clear out any overflow from VSID field */ rlwinm r3,r3,0,8,3 /* clear out any overflow from VSID field */
@ -1355,7 +1256,6 @@ mmu_off:
sync sync
RFI RFI
#ifndef CONFIG_POWER4
/* /*
* Use the first pair of BAT registers to map the 1st 16MB * Use the first pair of BAT registers to map the 1st 16MB
* of RAM to KERNELBASE. From this point on we can't safely * of RAM to KERNELBASE. From this point on we can't safely
@ -1363,7 +1263,6 @@ mmu_off:
*/ */
initial_bats: initial_bats:
lis r11,KERNELBASE@h lis r11,KERNELBASE@h
#ifndef CONFIG_PPC64BRIDGE
mfspr r9,SPRN_PVR mfspr r9,SPRN_PVR
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */ rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
cmpwi 0,r9,1 cmpwi 0,r9,1
@ -1378,7 +1277,6 @@ initial_bats:
mtspr SPRN_IBAT1L,r10 mtspr SPRN_IBAT1L,r10
isync isync
blr blr
#endif /* CONFIG_PPC64BRIDGE */
4: tophys(r8,r11) 4: tophys(r8,r11)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
@ -1392,11 +1290,6 @@ initial_bats:
ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */ ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */
#endif /* CONFIG_APUS */ #endif /* CONFIG_APUS */
#ifdef CONFIG_PPC64BRIDGE
/* clear out the high 32 bits in the BAT */
clrldi r11,r11,32
clrldi r8,r8,32
#endif /* CONFIG_PPC64BRIDGE */
mtspr SPRN_DBAT0L,r8 /* N.B. 6xx (not 601) have valid */ mtspr SPRN_DBAT0L,r8 /* N.B. 6xx (not 601) have valid */
mtspr SPRN_DBAT0U,r11 /* bit in upper BAT register */ mtspr SPRN_DBAT0U,r11 /* bit in upper BAT register */
mtspr SPRN_IBAT0L,r8 mtspr SPRN_IBAT0L,r8
@ -1429,37 +1322,6 @@ setup_disp_bat:
#endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */ #endif /* !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT) */
#else /* CONFIG_POWER4 */
/*
* Load up the SDR1 and segment register values now
* since we don't have the BATs.
* Also make sure we are running in 32-bit mode.
*/
initial_mm_power4:
addis r14,r3,_SDR1@ha /* get the value from _SDR1 */
lwz r14,_SDR1@l(r14) /* assume hash table below 4GB */
mtspr SPRN_SDR1,r14
slbia
lis r4,0x2000 /* set pseudo-segment reg 12 */
ori r5,r4,0x0ccc
mtsr 12,r5
#if 0
ori r5,r4,0x0888 /* set pseudo-segment reg 8 */
mtsr 8,r5 /* (for access to serial port) */
#endif
#ifdef CONFIG_BOOTX_TEXT
ori r5,r4,0x0999 /* set pseudo-segment reg 9 */
mtsr 9,r5 /* (for access to screen) */
#endif
mfmsr r0
clrldi r0,r0,1
sync
mtmsr r0
isync
blr
#endif /* CONFIG_POWER4 */
#ifdef CONFIG_8260 #ifdef CONFIG_8260
/* Jump into the system reset for the rom. /* Jump into the system reset for the rom.