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:
Родитель
7c8c6b9776
Коммит
187a00679a
|
@ -109,10 +109,6 @@ config 40x
|
|||
config 44x
|
||||
bool "AMCC 44x"
|
||||
|
||||
config PPC64BRIDGE
|
||||
select PPC_FPU
|
||||
bool "POWER3, POWER4 and PPC970 (G5)"
|
||||
|
||||
config 8xx
|
||||
bool "Freescale 8xx"
|
||||
|
||||
|
@ -125,7 +121,7 @@ endchoice
|
|||
|
||||
config POWER4_ONLY
|
||||
bool "Optimize for POWER4"
|
||||
depends on PPC64 || PPC64BRIDGE
|
||||
depends on PPC64
|
||||
default n
|
||||
---help---
|
||||
Cause the compiler to optimize for POWER4/POWER5/PPC970 processors.
|
||||
|
@ -134,16 +130,16 @@ config POWER4_ONLY
|
|||
|
||||
config POWER3
|
||||
bool
|
||||
depends on PPC64 || PPC64BRIDGE
|
||||
depends on PPC64
|
||||
default y if !POWER4_ONLY
|
||||
|
||||
config POWER4
|
||||
depends on PPC64 || PPC64BRIDGE
|
||||
depends on PPC64
|
||||
def_bool y
|
||||
|
||||
config PPC_FPU
|
||||
depends on PPC32
|
||||
def_bool y
|
||||
bool
|
||||
default y if PPC64
|
||||
|
||||
config BOOKE
|
||||
bool
|
||||
|
@ -317,7 +313,7 @@ config PPC_BPA
|
|||
|
||||
config PPC_OF
|
||||
bool
|
||||
depends on PPC_MULTIPLATFORM || PPC_ISERIES
|
||||
depends on PPC_MULTIPLATFORM # for now
|
||||
default y
|
||||
|
||||
config XICS
|
||||
|
|
|
@ -37,19 +37,6 @@
|
|||
#include <asm/amigappc.h>
|
||||
#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 */
|
||||
#define LOAD_BAT(n, reg, RA, RB) \
|
||||
/* see the comment for clear_bats() -- Cort */ \
|
||||
|
@ -66,7 +53,6 @@
|
|||
mtspr SPRN_DBAT##n##U,RA; \
|
||||
mtspr SPRN_DBAT##n##L,RB; \
|
||||
1:
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
|
||||
.text
|
||||
.stabs "arch/ppc/kernel/",N_SO,0,0,0f
|
||||
|
@ -150,14 +136,6 @@ __start:
|
|||
*/
|
||||
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
|
||||
/* On APUS the __va/__pa constants need to be set to the correct
|
||||
* values before continuing.
|
||||
|
@ -171,7 +149,6 @@ __start:
|
|||
*/
|
||||
bl mmu_off
|
||||
__after_mmu_off:
|
||||
#ifndef CONFIG_POWER4
|
||||
bl clear_bats
|
||||
bl flush_tlbs
|
||||
|
||||
|
@ -179,10 +156,6 @@ __after_mmu_off:
|
|||
#if !defined(CONFIG_APUS) && defined(CONFIG_BOOTX_TEXT)
|
||||
bl setup_disp_bat
|
||||
#endif
|
||||
#else /* CONFIG_POWER4 */
|
||||
bl reloc_offset
|
||||
bl initial_mm_power4
|
||||
#endif /* CONFIG_POWER4 */
|
||||
|
||||
/*
|
||||
* Call setup_cpu for CPU 0 and initialize 6xx Idle
|
||||
|
@ -194,10 +167,6 @@ __after_mmu_off:
|
|||
bl reloc_offset
|
||||
bl init_idle_6xx
|
||||
#endif /* CONFIG_6xx */
|
||||
#ifdef CONFIG_POWER4
|
||||
bl reloc_offset
|
||||
bl init_idle_power4
|
||||
#endif /* CONFIG_POWER4 */
|
||||
|
||||
|
||||
#ifndef CONFIG_APUS
|
||||
|
@ -397,13 +366,8 @@ i##n: \
|
|||
|
||||
/* Data access exception. */
|
||||
. = 0x300
|
||||
#ifdef CONFIG_PPC64BRIDGE
|
||||
b DataAccess
|
||||
DataAccessCont:
|
||||
#else
|
||||
DataAccess:
|
||||
EXCEPTION_PROLOG
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
mfspr r10,SPRN_DSISR
|
||||
andis. r0,r10,0xa470 /* weird error? */
|
||||
bne 1f /* if not, try to put a PTE */
|
||||
|
@ -415,21 +379,11 @@ DataAccess:
|
|||
mfspr r4,SPRN_DAR
|
||||
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. */
|
||||
. = 0x400
|
||||
#ifdef CONFIG_PPC64BRIDGE
|
||||
b InstructionAccess
|
||||
InstructionAccessCont:
|
||||
#else
|
||||
InstructionAccess:
|
||||
EXCEPTION_PROLOG
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
andis. r0,r9,0x4000 /* no pte found? */
|
||||
beq 1f /* if so, try to put a PTE */
|
||||
li r3,0 /* into the hash table */
|
||||
|
@ -439,12 +393,6 @@ InstructionAccess:
|
|||
mr r5,r9
|
||||
EXC_XFER_EE_LITE(0x400, handle_page_fault)
|
||||
|
||||
#ifdef CONFIG_PPC64BRIDGE
|
||||
/* SLB fault on instruction access. */
|
||||
. = 0x480
|
||||
b InstructionSegment
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
|
||||
/* External interrupt */
|
||||
EXCEPTION(0x500, HardwareInterrupt, do_IRQ, EXC_XFER_LITE)
|
||||
|
||||
|
@ -709,15 +657,9 @@ DataStoreTLBMiss:
|
|||
EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_EE)
|
||||
EXCEPTION(0x1400, SMI, SMIException, 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(0x1700, Trap_17, TAUException, EXC_XFER_STD)
|
||||
EXCEPTION(0x1800, Trap_18, unknown_exception, EXC_XFER_EE)
|
||||
#endif /* CONFIG_POWER4 */
|
||||
EXCEPTION(0x1900, Trap_19, unknown_exception, EXC_XFER_EE)
|
||||
EXCEPTION(0x1a00, Trap_1a, unknown_exception, EXC_XFER_EE)
|
||||
EXCEPTION(0x1b00, Trap_1b, unknown_exception, EXC_XFER_EE)
|
||||
|
@ -754,28 +696,6 @@ AltiVecUnavailable:
|
|||
#endif /* CONFIG_ALTIVEC */
|
||||
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
|
||||
/* Note that the AltiVec support is closely modeled after the FP
|
||||
* support. Changes to one are likely to be applicable to the
|
||||
|
@ -1048,13 +968,6 @@ __secondary_start_pmac_0:
|
|||
|
||||
.globl __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 */
|
||||
bl __restore_cpu_setup
|
||||
|
||||
|
@ -1065,10 +978,6 @@ __secondary_start:
|
|||
lis r3,-KERNELBASE@h
|
||||
bl init_idle_6xx
|
||||
#endif /* CONFIG_6xx */
|
||||
#ifdef CONFIG_POWER4
|
||||
lis r3,-KERNELBASE@h
|
||||
bl init_idle_power4
|
||||
#endif /* CONFIG_POWER4 */
|
||||
|
||||
/* get current_thread_info and current */
|
||||
lis r1,secondary_ti@ha
|
||||
|
@ -1109,12 +1018,12 @@ __secondary_start:
|
|||
* Those generic dummy functions are kept for CPUs not
|
||||
* included in CONFIG_6xx
|
||||
*/
|
||||
#if !defined(CONFIG_6xx) && !defined(CONFIG_POWER4)
|
||||
#if !defined(CONFIG_6xx)
|
||||
_GLOBAL(__save_cpu_setup)
|
||||
blr
|
||||
_GLOBAL(__restore_cpu_setup)
|
||||
blr
|
||||
#endif /* !defined(CONFIG_6xx) && !defined(CONFIG_POWER4) */
|
||||
#endif /* !defined(CONFIG_6xx) */
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1132,11 +1041,6 @@ load_up_mmu:
|
|||
tophys(r6,r6)
|
||||
lwz r6,_SDR1@l(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 */
|
||||
mtctr r0 /* for context 0 */
|
||||
lis r3,0x2000 /* Ku = 1, VSID = 0 */
|
||||
|
@ -1145,7 +1049,7 @@ load_up_mmu:
|
|||
addi r3,r3,0x111 /* increment VSID */
|
||||
addis r4,r4,0x1000 /* address of next segment */
|
||||
bdnz 3b
|
||||
#ifndef CONFIG_POWER4
|
||||
|
||||
/* 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. */
|
||||
mfpvr r3
|
||||
|
@ -1158,7 +1062,7 @@ load_up_mmu:
|
|||
LOAD_BAT(1,r3,r4,r5)
|
||||
LOAD_BAT(2,r3,r4,r5)
|
||||
LOAD_BAT(3,r3,r4,r5)
|
||||
#endif /* CONFIG_POWER4 */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
|
@ -1183,7 +1087,7 @@ start_here:
|
|||
li r0,0
|
||||
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.
|
||||
*/
|
||||
mr r3,r31
|
||||
|
@ -1266,9 +1170,6 @@ _GLOBAL(set_context)
|
|||
li r4,0
|
||||
isync
|
||||
3:
|
||||
#ifdef CONFIG_PPC64BRIDGE
|
||||
slbie r4
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
mtsrin r3,r4
|
||||
addi r3,r3,0x111 /* next VSID */
|
||||
rlwinm r3,r3,0,8,3 /* clear out any overflow from VSID field */
|
||||
|
@ -1355,7 +1256,6 @@ mmu_off:
|
|||
sync
|
||||
RFI
|
||||
|
||||
#ifndef CONFIG_POWER4
|
||||
/*
|
||||
* Use the first pair of BAT registers to map the 1st 16MB
|
||||
* of RAM to KERNELBASE. From this point on we can't safely
|
||||
|
@ -1363,7 +1263,6 @@ mmu_off:
|
|||
*/
|
||||
initial_bats:
|
||||
lis r11,KERNELBASE@h
|
||||
#ifndef CONFIG_PPC64BRIDGE
|
||||
mfspr r9,SPRN_PVR
|
||||
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
|
||||
cmpwi 0,r9,1
|
||||
|
@ -1378,7 +1277,6 @@ initial_bats:
|
|||
mtspr SPRN_IBAT1L,r10
|
||||
isync
|
||||
blr
|
||||
#endif /* CONFIG_PPC64BRIDGE */
|
||||
|
||||
4: tophys(r8,r11)
|
||||
#ifdef CONFIG_SMP
|
||||
|
@ -1392,11 +1290,6 @@ initial_bats:
|
|||
ori r11,r11,BL_256M<<2|0x2 /* set up BAT registers for 604 */
|
||||
#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_DBAT0U,r11 /* bit in upper BAT register */
|
||||
mtspr SPRN_IBAT0L,r8
|
||||
|
@ -1429,37 +1322,6 @@ setup_disp_bat:
|
|||
|
||||
#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
|
||||
/* Jump into the system reset for the rom.
|
||||
|
|
Загрузка…
Ссылка в новой задаче