diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-31 19:48:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-31 19:48:05 -0400 |
commit | ba8f5baba79da8eb502f8534c3a8ecb64aceb790 (patch) | |
tree | 39a0438607446681bdf5173c7480ff90f3825945 /arch/mips/kernel | |
parent | 5cedae9ca752a43cfb1074907d12c9f01fbebd45 (diff) | |
parent | 44d921b246923380f26b8010e47ac5dfe48fcec5 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus:
[MIPS] Treat R14000 like R10000.
[MIPS] Remove EXPERIMENTAL from PAGE_SIZE_16KB
[MIPS] Update/Fix instruction definitions
[MIPS] DSP and MDMX share the same config flag bit.
[MIPS] Fix deadlock on MP with cache aliases.
[MIPS] Use generic STABS_DEBUG macro.
[MIPS] Create consistency in "system type" selection.
[MIPS] Use generic DWARF_DEBUG
[MIPS] Fix kgdb exception handler from user mode.
[MIPS] Update struct sigcontext member names
[MIPS] Update/fix futex assembly
[MIPS] Remove support for sysmips(2) SETNAME and MIPS_RDNVRAM operations.
[MIPS] Fix detection and handling of the 74K processor.
[MIPS] Add missing 34K processor IDs
[MIPS] Fix marking buddy of pte global for MIPS32 w/36-bit physical address
[MIPS] AU1xxx mips_timer_interrupt() fixes
[MIPS] Fix typo
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/asm-offsets.c | 4 | ||||
-rw-r--r-- | arch/mips/kernel/cpu-probe.c | 13 | ||||
-rw-r--r-- | arch/mips/kernel/entry.S | 2 | ||||
-rw-r--r-- | arch/mips/kernel/gdb-low.S | 8 | ||||
-rw-r--r-- | arch/mips/kernel/proc.c | 2 | ||||
-rw-r--r-- | arch/mips/kernel/signal-common.h | 30 | ||||
-rw-r--r-- | arch/mips/kernel/syscall.c | 24 | ||||
-rw-r--r-- | arch/mips/kernel/traps.c | 1 | ||||
-rw-r--r-- | arch/mips/kernel/vmlinux.lds.S | 20 |
9 files changed, 29 insertions, 75 deletions
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index 92b28b674d6f..0facfaf4e950 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
@@ -272,8 +272,8 @@ void output_sc_defines(void) | |||
272 | text("/* Linux sigcontext offsets. */"); | 272 | text("/* Linux sigcontext offsets. */"); |
273 | offset("#define SC_REGS ", struct sigcontext, sc_regs); | 273 | offset("#define SC_REGS ", struct sigcontext, sc_regs); |
274 | offset("#define SC_FPREGS ", struct sigcontext, sc_fpregs); | 274 | offset("#define SC_FPREGS ", struct sigcontext, sc_fpregs); |
275 | offset("#define SC_MDHI ", struct sigcontext, sc_hi); | 275 | offset("#define SC_MDHI ", struct sigcontext, sc_mdhi); |
276 | offset("#define SC_MDLO ", struct sigcontext, sc_lo); | 276 | offset("#define SC_MDLO ", struct sigcontext, sc_mdlo); |
277 | offset("#define SC_PC ", struct sigcontext, sc_pc); | 277 | offset("#define SC_PC ", struct sigcontext, sc_pc); |
278 | offset("#define SC_FPC_CSR ", struct sigcontext, sc_fpc_csr); | 278 | offset("#define SC_FPC_CSR ", struct sigcontext, sc_fpc_csr); |
279 | linefeed; | 279 | linefeed; |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index 58b3b14873cb..bef3e2dc7c52 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
@@ -121,6 +121,7 @@ static inline void check_wait(void) | |||
121 | case CPU_24K: | 121 | case CPU_24K: |
122 | case CPU_25KF: | 122 | case CPU_25KF: |
123 | case CPU_34K: | 123 | case CPU_34K: |
124 | case CPU_74K: | ||
124 | case CPU_PR4450: | 125 | case CPU_PR4450: |
125 | cpu_wait = r4k_wait; | 126 | cpu_wait = r4k_wait; |
126 | printk(" available.\n"); | 127 | printk(" available.\n"); |
@@ -432,6 +433,15 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c) | |||
432 | MIPS_CPU_LLSC; | 433 | MIPS_CPU_LLSC; |
433 | c->tlbsize = 64; | 434 | c->tlbsize = 64; |
434 | break; | 435 | break; |
436 | case PRID_IMP_R14000: | ||
437 | c->cputype = CPU_R14000; | ||
438 | c->isa_level = MIPS_CPU_ISA_IV; | ||
439 | c->options = MIPS_CPU_TLB | MIPS_CPU_4K_CACHE | MIPS_CPU_4KEX | | ||
440 | MIPS_CPU_FPU | MIPS_CPU_32FPR | | ||
441 | MIPS_CPU_COUNTER | MIPS_CPU_WATCH | | ||
442 | MIPS_CPU_LLSC; | ||
443 | c->tlbsize = 64; | ||
444 | break; | ||
435 | } | 445 | } |
436 | } | 446 | } |
437 | 447 | ||
@@ -593,6 +603,9 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c) | |||
593 | case PRID_IMP_34K: | 603 | case PRID_IMP_34K: |
594 | c->cputype = CPU_34K; | 604 | c->cputype = CPU_34K; |
595 | break; | 605 | break; |
606 | case PRID_IMP_74K: | ||
607 | c->cputype = CPU_74K; | ||
608 | break; | ||
596 | } | 609 | } |
597 | } | 610 | } |
598 | 611 | ||
diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S index d101d2fb24ca..a9c6de1b9542 100644 --- a/arch/mips/kernel/entry.S +++ b/arch/mips/kernel/entry.S | |||
@@ -101,7 +101,7 @@ FEXPORT(restore_all) # restore full frame | |||
101 | EMT | 101 | EMT |
102 | 1: | 102 | 1: |
103 | mfc0 v1, CP0_TCSTATUS | 103 | mfc0 v1, CP0_TCSTATUS |
104 | /* We set IXMT above, XOR should cler it here */ | 104 | /* We set IXMT above, XOR should clear it here */ |
105 | xori v1, v1, TCSTATUS_IXMT | 105 | xori v1, v1, TCSTATUS_IXMT |
106 | or v1, v0, v1 | 106 | or v1, v0, v1 |
107 | mtc0 v1, CP0_TCSTATUS | 107 | mtc0 v1, CP0_TCSTATUS |
diff --git a/arch/mips/kernel/gdb-low.S b/arch/mips/kernel/gdb-low.S index 10f28fb9f008..5fd7a8af0c62 100644 --- a/arch/mips/kernel/gdb-low.S +++ b/arch/mips/kernel/gdb-low.S | |||
@@ -54,9 +54,11 @@ | |||
54 | */ | 54 | */ |
55 | mfc0 k0, CP0_CAUSE | 55 | mfc0 k0, CP0_CAUSE |
56 | andi k0, k0, 0x7c | 56 | andi k0, k0, 0x7c |
57 | add k1, k1, k0 | 57 | #ifdef CONFIG_64BIT |
58 | PTR_L k0, saved_vectors(k1) | 58 | dsll k0, k0, 1 |
59 | jr k0 | 59 | #endif |
60 | PTR_L k1, saved_vectors(k0) | ||
61 | jr k1 | ||
60 | nop | 62 | nop |
61 | 1: | 63 | 1: |
62 | move k0, sp | 64 | move k0, sp |
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c index 84ab959f924a..9def554f335b 100644 --- a/arch/mips/kernel/proc.c +++ b/arch/mips/kernel/proc.c | |||
@@ -42,6 +42,7 @@ static const char *cpu_name[] = { | |||
42 | [CPU_R8000] = "R8000", | 42 | [CPU_R8000] = "R8000", |
43 | [CPU_R10000] = "R10000", | 43 | [CPU_R10000] = "R10000", |
44 | [CPU_R12000] = "R12000", | 44 | [CPU_R12000] = "R12000", |
45 | [CPU_R14000] = "R14000", | ||
45 | [CPU_R4300] = "R4300", | 46 | [CPU_R4300] = "R4300", |
46 | [CPU_R4650] = "R4650", | 47 | [CPU_R4650] = "R4650", |
47 | [CPU_R4700] = "R4700", | 48 | [CPU_R4700] = "R4700", |
@@ -74,6 +75,7 @@ static const char *cpu_name[] = { | |||
74 | [CPU_24K] = "MIPS 24K", | 75 | [CPU_24K] = "MIPS 24K", |
75 | [CPU_25KF] = "MIPS 25Kf", | 76 | [CPU_25KF] = "MIPS 25Kf", |
76 | [CPU_34K] = "MIPS 34K", | 77 | [CPU_34K] = "MIPS 34K", |
78 | [CPU_74K] = "MIPS 74K", | ||
77 | [CPU_VR4111] = "NEC VR4111", | 79 | [CPU_VR4111] = "NEC VR4111", |
78 | [CPU_VR4121] = "NEC VR4121", | 80 | [CPU_VR4121] = "NEC VR4121", |
79 | [CPU_VR4122] = "NEC VR4122", | 81 | [CPU_VR4122] = "NEC VR4122", |
diff --git a/arch/mips/kernel/signal-common.h b/arch/mips/kernel/signal-common.h index 3ca786215d48..ce6cb915c0a7 100644 --- a/arch/mips/kernel/signal-common.h +++ b/arch/mips/kernel/signal-common.h | |||
@@ -31,7 +31,6 @@ setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) | |||
31 | save_gp_reg(31); | 31 | save_gp_reg(31); |
32 | #undef save_gp_reg | 32 | #undef save_gp_reg |
33 | 33 | ||
34 | #ifdef CONFIG_32BIT | ||
35 | err |= __put_user(regs->hi, &sc->sc_mdhi); | 34 | err |= __put_user(regs->hi, &sc->sc_mdhi); |
36 | err |= __put_user(regs->lo, &sc->sc_mdlo); | 35 | err |= __put_user(regs->lo, &sc->sc_mdlo); |
37 | if (cpu_has_dsp) { | 36 | if (cpu_has_dsp) { |
@@ -43,20 +42,6 @@ setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) | |||
43 | err |= __put_user(mflo3(), &sc->sc_lo3); | 42 | err |= __put_user(mflo3(), &sc->sc_lo3); |
44 | err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp); | 43 | err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp); |
45 | } | 44 | } |
46 | #endif | ||
47 | #ifdef CONFIG_64BIT | ||
48 | err |= __put_user(regs->hi, &sc->sc_hi[0]); | ||
49 | err |= __put_user(regs->lo, &sc->sc_lo[0]); | ||
50 | if (cpu_has_dsp) { | ||
51 | err |= __put_user(mfhi1(), &sc->sc_hi[1]); | ||
52 | err |= __put_user(mflo1(), &sc->sc_lo[1]); | ||
53 | err |= __put_user(mfhi2(), &sc->sc_hi[2]); | ||
54 | err |= __put_user(mflo2(), &sc->sc_lo[2]); | ||
55 | err |= __put_user(mfhi3(), &sc->sc_hi[3]); | ||
56 | err |= __put_user(mflo3(), &sc->sc_lo[3]); | ||
57 | err |= __put_user(rddsp(DSP_MASK), &sc->sc_dsp); | ||
58 | } | ||
59 | #endif | ||
60 | 45 | ||
61 | err |= __put_user(!!used_math(), &sc->sc_used_math); | 46 | err |= __put_user(!!used_math(), &sc->sc_used_math); |
62 | 47 | ||
@@ -92,7 +77,6 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) | |||
92 | current_thread_info()->restart_block.fn = do_no_restart_syscall; | 77 | current_thread_info()->restart_block.fn = do_no_restart_syscall; |
93 | 78 | ||
94 | err |= __get_user(regs->cp0_epc, &sc->sc_pc); | 79 | err |= __get_user(regs->cp0_epc, &sc->sc_pc); |
95 | #ifdef CONFIG_32BIT | ||
96 | err |= __get_user(regs->hi, &sc->sc_mdhi); | 80 | err |= __get_user(regs->hi, &sc->sc_mdhi); |
97 | err |= __get_user(regs->lo, &sc->sc_mdlo); | 81 | err |= __get_user(regs->lo, &sc->sc_mdlo); |
98 | if (cpu_has_dsp) { | 82 | if (cpu_has_dsp) { |
@@ -104,20 +88,6 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) | |||
104 | err |= __get_user(treg, &sc->sc_lo3); mtlo3(treg); | 88 | err |= __get_user(treg, &sc->sc_lo3); mtlo3(treg); |
105 | err |= __get_user(treg, &sc->sc_dsp); wrdsp(treg, DSP_MASK); | 89 | err |= __get_user(treg, &sc->sc_dsp); wrdsp(treg, DSP_MASK); |
106 | } | 90 | } |
107 | #endif | ||
108 | #ifdef CONFIG_64BIT | ||
109 | err |= __get_user(regs->hi, &sc->sc_hi[0]); | ||
110 | err |= __get_user(regs->lo, &sc->sc_lo[0]); | ||
111 | if (cpu_has_dsp) { | ||
112 | err |= __get_user(treg, &sc->sc_hi[1]); mthi1(treg); | ||
113 | err |= __get_user(treg, &sc->sc_lo[1]); mthi1(treg); | ||
114 | err |= __get_user(treg, &sc->sc_hi[2]); mthi2(treg); | ||
115 | err |= __get_user(treg, &sc->sc_lo[2]); mthi2(treg); | ||
116 | err |= __get_user(treg, &sc->sc_hi[3]); mthi3(treg); | ||
117 | err |= __get_user(treg, &sc->sc_lo[3]); mthi3(treg); | ||
118 | err |= __get_user(treg, &sc->sc_dsp); wrdsp(treg, DSP_MASK); | ||
119 | } | ||
120 | #endif | ||
121 | 91 | ||
122 | #define restore_gp_reg(i) do { \ | 92 | #define restore_gp_reg(i) do { \ |
123 | err |= __get_user(regs->regs[i], &sc->sc_regs[i]); \ | 93 | err |= __get_user(regs->regs[i], &sc->sc_regs[i]); \ |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 2aeaa2fd4b32..8f4fdd94dbd0 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -280,27 +280,6 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
280 | char __user *name; | 280 | char __user *name; |
281 | 281 | ||
282 | switch(cmd) { | 282 | switch(cmd) { |
283 | case SETNAME: { | ||
284 | char nodename[__NEW_UTS_LEN + 1]; | ||
285 | |||
286 | if (!capable(CAP_SYS_ADMIN)) | ||
287 | return -EPERM; | ||
288 | |||
289 | name = (char __user *) arg1; | ||
290 | |||
291 | len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); | ||
292 | if (len < 0) | ||
293 | return -EFAULT; | ||
294 | |||
295 | down_write(&uts_sem); | ||
296 | strncpy(system_utsname.nodename, nodename, len); | ||
297 | nodename[__NEW_UTS_LEN] = '\0'; | ||
298 | strlcpy(system_utsname.nodename, nodename, | ||
299 | sizeof(system_utsname.nodename)); | ||
300 | up_write(&uts_sem); | ||
301 | return 0; | ||
302 | } | ||
303 | |||
304 | case MIPS_ATOMIC_SET: | 283 | case MIPS_ATOMIC_SET: |
305 | printk(KERN_CRIT "How did I get here?\n"); | 284 | printk(KERN_CRIT "How did I get here?\n"); |
306 | return -EINVAL; | 285 | return -EINVAL; |
@@ -313,9 +292,6 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
313 | case FLUSH_CACHE: | 292 | case FLUSH_CACHE: |
314 | __flush_cache_all(); | 293 | __flush_cache_all(); |
315 | return 0; | 294 | return 0; |
316 | |||
317 | case MIPS_RDNVRAM: | ||
318 | return -EIO; | ||
319 | } | 295 | } |
320 | 296 | ||
321 | return -EINVAL; | 297 | return -EINVAL; |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 4901f0a37fca..35cb08da3820 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -902,6 +902,7 @@ static inline void parity_protection_init(void) | |||
902 | { | 902 | { |
903 | switch (current_cpu_data.cputype) { | 903 | switch (current_cpu_data.cputype) { |
904 | case CPU_24K: | 904 | case CPU_24K: |
905 | case CPU_34K: | ||
905 | case CPU_5KC: | 906 | case CPU_5KC: |
906 | write_c0_ecc(0x80000000); | 907 | write_c0_ecc(0x80000000); |
907 | back_to_back_c0_hazard(); | 908 | back_to_back_c0_hazard(); |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 14fa00e3cdfa..b84d1f9ce28e 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -151,23 +151,13 @@ SECTIONS | |||
151 | 151 | ||
152 | /* This is the MIPS specific mdebug section. */ | 152 | /* This is the MIPS specific mdebug section. */ |
153 | .mdebug : { *(.mdebug) } | 153 | .mdebug : { *(.mdebug) } |
154 | /* These are needed for ELF backends which have not yet been | 154 | |
155 | converted to the new style linker. */ | 155 | STABS_DEBUG |
156 | .stab 0 : { *(.stab) } | 156 | |
157 | .stabstr 0 : { *(.stabstr) } | 157 | DWARF_DEBUG |
158 | /* DWARF debug sections. | 158 | |
159 | Symbols in the .debug DWARF section are relative to the beginning of the | ||
160 | section so we begin .debug at 0. It's not clear yet what needs to happen | ||
161 | for the others. */ | ||
162 | .debug 0 : { *(.debug) } | ||
163 | .debug_srcinfo 0 : { *(.debug_srcinfo) } | ||
164 | .debug_aranges 0 : { *(.debug_aranges) } | ||
165 | .debug_pubnames 0 : { *(.debug_pubnames) } | ||
166 | .debug_sfnames 0 : { *(.debug_sfnames) } | ||
167 | .line 0 : { *(.line) } | ||
168 | /* These must appear regardless of . */ | 159 | /* These must appear regardless of . */ |
169 | .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } | 160 | .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } |
170 | .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } | 161 | .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } |
171 | .comment : { *(.comment) } | ||
172 | .note : { *(.note) } | 162 | .note : { *(.note) } |
173 | } | 163 | } |