Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 9671f706 authored by Alan Kao's avatar Alan Kao Committed by Palmer Dabbelt
Browse files

Allow to disable FPU support



FPU codes have been separated from common part in previous patches.
This patch add the CONFIG_FPU option and some stubs, so that a no-FPU
configuration is allowed.

Signed-off-by: default avatarAlan Kao <alankao@andestech.com>
Cc: Greentime Hu <greentime@andestech.com>
Cc: Vincent Chen <vincentc@andestech.com>
Cc: Zong Li <zong@andestech.com>
Cc: Nick Hu <nickhu@andestech.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarPalmer Dabbelt <palmer@sifive.com>
parent e8be5302
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -208,6 +208,15 @@ config RISCV_BASE_PMU

endmenu

config FPU
	bool "FPU support"
	default y
	help
	  Say N here if you want to disable all floating-point related procedure
	  in the kernel.

	  If you don't know what to do here, say Y.

endmenu

menu "Kernel type"
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ KBUILD_CFLAGS += -Wall
riscv-march-$(CONFIG_ARCH_RV32I)	:= rv32im
riscv-march-$(CONFIG_ARCH_RV64I)	:= rv64im
riscv-march-$(CONFIG_RISCV_ISA_A)	:= $(riscv-march-y)a
riscv-march-y				:= $(riscv-march-y)fd
riscv-march-$(CONFIG_FPU)		:= $(riscv-march-y)fd
riscv-march-$(CONFIG_RISCV_ISA_C)	:= $(riscv-march-y)c
KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
KBUILD_AFLAGS += -march=$(riscv-march-y)
+10 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#include <asm/ptrace.h>
#include <asm/csr.h>

#ifdef CONFIG_FPU
extern void __fstate_save(struct task_struct *save_to);
extern void __fstate_restore(struct task_struct *restore_from);

@@ -55,6 +56,15 @@ static inline void __switch_to_aux(struct task_struct *prev,
	fstate_restore(next, task_pt_regs(next));
}

#define DEFAULT_SSTATUS (SR_SPIE | SR_FS_INITIAL)

#else
#define fstate_save(task, regs) do { } while (0)
#define fstate_restore(task, regs) do { } while (0)
#define __switch_to_aux(__prev, __next) do { } while (0)
#define DEFAULT_SSTATUS (SR_SPIE | SR_FS_OFF)
#endif

extern struct task_struct *__switch_to(struct task_struct *,
				       struct task_struct *);

+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@ extra-y += vmlinux.lds
obj-y	+= cpu.o
obj-y	+= cpufeature.o
obj-y	+= entry.o
obj-y	+= fpu.o
obj-y	+= irq.o
obj-y	+= process.o
obj-y	+= ptrace.o
@@ -32,6 +31,7 @@ obj-y += vdso/

CFLAGS_setup.o := -mcmodel=medany

obj-$(CONFIG_FPU)		+= fpu.o
obj-$(CONFIG_SMP)		+= smpboot.o
obj-$(CONFIG_SMP)		+= smp.o
obj-$(CONFIG_MODULES)		+= module.o
+3 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ void show_regs(struct pt_regs *regs)
void start_thread(struct pt_regs *regs, unsigned long pc,
	unsigned long sp)
{
	regs->sstatus = SR_SPIE /* User mode, irqs on */ | SR_FS_INITIAL;
	regs->sstatus = DEFAULT_SSTATUS;
	regs->sepc = pc;
	regs->sp = sp;
	set_fs(USER_DS);
@@ -84,12 +84,14 @@ void start_thread(struct pt_regs *regs, unsigned long pc,

void flush_thread(void)
{
#ifdef CONFIG_FPU
	/*
	 * Reset FPU context
	 *	frm: round to nearest, ties to even (IEEE default)
	 *	fflags: accrued exceptions cleared
	 */
	memset(&current->thread.fstate, 0, sizeof(current->thread.fstate));
#endif
}

int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
Loading