source: trunk/target/linux/generic/patches-2.6.38/025-mips_disable_fpu.patch @ 26194

Last change on this file since 26194 was 26194, checked in by nbd, 5 years ago

kernel: refresh 2.6.38 patches for final release

File size: 4.1 KB
  • arch/mips/Kconfig

    MIPS: allow disabling the kernel FPU emulator
    
    This patch allows turning off the in-kernel Algorithmics
    FPU emulator support, which allows one to save a couple of
    precious blocks on an embedded system.
    
    Signed-off-by: Florian Fainelli <florian@openwrt.org>
    --
    a b config I8259 
    887887config MIPS_BONITO64 
    888888        bool 
    889889 
     890config MIPS_FPU_EMU 
     891        bool "Enable FPU emulation" 
     892        default y 
     893        help 
     894           This option allows building a kernel with or without the Algorithmics 
     895           FPU emulator enabled. Turning off this option results in a kernel which 
     896           does not catch floating operations exceptions. Make sure that your toolchain 
     897           is configured to enable software floating point emulation in that case. 
     898                 
     899           If unsure say Y here. 
     900 
    890901config MIPS_MSC 
    891902        bool 
    892903 
  • arch/mips/math-emu/Makefile

    a b  
    22# Makefile for the Linux/MIPS kernel FPU emulation. 
    33# 
    44 
    5 obj-y   := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \ 
     5obj-y   :=      kernel_linkage.o dsemul.o cp1emu.o 
     6 
     7obj-$(CONFIG_MIPS_FPU_EMU)      += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \ 
    68           ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \ 
    79           dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \ 
    810           dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \ 
    911           sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \ 
    1012           sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \ 
    11            dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o 
     13           dp_sqrt.o sp_sqrt.o 
    1214 
  • arch/mips/math-emu/cp1emu.c

    a b  
    5858#define __mips 4 
    5959 
    6060/* Function which emulates a floating point instruction. */ 
     61#ifdef CONFIG_DEBUG_FS 
     62DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats); 
     63#endif 
    6164 
     65#ifdef CONFIG_MIPS_FPU_EMU 
    6266static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *, 
    6367        mips_instruction); 
    6468 
    static int fpux_emu(struct pt_regs *, 
    6973 
    7074/* Further private data for which no space exists in mips_fpu_struct */ 
    7175 
    72 #ifdef CONFIG_DEBUG_FS 
    73 DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats); 
    74 #endif 
    75  
    7676/* Control registers */ 
    7777 
    7878#define FPCREG_RID      0       /* $0  = revision id */ 
    int fpu_emulator_cop1Handler(struct pt_r 
    13611361 
    13621362        return sig; 
    13631363} 
    1364  
    13651364#ifdef CONFIG_DEBUG_FS 
    13661365 
    13671366static int fpuemu_stat_get(void *data, u64 *val) 
    static int __init debugfs_fpuemu(void) 
    14101409        return 0; 
    14111410} 
    14121411__initcall(debugfs_fpuemu); 
    1413 #endif 
     1412#endif /* CONFIG_DEBUGFS */ 
     1413#else 
     1414int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx, 
     1415        int has_fpu) 
     1416{ 
     1417        return 0; 
     1418} 
     1419#endif /* CONFIG_MIPS_FPU_EMU */ 
  • arch/mips/math-emu/dsemul.c

    a b int mips_dsemul(struct pt_regs *regs, mi 
    109109        return SIGILL;          /* force out of emulation loop */ 
    110110} 
    111111 
     112#ifdef CONFIG_MIPS_FPU_EMU 
    112113int do_dsemulret(struct pt_regs *xcp) 
    113114{ 
    114115        struct emuframe __user *fr; 
    int do_dsemulret(struct pt_regs *xcp) 
    165166 
    166167        return 1; 
    167168} 
     169#else 
     170int do_dsemulret(struct pt_regs *xcp) 
     171{ 
     172        return 0; 
     173} 
     174#endif /* CONFIG_MIPS_FPU_EMU */ 
  • arch/mips/math-emu/kernel_linkage.c

    a b  
    2929 
    3030#define SIGNALLING_NAN 0x7ff800007ff80000LL 
    3131 
     32#ifdef CONFIG_MIPS_FPU_EMU 
    3233void fpu_emulator_init_fpu(void) 
    3334{ 
    3435        static int first = 1; 
    int fpu_emulator_restore_context32(struc 
    112113 
    113114        return err; 
    114115} 
    115 #endif 
     116#endif  /* CONFIG_64BIT */ 
     117#else 
     118 
     119void fpu_emulator_init_fpu(void) 
     120{ 
     121        printk(KERN_INFO "FPU emulator disabled, make sure your toolchain" 
     122                "was compiled with software floating point support (soft-float)\n"); 
     123        return; 
     124} 
     125 
     126int fpu_emulator_save_context(struct sigcontext __user *sc) 
     127{ 
     128        return 0; 
     129} 
     130 
     131int fpu_emulator_restore_context(struct sigcontext __user *sc) 
     132{ 
     133        return 0; 
     134} 
     135 
     136int fpu_emulator_save_context32(struct sigcontext32 __user *sc) 
     137{ 
     138        return 0; 
     139} 
     140 
     141int fpu_emulator_restore_context32(struct sigcontext32 __user *sc) 
     142{ 
     143        return 0; 
     144} 
     145 
     146#ifdef CONFIG_64BIT 
     147#endif  /* CONFIG_64BIT */ 
     148#endif /* CONFIG_MIPS_FPU_EMU */ 
Note: See TracBrowser for help on using the repository browser.