aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/signal.c
diff options
context:
space:
mode:
authorFranck Bui-Huu <fbuihuu@gmail.com>2007-02-02 11:41:47 -0500
committerRalf Baechle <ralf@linux-mips.org>2007-02-21 19:50:44 -0500
commit9693a85378b590cc7a4aa2db2174422585c7c8c4 (patch)
tree43d031f8e555d9276e68bdb158bd264c2d260346 /arch/mips/kernel/signal.c
parent9654640d0af8f2de40ff3807d3695109d3463f54 (diff)
[MIPS] Add basic SMARTMIPS ASE support
This patch adds trivial support for SMARTMIPS extension. This extension is currently implemented by 4KS[CD] CPUs. Basically it saves/restores ACX register, which is part of the SMARTMIPS ASE, when needed. This patch does *not* add any support for Smartmips MMU features. Futhermore this patch does not add explicit support for 4KS[CD] CPUs since they are respectively mips32 and mips32r2 compliant. So with the current processor configuration, a platform that has such CPUs needs to select both configs: CPU_HAS_SMARTMIPS SYS_HAS_CPU_MIPS32_R[12] This is due to the processor configuration which is mixing up all the architecture variants and the processor types. The drawback of this, is that we currently pass '-march=mips32' option to gcc when building a kernel instead of '-march=4ksc' for 4KSC case. This can lead to a kernel image a little bit bigger than required. Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/signal.c')
-rw-r--r--arch/mips/kernel/signal.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/mips/kernel/signal.c b/arch/mips/kernel/signal.c
index adbfb95e42d0..f091786187a6 100644
--- a/arch/mips/kernel/signal.c
+++ b/arch/mips/kernel/signal.c
@@ -89,6 +89,9 @@ int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
89 for (i = 1; i < 32; i++) 89 for (i = 1; i < 32; i++)
90 err |= __put_user(regs->regs[i], &sc->sc_regs[i]); 90 err |= __put_user(regs->regs[i], &sc->sc_regs[i]);
91 91
92#ifdef CONFIG_CPU_HAS_SMARTMIPS
93 err |= __put_user(regs->acx, &sc->sc_acx);
94#endif
92 err |= __put_user(regs->hi, &sc->sc_mdhi); 95 err |= __put_user(regs->hi, &sc->sc_mdhi);
93 err |= __put_user(regs->lo, &sc->sc_mdlo); 96 err |= __put_user(regs->lo, &sc->sc_mdlo);
94 if (cpu_has_dsp) { 97 if (cpu_has_dsp) {
@@ -132,6 +135,10 @@ int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
132 current_thread_info()->restart_block.fn = do_no_restart_syscall; 135 current_thread_info()->restart_block.fn = do_no_restart_syscall;
133 136
134 err |= __get_user(regs->cp0_epc, &sc->sc_pc); 137 err |= __get_user(regs->cp0_epc, &sc->sc_pc);
138
139#ifdef CONFIG_CPU_HAS_SMARTMIPS
140 err |= __get_user(regs->acx, &sc->sc_acx);
141#endif
135 err |= __get_user(regs->hi, &sc->sc_mdhi); 142 err |= __get_user(regs->hi, &sc->sc_mdhi);
136 err |= __get_user(regs->lo, &sc->sc_mdlo); 143 err |= __get_user(regs->lo, &sc->sc_mdlo);
137 if (cpu_has_dsp) { 144 if (cpu_has_dsp) {