2019-05-19 15:07:45 +03:00
# SPDX-License-Identifier: GPL-2.0-only
2017-07-11 04:08:08 +03:00
#
# For a description of the syntax of this configuration file,
2019-06-12 20:52:48 +03:00
# see Documentation/kbuild/kconfig-language.rst.
2017-07-11 04:08:08 +03:00
#
2018-04-27 09:38:23 +03:00
config 64BIT
bool
config 32BIT
bool
2017-07-11 04:08:08 +03:00
config RISCV
def_bool y
select OF
select OF_EARLY_FLATTREE
select OF_IRQ
2019-06-13 10:09:03 +03:00
select ARCH_HAS_BINFMT_FLAT
2017-07-11 04:08:08 +03:00
select ARCH_WANT_FRAME_POINTERS
select CLONE_BACKWARDS
select COMMON_CLK
select GENERIC_CLOCKEVENTS
select GENERIC_CPU_DEVICES
select GENERIC_IRQ_SHOW
select GENERIC_PCI_IOMAP
2018-12-04 13:29:51 +03:00
select GENERIC_SCHED_CLOCK
2019-10-28 15:10:41 +03:00
select GENERIC_STRNCPY_FROM_USER if MMU
select GENERIC_STRNLEN_USER if MMU
2017-07-11 04:08:08 +03:00
select GENERIC_SMP_IDLE_THREAD
2019-04-15 12:14:35 +03:00
select GENERIC_ATOMIC64 if !64BIT
2019-08-13 12:27:56 +03:00
select GENERIC_IOREMAP
2018-10-29 13:48:53 +03:00
select HAVE_ARCH_AUDITSYSCALL
2019-10-05 03:12:22 +03:00
select HAVE_ARCH_SECCOMP_FILTER
2019-08-19 08:54:20 +03:00
select HAVE_ASM_MODVERSIONS
2018-01-16 11:37:50 +03:00
select HAVE_MEMBLOCK_NODE_MAP
2019-10-28 15:10:41 +03:00
select HAVE_DMA_CONTIGUOUS if MMU
RISC-V: Add futex support.
Here is an attempt to add the missing futex support. I started with the MIPS
version of futex.h and modified it until I got it working. I tested it on
a HiFive Unleashed running Fedora Core 29 using the fc29 4.15 version of the
kernel. This was tested against the glibc testsuite, where it fixes 14 nptl
related testsuite failures. That unfortunately only tests the cmpxchg support,
so I also used the testcase at the end of
https://lwn.net/Articles/148830/
which tests the atomic_op functionality, except that it doesn't verify that
the operations are atomic, which they obviously are. This testcase runs
successfully with the patch and fails without it.
I'm not a kernel expert, so there could be details I got wrong here. I wasn't
sure about the memory model support, so I used aqrl which seemed safest, and
didn't add fences which seemed unnecessary. I'm not sure about the copyright
statements, I left in Ralf Baechle's line because I started with his code.
Checkpatch reports some style problems, but it is the same style as the MIPS
futex.h, and the uses of ENOSYS appear correct even though it complains about
them. I don't know if any of that matters.
This patch was tested on qemu with the glibc nptl/tst-cond-except
testcase, and the wake_op testcase from above.
Signed-off-by: Jim Wilson <jimw@sifive.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
2018-10-17 00:42:59 +03:00
select HAVE_FUTEX_CMPXCHG if FUTEX
2018-04-20 02:27:49 +03:00
select HAVE_PERF_EVENTS
2019-09-05 06:46:35 +03:00
select HAVE_PERF_REGS
select HAVE_PERF_USER_STACK_DUMP
2018-12-06 18:26:35 +03:00
select HAVE_SYSCALL_TRACEPOINTS
2017-07-11 04:08:08 +03:00
select IRQ_DOMAIN
select SPARSE_IRQ
select SYSCTL_EXCEPTION_TRACE
select HAVE_ARCH_TRACEHOOK
2018-11-15 22:05:32 +03:00
select HAVE_PCI
2017-07-11 04:08:08 +03:00
select MODULES_USE_ELF_RELA if MODULES
RISC-V: Support MODULE_SECTIONS mechanism on RV32
This patch supports dynamic generate got and plt sections mechanism on
rv32. It contains the modification as follows:
- Always enable MODULE_SECTIONS (both rv64 and rv32)
- Change the fixed size type.
This patch had been tested by following modules:
btrfs 6795991 0 - Live 0xa544b000
test_static_keys 17304 0 - Live 0xa28be000
zstd_compress 1198986 1 btrfs, Live 0xa2a25000
zstd_decompress 608112 1 btrfs, Live 0xa24e7000
lzo 8787 0 - Live 0xa2049000
xor 27461 1 btrfs, Live 0xa2041000
zram 78849 0 - Live 0xa2276000
netdevsim 55909 0 - Live 0xa202d000
tun 211534 0 - Live 0xa21b5000
fuse 566049 0 - Live 0xa25fb000
nfs_layout_flexfiles 192597 0 - Live 0xa229b000
ramoops 74895 0 - Live 0xa2019000
xfs 3973221 0 - Live 0xa507f000
libcrc32c 3053 2 btrfs,xfs, Live 0xa34af000
lzo_compress 17302 2 btrfs,lzo, Live 0xa347d000
lzo_decompress 7178 2 btrfs,lzo, Live 0xa3451000
raid6_pq 142086 1 btrfs, Live 0xa33a4000
reed_solomon 31022 1 ramoops, Live 0xa31eb000
test_bitmap 3734 0 - Live 0xa31af000
test_bpf 1588736 0 - Live 0xa2c11000
test_kmod 41161 0 - Live 0xa29f8000
test_module 1356 0 - Live 0xa299e000
test_printf 6024 0 [permanent], Live 0xa2971000
test_static_key_base 5797 1 test_static_keys, Live 0xa2931000
test_user_copy 4382 0 - Live 0xa28c9000
xxhash 70501 2 zstd_compress,zstd_decompress, Live 0xa2055000
Signed-off-by: Zong Li <zong@andestech.com>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
2018-12-07 12:02:16 +03:00
select MODULE_SECTIONS if MODULES
2017-07-11 04:08:08 +03:00
select THREAD_INFO_IN_TASK
2018-11-15 22:05:33 +03:00
select PCI_DOMAINS_GENERIC if PCI
2018-11-15 22:05:32 +03:00
select PCI_MSI if PCI
2017-07-11 04:08:08 +03:00
select RISCV_TIMER
2019-10-28 15:10:41 +03:00
select UACCESS_MEMCPY if !MMU
2018-03-08 02:57:28 +03:00
select GENERIC_IRQ_MULTI_HANDLER
2019-06-27 22:53:00 +03:00
select GENERIC_ARCH_TOPOLOGY if SMP
2018-06-08 03:06:08 +03:00
select ARCH_HAS_PTE_SPECIAL
2019-02-22 17:45:42 +03:00
select ARCH_HAS_MMIOWB
bpf, riscv: add BPF JIT for RV64G
This commit adds a BPF JIT for RV64G.
The JIT is a two-pass JIT, and has a dynamic prolog/epilogue (similar
to the MIPS64 BPF JIT) instead of static ones (e.g. x86_64).
At the moment the RISC-V Linux port does not support
CONFIG_HAVE_KPROBES, which means that CONFIG_BPF_EVENTS is not
supported. Thus, no tests involving BPF_PROG_TYPE_TRACEPOINT,
BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_KPROBE and
BPF_PROG_TYPE_RAW_TRACEPOINT passes.
The implementation does not support "far branching" (>4KiB).
Test results:
# modprobe test_bpf
test_bpf: Summary: 378 PASSED, 0 FAILED, [366/366 JIT'ed]
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier
...
Summary: 761 PASSED, 507 SKIPPED, 2 FAILED
Note that "test_verifier" was run with one build with
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y and one without, otherwise
many of the the tests that require unaligned access were skipped.
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
0
No CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS:
# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
# ./test_verifier | grep -c 'NOTE.*unknown align'
59
The two failing test_verifier tests are:
"ld_abs: vlan + abs, test 1"
"ld_abs: jump around ld_abs"
This is due to that "far branching" involved in those tests.
All tests where done on QEMU (QEMU emulator version 3.1.50
(v3.1.0-688-g8ae951fbc106)).
Signed-off-by: Björn Töpel <bjorn.topel@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-02-05 15:41:22 +03:00
select HAVE_EBPF_JIT if 64BIT
2019-05-06 14:27:06 +03:00
select EDAC_SUPPORT
2019-05-26 15:50:38 +03:00
select ARCH_HAS_GIGANTIC_PAGE
select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
2019-08-29 00:40:54 +03:00
select SPARSEMEM_STATIC if 32BIT
2019-09-24 01:39:21 +03:00
select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
2019-10-28 15:10:41 +03:00
select HAVE_ARCH_MMAP_RND_BITS if MMU
2020-01-02 06:09:54 +03:00
select ARCH_HAS_GCOV_PROFILE_ALL
2020-01-02 20:24:11 +03:00
select HAVE_COPY_THREAD_TLS
2020-01-06 21:38:32 +03:00
select HAVE_ARCH_KASAN if MMU && 64BIT
2019-09-24 01:39:21 +03:00
config ARCH_MMAP_RND_BITS_MIN
default 18 if 64BIT
default 8
# max bits determined by the following formula:
# VA_BITS - PAGE_SHIFT - 3
config ARCH_MMAP_RND_BITS_MAX
default 24 if 64BIT # SV39 based
default 17
2017-07-11 04:08:08 +03:00
2019-10-28 15:10:32 +03:00
# set if we run in machine mode, cleared if we run in supervisor mode
config RISCV_M_MODE
bool
2019-10-28 15:10:41 +03:00
default !MMU
2019-10-28 15:10:32 +03:00
2019-10-28 15:10:33 +03:00
# set if we are running in S-mode and can use SBI calls
config RISCV_SBI
bool
depends on !RISCV_M_MODE
default y
2017-07-11 04:08:08 +03:00
config MMU
2019-10-28 15:10:41 +03:00
bool "MMU-based Paged Memory Management Support"
default y
help
Select if you want MMU-based virtualised addressing space
support by paged memory management. If unsure, say 'Y'.
2017-07-11 04:08:08 +03:00
2018-01-16 11:37:50 +03:00
config ZONE_DMA32
bool
2018-04-27 09:41:09 +03:00
default y if 64BIT
2018-01-16 11:37:50 +03:00
2019-08-29 00:40:54 +03:00
config VA_BITS
int
default 32 if 32BIT
default 39 if 64BIT
config PA_BITS
int
default 34 if 32BIT
default 56 if 64BIT
2017-07-11 04:08:08 +03:00
config PAGE_OFFSET
hex
default 0xC0000000 if 32BIT && MAXPHYSMEM_2GB
2019-10-28 15:10:41 +03:00
default 0x80000000 if 64BIT && !MMU
2017-07-11 04:08:08 +03:00
default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
2019-08-29 00:40:54 +03:00
config ARCH_FLATMEM_ENABLE
def_bool y
config ARCH_SPARSEMEM_ENABLE
def_bool y
select SPARSEMEM_VMEMMAP_ENABLE
config ARCH_SELECT_MEMORY_MODEL
def_bool ARCH_SPARSEMEM_ENABLE
2019-05-26 15:50:38 +03:00
config ARCH_WANT_GENERAL_HUGETLB
def_bool y
config SYS_SUPPORTS_HUGETLBFS
def_bool y
2017-07-11 04:08:08 +03:00
config STACKTRACE_SUPPORT
def_bool y
2017-12-18 12:52:48 +03:00
config TRACE_IRQFLAGS_SUPPORT
def_bool y
2017-07-11 04:08:08 +03:00
config GENERIC_BUG
def_bool y
depends on BUG
select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
config GENERIC_BUG_RELATIVE_POINTERS
bool
config GENERIC_CALIBRATE_DELAY
def_bool y
config GENERIC_CSUM
def_bool y
config GENERIC_HWEIGHT
def_bool y
2019-01-07 18:27:01 +03:00
config FIX_EARLYCON_MEM
2019-12-17 14:15:16 +03:00
def_bool MMU
2019-01-07 18:27:01 +03:00
2017-07-11 04:08:08 +03:00
config PGTABLE_LEVELS
int
default 3 if 64BIT
default 2
2019-06-17 22:29:48 +03:00
source "arch/riscv/Kconfig.socs"
2017-07-11 04:08:08 +03:00
menu "Platform type"
choice
prompt "Base ISA"
default ARCH_RV64I
help
2019-01-08 22:45:57 +03:00
This selects the base ISA that this kernel will target and must match
2017-07-11 04:08:08 +03:00
the target platform.
config ARCH_RV32I
bool "RV32I"
select 32BIT
2018-04-11 10:50:17 +03:00
select GENERIC_LIB_ASHLDI3
select GENERIC_LIB_ASHRDI3
select GENERIC_LIB_LSHRDI3
2018-06-25 11:49:38 +03:00
select GENERIC_LIB_UCMPDI2
2019-10-28 15:10:41 +03:00
select MMU
2017-07-11 04:08:08 +03:00
config ARCH_RV64I
bool "RV64I"
select 64BIT
2019-11-08 15:22:27 +03:00
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && GCC_VERSION >= 50000
2017-12-18 12:52:48 +03:00
select HAVE_FUNCTION_TRACER
select HAVE_FUNCTION_GRAPH_TRACER
2018-02-13 08:13:16 +03:00
select HAVE_FTRACE_MCOUNT_RECORD
2019-10-28 15:10:41 +03:00
select HAVE_DYNAMIC_FTRACE if MMU
select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
select SWIOTLB if MMU
2017-07-11 04:08:08 +03:00
endchoice
# We must be able to map all physical memory into the kernel, but the compiler
# is still a bit more efficient when generating code if it's setup in a manner
# such that it can only map 2GiB of memory.
choice
prompt "Kernel Code Model"
default CMODEL_MEDLOW if 32BIT
default CMODEL_MEDANY if 64BIT
config CMODEL_MEDLOW
bool "medium low code model"
config CMODEL_MEDANY
bool "medium any code model"
endchoice
2018-03-15 11:50:41 +03:00
config MODULE_SECTIONS
bool
select HAVE_MOD_ARCH_SPECIFIC
2017-07-11 04:08:08 +03:00
choice
prompt "Maximum Physical Memory"
default MAXPHYSMEM_2GB if 32BIT
default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
config MAXPHYSMEM_2GB
bool "2GiB"
config MAXPHYSMEM_128GB
depends on 64BIT && CMODEL_MEDANY
bool "128GiB"
endchoice
config SMP
bool "Symmetric Multi-Processing"
help
This enables support for systems with more than one CPU. If
you say N here, the kernel will run on single and
multiprocessor machines, but will use only one CPU of a
multiprocessor machine. If you say Y here, the kernel will run
on many, but not all, single processor machines. On a single
processor machine, the kernel will run faster if you say N
here.
If you don't know what to do here, say N.
config NR_CPUS
int "Maximum number of CPUs (2-32)"
range 2 32
depends on SMP
default "8"
choice
prompt "CPU Tuning"
default TUNE_GENERIC
config TUNE_GENERIC
bool "generic"
endchoice
config RISCV_ISA_C
bool "Emit compressed instructions when building Linux"
default y
help
Adds "C" to the ISA subsets that the toolchain is allowed to emit
when building Linux, which results in compressed instructions in the
Linux binary.
If you don't know what to do here, say Y.
2018-04-20 02:27:49 +03:00
menu "supported PMU type"
depends on PERF_EVENTS
config RISCV_BASE_PMU
bool "Base Performance Monitoring Unit"
def_bool y
help
A base PMU that serves as a reference implementation and has limited
feature of perf. It can run on any RISC-V machines so serves as the
fallback, but this option can also be disable to reduce kernel size.
endmenu
2018-10-09 05:18:33 +03:00
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.
2017-07-11 04:08:08 +03:00
endmenu
2018-09-20 01:48:15 +03:00
menu "Kernel features"
2017-07-11 04:08:08 +03:00
source "kernel/Kconfig.hz"
2019-10-05 03:12:22 +03:00
config SECCOMP
bool "Enable seccomp to safely compute untrusted bytecode"
help
This kernel feature is useful for number crunching applications
that may need to compute untrusted bytecode during their
execution. By using pipes or other transports made available to
the process as file descriptors supporting the read/write
syscalls, it's possible to isolate those applications in
their own address space using seccomp. Once seccomp is
enabled via prctl(PR_SET_SECCOMP), it cannot be disabled
and the task is only allowed to execute a few safe syscalls
defined by each seccomp mode.
2017-07-11 04:08:08 +03:00
endmenu
2018-09-20 01:48:15 +03:00
menu "Boot options"
2018-11-18 03:06:56 +03:00
config CMDLINE
string "Built-in kernel command line"
2018-09-20 01:48:15 +03:00
help
2018-11-18 03:06:56 +03:00
For most platforms, the arguments for the kernel's command line
are provided at run-time, during boot. However, there are cases
where either no arguments are being provided or the provided
arguments are insufficient or even invalid.
2018-09-20 01:48:15 +03:00
2018-11-18 03:06:56 +03:00
When that occurs, it is possible to define a built-in command
line here and choose how the kernel should use it later on.
2018-09-20 01:48:15 +03:00
2018-11-18 03:06:56 +03:00
choice
prompt "Built-in command line usage" if CMDLINE != ""
default CMDLINE_FALLBACK
help
Choose how the kernel will handle the provided built-in command
line.
2018-09-20 01:48:15 +03:00
2018-11-18 03:06:56 +03:00
config CMDLINE_FALLBACK
bool "Use bootloader kernel arguments if available"
2018-09-20 01:48:15 +03:00
help
2018-11-18 03:06:56 +03:00
Use the built-in command line as fallback in case we get nothing
during boot. This is the default behaviour.
config CMDLINE_EXTEND
bool "Extend bootloader kernel arguments"
help
The command-line arguments provided during boot will be
appended to the built-in command line. This is useful in
cases where the provided arguments are insufficient and
you don't want to or cannot modify them.
2018-09-20 01:48:15 +03:00
config CMDLINE_FORCE
2018-11-18 03:06:56 +03:00
bool "Always use the default kernel command string"
2018-09-20 01:48:15 +03:00
help
2018-11-18 03:06:56 +03:00
Always use the built-in command line, even if we get one during
boot. This is useful in case you need to override the provided
command line on systems where you don't have or want control
over it.
2018-09-20 01:48:15 +03:00
2018-11-18 03:06:56 +03:00
endchoice
2018-09-20 01:48:15 +03:00
endmenu
2017-07-11 04:08:08 +03:00
menu "Power management options"
2018-12-11 14:01:04 +03:00
source "kernel/power/Kconfig"
2017-07-11 04:08:08 +03:00
endmenu