aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/Kconfig11
-rw-r--r--arch/powerpc/kernel/traps.c22
2 files changed, 1 insertions, 32 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index e3009abc7f75..5374776b4c7c 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -319,17 +319,6 @@ config PPC_TRANSACTIONAL_MEM
319 ---help--- 319 ---help---
320 Support user-mode Transactional Memory on POWERPC. 320 Support user-mode Transactional Memory on POWERPC.
321 321
322config 8XX_MINIMAL_FPEMU
323 bool "Minimal math emulation for 8xx"
324 depends on 8xx && !MATH_EMULATION
325 help
326 Older arch/ppc kernels still emulated a few floating point
327 instructions such as load and store, even when full math
328 emulation is disabled. Say "Y" here if you want to preserve
329 this behavior.
330
331 It is recommended that you build a soft-float userspace instead.
332
333config IOMMU_HELPER 322config IOMMU_HELPER
334 def_bool PPC64 323 def_bool PPC64
335 324
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index f4b5687b0c66..071f6e040eb2 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -1396,8 +1396,7 @@ void performance_monitor_exception(struct pt_regs *regs)
1396void SoftwareEmulation(struct pt_regs *regs) 1396void SoftwareEmulation(struct pt_regs *regs)
1397{ 1397{
1398 extern int do_mathemu(struct pt_regs *); 1398 extern int do_mathemu(struct pt_regs *);
1399 extern int Soft_emulate_8xx(struct pt_regs *); 1399#if defined(CONFIG_MATH_EMULATION)
1400#if defined(CONFIG_MATH_EMULATION) || defined(CONFIG_8XX_MINIMAL_FPEMU)
1401 int errcode; 1400 int errcode;
1402#endif 1401#endif
1403 1402
@@ -1430,23 +1429,6 @@ void SoftwareEmulation(struct pt_regs *regs)
1430 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); 1429 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1431 return; 1430 return;
1432 } 1431 }
1433
1434#elif defined(CONFIG_8XX_MINIMAL_FPEMU)
1435 errcode = Soft_emulate_8xx(regs);
1436 if (errcode >= 0)
1437 PPC_WARN_EMULATED(8xx, regs);
1438
1439 switch (errcode) {
1440 case 0:
1441 emulate_single_step(regs);
1442 return;
1443 case 1:
1444 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1445 return;
1446 case -EFAULT:
1447 _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip);
1448 return;
1449 }
1450#else 1432#else
1451 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); 1433 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1452#endif 1434#endif
@@ -1796,8 +1778,6 @@ struct ppc_emulated ppc_emulated = {
1796 WARN_EMULATED_SETUP(unaligned), 1778 WARN_EMULATED_SETUP(unaligned),
1797#ifdef CONFIG_MATH_EMULATION 1779#ifdef CONFIG_MATH_EMULATION
1798 WARN_EMULATED_SETUP(math), 1780 WARN_EMULATED_SETUP(math),
1799#elif defined(CONFIG_8XX_MINIMAL_FPEMU)
1800 WARN_EMULATED_SETUP(8xx),
1801#endif 1781#endif
1802#ifdef CONFIG_VSX 1782#ifdef CONFIG_VSX
1803 WARN_EMULATED_SETUP(vsx), 1783 WARN_EMULATED_SETUP(vsx),