diff options
author | Kim Phillips <kim.phillips@freescale.com> | 2006-12-08 03:43:30 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2006-12-08 03:43:30 -0500 |
commit | aa42c69c67f82e88f0726258efe7306708e1cf14 (patch) | |
tree | d5305de3285d504e1bd1e955155e5e06b5b9ef76 /arch/powerpc/kernel/traps.c | |
parent | c99767974ebd2a719d849fdeaaa1674456f5283f (diff) |
[POWERPC] Add support for FP emulation for the e300c2 core
The e300c2 has no FPU. Its MSR[FP] is grounded to zero. If an attempt
is made to execute a floating point instruction (including floating-point
load, store, or move instructions), the e300c2 takes a floating-point
unavailable interrupt.
This patch adds support for FP emulation on the e300c2 by declaring a
new CPU_FTR_FP_TAKES_FPUNAVAIL, where FP unavail interrupts are
intercepted and redirected to the ProgramCheck exception path for
correct emulation handling.
(If we run out of CPU_FTR bits we could look to reclaim this bit by adding
support to test the cpu_user_features for PPC_FEATURE_HAS_FPU instead)
It adds a nop to the exception path for 32-bit processors with a FPU.
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 0d4e203fa7a..fde820e52d0 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -782,6 +782,8 @@ void __kprobes program_check_exception(struct pt_regs *regs) | |||
782 | unsigned int reason = get_reason(regs); | 782 | unsigned int reason = get_reason(regs); |
783 | extern int do_mathemu(struct pt_regs *regs); | 783 | extern int do_mathemu(struct pt_regs *regs); |
784 | 784 | ||
785 | /* We can now get here via a FP Unavailable exception if the core | ||
786 | * has no FPU, in that case no reason flags will be set */ | ||
785 | #ifdef CONFIG_MATH_EMULATION | 787 | #ifdef CONFIG_MATH_EMULATION |
786 | /* (reason & REASON_ILLEGAL) would be the obvious thing here, | 788 | /* (reason & REASON_ILLEGAL) would be the obvious thing here, |
787 | * but there seems to be a hardware bug on the 405GP (RevD) | 789 | * but there seems to be a hardware bug on the 405GP (RevD) |