diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-01-16 10:09:10 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-01-16 10:09:10 +0100 | 
| commit | af2519fb2298cdf7540082c36f4d8c66bbff103f (patch) | |
| tree | 1d290d28d42d42f9e693457762c4008988628060 /arch/mips/kernel/traps.c | |
| parent | 961d7d0ee5150e0197cc81c2a8884ecb230276e2 (diff) | |
| parent | 7cb36b6ccdca03bd87e8faca7fd920643dd1aec7 (diff) | |
Merge branch 'linus' into core/iommu
Conflicts:
	arch/ia64/include/asm/dma-mapping.h
	arch/ia64/include/asm/machvec.h
	arch/ia64/include/asm/machvec_sn2.h
Diffstat (limited to 'arch/mips/kernel/traps.c')
| -rw-r--r-- | arch/mips/kernel/traps.c | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 353056110f2b..f6083c6bfaa4 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -47,6 +47,7 @@  #include <asm/mmu_context.h>  #include <asm/types.h>  #include <asm/stacktrace.h> +#include <asm/irq.h>  extern void check_wait(void);  extern asmlinkage void r4k_wait(void); @@ -78,6 +79,10 @@ extern asmlinkage void handle_reserved(void);  extern int fpu_emulator_cop1Handler(struct pt_regs *xcp,  	struct mips_fpu_struct *ctx, int has_fpu); +#ifdef CONFIG_CPU_CAVIUM_OCTEON +extern asmlinkage void octeon_cop2_restore(struct octeon_cop2_state *task); +#endif +  void (*board_be_init)(void);  int (*board_be_handler)(struct pt_regs *regs, int is_fixup);  void (*board_nmi_handler_setup)(void); @@ -860,6 +865,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)  	unsigned int opcode;  	unsigned int cpid;  	int status; +	unsigned long __maybe_unused flags;  	die_if_kernel("do_cpu invoked from kernel context!", regs); @@ -915,6 +921,17 @@ asmlinkage void do_cpu(struct pt_regs *regs)  		return;  	case 2: +#ifdef CONFIG_CPU_CAVIUM_OCTEON +		prefetch(¤t->thread.cp2); +		local_irq_save(flags); +		KSTK_STATUS(current) |= ST0_CU2; +		status = read_c0_status(); +		write_c0_status(status | ST0_CU2); +		octeon_cop2_restore(&(current->thread.cp2)); +		write_c0_status(status & ~ST0_CU2); +		local_irq_restore(flags); +		return; +#endif  	case 3:  		break;  	} @@ -1488,6 +1505,10 @@ void __cpuinit per_cpu_trap_init(void)  		write_c0_hwrena(enable);  	} +#ifdef CONFIG_CPU_CAVIUM_OCTEON +	write_c0_hwrena(0xc000000f); /* Octeon has register 30 and 31 */ +#endif +  #ifdef CONFIG_MIPS_MT_SMTC  	if (!secondaryTC) {  #endif /* CONFIG_MIPS_MT_SMTC */  | 
