Re: [PATCH v2] riscv: Add support to no-FPU systems

From: Palmer Dabbelt
Date: Sat Aug 04 2018 - 00:03:11 EST

On Wed, 01 Aug 2018 11:23:43 PDT (-0700), Andrew Waterman wrote:
On Wed, Aug 1, 2018 at 10:55 AM, Palmer Dabbelt <palmer@xxxxxxxxxx> wrote:
On Tue, 26 Jun 2018 21:22:26 PDT (-0700), alankao@xxxxxxxxxxxxx wrote:

This patch adds an option, CONFIG_FPU, to enable/disable floating
procedures. Also, some style issues are fixed.

Signed-off-by: Alan Kao <alankao@xxxxxxxxxxxxx>
Cc: Greentime Hu <greentime@xxxxxxxxxxxxx>
Cc: Zong Li <zong@xxxxxxxxxxxxx>
arch/riscv/Kconfig | 9 ++++
arch/riscv/Makefile | 19 +++----
arch/riscv/include/asm/switch_to.h | 6 +++
arch/riscv/kernel/entry.S | 3 +-
arch/riscv/kernel/process.c | 7 ++-
arch/riscv/kernel/signal.c | 82 +++++++++++++++++++++---------
6 files changed, 90 insertions(+), 36 deletions(-)

diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 6debcc4afc72..6069597ba73f 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -232,6 +232,15 @@ config RISCV_BASE_PMU


+config FPU
+ bool "FPU support"
+ default y
+ help
+ Say N here if you want to disable all floating-point related
+ in the kernel.
+ If you don't know what to do here, say Y.

Sorry for letting this slide for a bit. While I'm not opposed to a solution
that requires a FPU Kconfig option, it'd be a bit better if we could detect
this at boot time. I think this should be possible because at one point
this actually worked and we could boot the same kernel on FPU and no-FPU

I believe it would suffice to have start_thread set sstatus.FS to OFF
for no-FPU systems (vs. INITIAL for systems with FPU). The ISA
string in the devicetree should indicate whether F/D extensions are

That said, it makes sense to me to additionally provide the Kconfig
option. This would elide the sstatus.SD check for no-FPU systems,
shaving a couple instructions off the context-switch path. It would
also enable mimicking the behavior of a no-FPU system even when the
FPU is present.

That sounds like a good argument. Do you mind submitting a two-part patch set, to:

* Allow FPU kernels to detect and run correctly on non-FPU systems. You should be able to detect these very early by writing to sstatus, or later by looking at the device tree.
* Add a Kconfig option to disable the FPU entirely (which is pretty much this patch).


If that's not possible then we'll have to take something like this. There
were some comments on this v2 but I don't see a v3, did I miss one?