diff options
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/cpu_setup_44x.S | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/cputable.c | 14 | ||||
-rw-r--r-- | arch/powerpc/kernel/head_booke.h | 11 |
3 files changed, 25 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/cpu_setup_44x.S b/arch/powerpc/kernel/cpu_setup_44x.S index 10b4ab1008af..7d606f89a839 100644 --- a/arch/powerpc/kernel/cpu_setup_44x.S +++ b/arch/powerpc/kernel/cpu_setup_44x.S | |||
@@ -34,6 +34,7 @@ _GLOBAL(__setup_cpu_440grx) | |||
34 | blr | 34 | blr |
35 | _GLOBAL(__setup_cpu_460ex) | 35 | _GLOBAL(__setup_cpu_460ex) |
36 | _GLOBAL(__setup_cpu_460gt) | 36 | _GLOBAL(__setup_cpu_460gt) |
37 | _GLOBAL(__setup_cpu_460sx) | ||
37 | mflr r4 | 38 | mflr r4 |
38 | bl __init_fpu_44x | 39 | bl __init_fpu_44x |
39 | bl __fixup_440A_mcheck | 40 | bl __fixup_440A_mcheck |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 9fdf1b8027b5..f59ca710f448 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -47,6 +47,7 @@ extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec); | |||
47 | extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec); | 47 | extern void __setup_cpu_440x5(unsigned long offset, struct cpu_spec* spec); |
48 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); | 48 | extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec); |
49 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); | 49 | extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec); |
50 | extern void __setup_cpu_460sx(unsigned long offset, struct cpu_spec *spec); | ||
50 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); | 51 | extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec); |
51 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); | 52 | extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec); |
52 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); | 53 | extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec); |
@@ -1638,6 +1639,19 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1638 | .machine_check = machine_check_440A, | 1639 | .machine_check = machine_check_440A, |
1639 | .platform = "ppc440", | 1640 | .platform = "ppc440", |
1640 | }, | 1641 | }, |
1642 | { /* 460SX */ | ||
1643 | .pvr_mask = 0xffffff00, | ||
1644 | .pvr_value = 0x13541800, | ||
1645 | .cpu_name = "460SX", | ||
1646 | .cpu_features = CPU_FTRS_44X, | ||
1647 | .cpu_user_features = COMMON_USER_BOOKE, | ||
1648 | .mmu_features = MMU_FTR_TYPE_44x, | ||
1649 | .icache_bsize = 32, | ||
1650 | .dcache_bsize = 32, | ||
1651 | .cpu_setup = __setup_cpu_460sx, | ||
1652 | .machine_check = machine_check_440A, | ||
1653 | .platform = "ppc440", | ||
1654 | }, | ||
1641 | { /* default match */ | 1655 | { /* default match */ |
1642 | .pvr_mask = 0x00000000, | 1656 | .pvr_mask = 0x00000000, |
1643 | .pvr_value = 0x00000000, | 1657 | .pvr_value = 0x00000000, |
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h index 38e242eb0ef8..95f39f1e68d4 100644 --- a/arch/powerpc/kernel/head_booke.h +++ b/arch/powerpc/kernel/head_booke.h | |||
@@ -10,6 +10,15 @@ | |||
10 | mtspr SPRN_IVOR##vector_number,r26; \ | 10 | mtspr SPRN_IVOR##vector_number,r26; \ |
11 | sync | 11 | sync |
12 | 12 | ||
13 | #if (THREAD_SHIFT < 15) | ||
14 | #define ALLOC_STACK_FRAME(reg, val) \ | ||
15 | addi reg,reg,val | ||
16 | #else | ||
17 | #define ALLOC_STACK_FRAME(reg, val) \ | ||
18 | addis reg,reg,val@ha; \ | ||
19 | addi reg,reg,val@l | ||
20 | #endif | ||
21 | |||
13 | #define NORMAL_EXCEPTION_PROLOG \ | 22 | #define NORMAL_EXCEPTION_PROLOG \ |
14 | mtspr SPRN_SPRG0,r10; /* save two registers to work with */\ | 23 | mtspr SPRN_SPRG0,r10; /* save two registers to work with */\ |
15 | mtspr SPRN_SPRG1,r11; \ | 24 | mtspr SPRN_SPRG1,r11; \ |
@@ -20,7 +29,7 @@ | |||
20 | beq 1f; \ | 29 | beq 1f; \ |
21 | mfspr r1,SPRN_SPRG3; /* if from user, start at top of */\ | 30 | mfspr r1,SPRN_SPRG3; /* if from user, start at top of */\ |
22 | lwz r1,THREAD_INFO-THREAD(r1); /* this thread's kernel stack */\ | 31 | lwz r1,THREAD_INFO-THREAD(r1); /* this thread's kernel stack */\ |
23 | addi r1,r1,THREAD_SIZE; \ | 32 | ALLOC_STACK_FRAME(r1, THREAD_SIZE); \ |
24 | 1: subi r1,r1,INT_FRAME_SIZE; /* Allocate an exception frame */\ | 33 | 1: subi r1,r1,INT_FRAME_SIZE; /* Allocate an exception frame */\ |
25 | mr r11,r1; \ | 34 | mr r11,r1; \ |
26 | stw r10,_CCR(r11); /* save various registers */\ | 35 | stw r10,_CCR(r11); /* save various registers */\ |