[PATCH linux-evl v3 1/2] riscv: Add EVL core
Tobias Schaffner <[email protected]> Tue, 28 Jul 2026 13:13:02 +0200
| Newsgroups | dev.linux.lists.xenomai |
|---|---|
| Message-ID | <[email protected]> |
Signed-off-by: Tobias Schaffner <[email protected]> --- arch/riscv/Kconfig | 2 ++ arch/riscv/include/asm/evl/calibration.h | 12 +++++++++++ arch/riscv/include/asm/evl/fptest.h | 22 ++++++++++++++++++++ arch/riscv/include/asm/evl/syscall.h | 25 +++++++++++++++++++++++ arch/riscv/include/asm/evl/thread.h | 12 +++++++++++ arch/riscv/include/dovetail/irq.h | 11 ++++++++++ arch/riscv/include/dovetail/mm_info.h | 11 ++++++++++ arch/riscv/include/dovetail/net.h | 11 ++++++++++ arch/riscv/include/dovetail/netdevice.h | 11 ++++++++++ arch/riscv/include/dovetail/poll.h | 11 ++++++++++ arch/riscv/include/dovetail/skbuff.h | 11 ++++++++++ arch/riscv/include/dovetail/thread_info.h | 11 ++++++++++ arch/riscv/include/uapi/asm/evl/fptest.h | 16 +++++++++++++++ 13 files changed, 166 insertions(+) create mode 100644 arch/riscv/include/asm/evl/calibration.h create mode 100644 arch/riscv/include/asm/evl/fptest.h create mode 100644 arch/riscv/include/asm/evl/syscall.h create mode 100644 arch/riscv/include/asm/evl/thread.h create mode 100644 arch/riscv/include/dovetail/irq.h create mode 100644 arch/riscv/include/dovetail/mm_info.h create mode 100644 arch/riscv/include/dovetail/net.h create mode 100644 arch/riscv/include/dovetail/netdevice.h create mode 100644 arch/riscv/include/dovetail/poll.h create mode 100644 arch/riscv/include/dovetail/skbuff.h create mode 100644 arch/riscv/include/dovetail/thread_info.h create mode 100644 arch/riscv/include/uapi/asm/evl/fptest.h diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 912aada80962..cd5aba11360d 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -152,6 +152,7 @@ config RISCV select HAVE_ARCH_VMAP_STACK if MMU && 64BIT select HAVE_IRQ_PIPELINE select HAVE_DOVETAIL + select HAVE_ARCH_EVL select HAVE_ASM_MODVERSIONS select HAVE_CONTEXT_TRACKING_USER select HAVE_DEBUG_KMEMLEAK @@ -378,6 +379,7 @@ config AS_HAS_OPTION_ARCH source "arch/riscv/Kconfig.socs" source "arch/riscv/Kconfig.errata" source "kernel/Kconfig.dovetail" +source "kernel/Kconfig.evl" menu "Platform type" diff --git a/arch/riscv/include/asm/evl/calibration.h b/arch/riscv/include/asm/evl/calibration.h new file mode 100644 index 000000000000..4da81f33ce3c --- /dev/null +++ b/arch/riscv/include/asm/evl/calibration.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_RISCV_ASM_CALIBRATION_H +#define _EVL_RISCV_ASM_CALIBRATION_H + +#include <linux/kconfig.h> + +static inline unsigned int evl_get_default_clock_gravity(void) +{ + return IS_ENABLED(CONFIG_SMP) ? 6000 : 3000; +} + +#endif /* !_EVL_RISCV_ASM_CALIBRATION_H */ diff --git a/arch/riscv/include/asm/evl/fptest.h b/arch/riscv/include/asm/evl/fptest.h new file mode 100644 index 000000000000..76a8092af702 --- /dev/null +++ b/arch/riscv/include/asm/evl/fptest.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_RISCV_ASM_FPTEST_H +#define _EVL_RISCV_ASM_FPTEST_H + +#include <linux/cpufeature.h> +#include <uapi/asm/evl/fptest.h> + +static inline bool evl_begin_fpu(void) +{ + return false; +} + +static inline void evl_end_fpu(void) { } + +static inline u32 evl_detect_fpu(void) +{ + u32 features = 0; + + return features; +} + +#endif /* _EVL_RISCV_ASM_FPTEST_H */ diff --git a/arch/riscv/include/asm/evl/syscall.h b/arch/riscv/include/asm/evl/syscall.h new file mode 100644 index 000000000000..1ef2d008934f --- /dev/null +++ b/arch/riscv/include/asm/evl/syscall.h @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +#ifndef _EVL_RISC_ASM_SYSCALL_H +#define _EVL_RISC_ASM_SYSCALL_H + +#include <linux/uaccess.h> +#include <asm/unistd.h> +#include <asm/ptrace.h> +#include <asm/syscall.h> +#include <uapi/asm-generic/dovetail.h> + +#define raw_put_user(src, dst) __put_user(src, dst) +#define raw_get_user(dst, src) __get_user(dst, src) + +static inline bool +is_valid_inband_syscall(unsigned int nr) +{ + return nr < NR_syscalls; +} + +static inline bool is_compat_oob_call(void) +{ + return false; +} + +#endif /* !_EVL_RISC_ASM_SYSCALL_H */ diff --git a/arch/riscv/include/asm/evl/thread.h b/arch/riscv/include/asm/evl/thread.h new file mode 100644 index 000000000000..70a07d5bfdbb --- /dev/null +++ b/arch/riscv/include/asm/evl/thread.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_RISCV_ASM_THREAD_H +#define _EVL_RISCV_ASM_THREAD_H + +#include <asm/csr.h> + +static inline bool evl_is_breakpoint(int trapnr) +{ + return trapnr == EXC_BREAKPOINT; +} + +#endif /* !_EVL_RISCV_ASM_THREAD_H */ diff --git a/arch/riscv/include/dovetail/irq.h b/arch/riscv/include/dovetail/irq.h new file mode 100644 index 000000000000..f214e2f6ee2b --- /dev/null +++ b/arch/riscv/include/dovetail/irq.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_IRQ_H +#define _EVL_DOVETAIL_IRQ_H + +#ifdef CONFIG_EVL +#include <asm-generic/evl/irq.h> +#else +#include_next <dovetail/irq.h> +#endif + +#endif /* !_EVL_DOVETAIL_IRQ_H */ diff --git a/arch/riscv/include/dovetail/mm_info.h b/arch/riscv/include/dovetail/mm_info.h new file mode 100644 index 000000000000..e38b97d1f50f --- /dev/null +++ b/arch/riscv/include/dovetail/mm_info.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_MM_INFO_H +#define _EVL_DOVETAIL_MM_INFO_H + +#ifdef CONFIG_EVL +#include <asm-generic/evl/mm_info.h> +#else +#include_next <dovetail/mm_info.h> +#endif + +#endif /* !_EVL_DOVETAIL_MM_INFO_H */ diff --git a/arch/riscv/include/dovetail/net.h b/arch/riscv/include/dovetail/net.h new file mode 100644 index 000000000000..34062fd4dd13 --- /dev/null +++ b/arch/riscv/include/dovetail/net.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_NET_H +#define _EVL_DOVETAIL_NET_H + +#ifdef CONFIG_NET_OOB +#include <asm-generic/evl/net.h> +#else +#include_next <dovetail/net.h> +#endif + +#endif /* !_EVL_DOVETAIL_NET_H */ diff --git a/arch/riscv/include/dovetail/netdevice.h b/arch/riscv/include/dovetail/netdevice.h new file mode 100644 index 000000000000..ad3e7e99f1c0 --- /dev/null +++ b/arch/riscv/include/dovetail/netdevice.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_NETDEVICE_H +#define _EVL_DOVETAIL_NETDEVICE_H + +#ifdef CONFIG_NET_OOB +#include <asm-generic/evl/netdevice.h> +#else +#include_next <dovetail/netdevice.h> +#endif + +#endif /* !_EVL_DOVETAIL_NETDEVICE_H */ diff --git a/arch/riscv/include/dovetail/poll.h b/arch/riscv/include/dovetail/poll.h new file mode 100644 index 000000000000..7196d625d0d9 --- /dev/null +++ b/arch/riscv/include/dovetail/poll.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_POLL_H +#define _EVL_DOVETAIL_POLL_H + +#ifdef CONFIG_EVL +#include <asm-generic/evl/poll.h> +#else +#include_next <dovetail/poll.h> +#endif + +#endif /* !_EVL_DOVETAIL_POLL_H */ diff --git a/arch/riscv/include/dovetail/skbuff.h b/arch/riscv/include/dovetail/skbuff.h new file mode 100644 index 000000000000..c6ee9016a37a --- /dev/null +++ b/arch/riscv/include/dovetail/skbuff.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_SKBUFF_H +#define _EVL_DOVETAIL_SKBUFF_H + +#ifdef CONFIG_NET_OOB +#include <asm-generic/evl/skbuff.h> +#else +#include_next <dovetail/skbuff.h> +#endif + +#endif /* !_EVL_DOVETAIL_SKBUFF_H */ diff --git a/arch/riscv/include/dovetail/thread_info.h b/arch/riscv/include/dovetail/thread_info.h new file mode 100644 index 000000000000..bfef01471f0c --- /dev/null +++ b/arch/riscv/include/dovetail/thread_info.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _EVL_DOVETAIL_THREAD_INFO_H +#define _EVL_DOVETAIL_THREAD_INFO_H + +#ifdef CONFIG_EVL +#include <asm-generic/evl/thread_info.h> +#else +#include_next <dovetail/thread_info.h> +#endif + +#endif /* !_EVL_DOVETAIL_THREAD_INFO_H */ diff --git a/arch/riscv/include/uapi/asm/evl/fptest.h b/arch/riscv/include/uapi/asm/evl/fptest.h new file mode 100644 index 000000000000..1b1f4f0ce373 --- /dev/null +++ b/arch/riscv/include/uapi/asm/evl/fptest.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note + * + * Derived from Xenomai Cobalt, https://xenomai.org/ + * Copyright (C) 2006 Gilles Chanteperdrix <[email protected]>. + */ +#ifndef _EVL_RISCV_ASM_UAPI_FPTEST_H +#define _EVL_RISCV_ASM_UAPI_FPTEST_H + +#include <linux/types.h> + +#define evl_riscv_fp 0x1 + +#define evl_set_fpregs(__features, __val) +#define evl_check_fpregs(__features, __val, __bad) 0 + +#endif /* !_EVL_RISCV_ASM_UAPI_FPTEST_H */ -- 2.43.0