linux/arch/riscv/Kconfig
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0-only
   2#
   3# For a description of the syntax of this configuration file,
   4# see Documentation/kbuild/kconfig-language.rst.
   5#
   6
   7config 64BIT
   8        bool
   9
  10config 32BIT
  11        bool
  12
  13config RISCV
  14        def_bool y
  15        select ARCH_CLOCKSOURCE_INIT
  16        select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
  17        select ARCH_HAS_BINFMT_FLAT
  18        select ARCH_HAS_DEBUG_VM_PGTABLE
  19        select ARCH_HAS_DEBUG_VIRTUAL if MMU
  20        select ARCH_HAS_DEBUG_WX
  21        select ARCH_HAS_FORTIFY_SOURCE
  22        select ARCH_HAS_GCOV_PROFILE_ALL
  23        select ARCH_HAS_GIGANTIC_PAGE
  24        select ARCH_HAS_KCOV
  25        select ARCH_HAS_MMIOWB
  26        select ARCH_HAS_PTE_SPECIAL
  27        select ARCH_HAS_SET_DIRECT_MAP if MMU
  28        select ARCH_HAS_SET_MEMORY if MMU
  29        select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL
  30        select ARCH_HAS_STRICT_MODULE_RWX if MMU && !XIP_KERNEL
  31        select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
  32        select ARCH_HAS_UBSAN_SANITIZE_ALL
  33        select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
  34        select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
  35        select ARCH_STACKWALK
  36        select ARCH_SUPPORTS_ATOMIC_RMW
  37        select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU
  38        select ARCH_SUPPORTS_HUGETLBFS if MMU
  39        select ARCH_USE_MEMTEST
  40        select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
  41        select ARCH_WANT_FRAME_POINTERS
  42        select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
  43        select BINFMT_FLAT_NO_DATA_START_OFFSET if !MMU
  44        select BUILDTIME_TABLE_SORT if MMU
  45        select CLONE_BACKWARDS
  46        select CLINT_TIMER if !MMU
  47        select COMMON_CLK
  48        select EDAC_SUPPORT
  49        select GENERIC_ARCH_TOPOLOGY if SMP
  50        select GENERIC_ATOMIC64 if !64BIT
  51        select GENERIC_CLOCKEVENTS_BROADCAST if SMP
  52        select GENERIC_EARLY_IOREMAP
  53        select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
  54        select GENERIC_IDLE_POLL_SETUP
  55        select GENERIC_IOREMAP if MMU
  56        select GENERIC_IRQ_MULTI_HANDLER
  57        select GENERIC_IRQ_SHOW
  58        select GENERIC_IRQ_SHOW_LEVEL
  59        select GENERIC_LIB_DEVMEM_IS_ALLOWED
  60        select GENERIC_PCI_IOMAP
  61        select GENERIC_PTDUMP if MMU
  62        select GENERIC_SCHED_CLOCK
  63        select GENERIC_SMP_IDLE_THREAD
  64        select GENERIC_TIME_VSYSCALL if MMU && 64BIT
  65        select HANDLE_DOMAIN_IRQ
  66        select HAVE_ARCH_AUDITSYSCALL
  67        select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL
  68        select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL
  69        select HAVE_ARCH_KASAN if MMU && 64BIT
  70        select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT
  71        select HAVE_ARCH_KFENCE if MMU && 64BIT
  72        select HAVE_ARCH_KGDB if !XIP_KERNEL
  73        select HAVE_ARCH_KGDB_QXFER_PKT
  74        select HAVE_ARCH_MMAP_RND_BITS if MMU
  75        select HAVE_ARCH_SECCOMP_FILTER
  76        select HAVE_ARCH_TRACEHOOK
  77        select HAVE_ARCH_TRANSPARENT_HUGEPAGE if 64BIT && MMU
  78        select HAVE_ARCH_THREAD_STRUCT_WHITELIST
  79        select HAVE_ARCH_VMAP_STACK if MMU && 64BIT
  80        select HAVE_ASM_MODVERSIONS
  81        select HAVE_CONTEXT_TRACKING
  82        select HAVE_DEBUG_KMEMLEAK
  83        select HAVE_DMA_CONTIGUOUS if MMU
  84        select HAVE_EBPF_JIT if MMU
  85        select HAVE_FUNCTION_ERROR_INJECTION
  86        select HAVE_FUTEX_CMPXCHG if FUTEX
  87        select HAVE_GCC_PLUGINS
  88        select HAVE_GENERIC_VDSO if MMU && 64BIT
  89        select HAVE_IRQ_TIME_ACCOUNTING
  90        select HAVE_KPROBES if !XIP_KERNEL
  91        select HAVE_KPROBES_ON_FTRACE if !XIP_KERNEL
  92        select HAVE_KRETPROBES if !XIP_KERNEL
  93        select HAVE_MOVE_PMD
  94        select HAVE_MOVE_PUD
  95        select HAVE_PCI
  96        select HAVE_PERF_EVENTS
  97        select HAVE_PERF_REGS
  98        select HAVE_PERF_USER_STACK_DUMP
  99        select HAVE_REGS_AND_STACK_ACCESS_API
 100        select HAVE_FUNCTION_ARG_ACCESS_API
 101        select HAVE_STACKPROTECTOR
 102        select HAVE_SYSCALL_TRACEPOINTS
 103        select IRQ_DOMAIN
 104        select IRQ_FORCED_THREADING
 105        select MODULES_USE_ELF_RELA if MODULES
 106        select MODULE_SECTIONS if MODULES
 107        select OF
 108        select OF_EARLY_FLATTREE
 109        select OF_IRQ
 110        select PCI_DOMAINS_GENERIC if PCI
 111        select PCI_MSI if PCI
 112        select RISCV_INTC
 113        select RISCV_TIMER if RISCV_SBI
 114        select SPARSE_IRQ
 115        select SYSCTL_EXCEPTION_TRACE
 116        select THREAD_INFO_IN_TASK
 117        select TRACE_IRQFLAGS_SUPPORT
 118        select UACCESS_MEMCPY if !MMU
 119        select ZONE_DMA32 if 64BIT
 120
 121config ARCH_MMAP_RND_BITS_MIN
 122        default 18 if 64BIT
 123        default 8
 124
 125# max bits determined by the following formula:
 126#  VA_BITS - PAGE_SHIFT - 3
 127config ARCH_MMAP_RND_BITS_MAX
 128        default 24 if 64BIT # SV39 based
 129        default 17
 130
 131# set if we run in machine mode, cleared if we run in supervisor mode
 132config RISCV_M_MODE
 133        bool
 134        default !MMU
 135
 136# set if we are running in S-mode and can use SBI calls
 137config RISCV_SBI
 138        bool
 139        depends on !RISCV_M_MODE
 140        default y
 141
 142config MMU
 143        bool "MMU-based Paged Memory Management Support"
 144        default y
 145        help
 146          Select if you want MMU-based virtualised addressing space
 147          support by paged memory management. If unsure, say 'Y'.
 148
 149config VA_BITS
 150        int
 151        default 32 if 32BIT
 152        default 39 if 64BIT
 153
 154config PA_BITS
 155        int
 156        default 34 if 32BIT
 157        default 56 if 64BIT
 158
 159config PAGE_OFFSET
 160        hex
 161        default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB
 162        default 0x80000000 if 64BIT && !MMU
 163        default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
 164        default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
 165
 166config KASAN_SHADOW_OFFSET
 167        hex
 168        depends on KASAN_GENERIC
 169        default 0xdfffffc800000000 if 64BIT
 170        default 0xffffffff if 32BIT
 171
 172config ARCH_FLATMEM_ENABLE
 173        def_bool !NUMA
 174
 175config ARCH_SPARSEMEM_ENABLE
 176        def_bool y
 177        depends on MMU
 178        select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
 179        select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
 180
 181config ARCH_SELECT_MEMORY_MODEL
 182        def_bool ARCH_SPARSEMEM_ENABLE
 183
 184config ARCH_WANT_GENERAL_HUGETLB
 185        def_bool y
 186
 187config ARCH_SUPPORTS_UPROBES
 188        def_bool y
 189
 190config STACKTRACE_SUPPORT
 191        def_bool y
 192
 193config GENERIC_BUG
 194        def_bool y
 195        depends on BUG
 196        select GENERIC_BUG_RELATIVE_POINTERS if 64BIT
 197
 198config GENERIC_BUG_RELATIVE_POINTERS
 199        bool
 200
 201config GENERIC_CALIBRATE_DELAY
 202        def_bool y
 203
 204config GENERIC_CSUM
 205        def_bool y
 206
 207config GENERIC_HWEIGHT
 208        def_bool y
 209
 210config FIX_EARLYCON_MEM
 211        def_bool MMU
 212
 213config PGTABLE_LEVELS
 214        int
 215        default 3 if 64BIT
 216        default 2
 217
 218config LOCKDEP_SUPPORT
 219        def_bool y
 220
 221source "arch/riscv/Kconfig.socs"
 222source "arch/riscv/Kconfig.erratas"
 223
 224menu "Platform type"
 225
 226choice
 227        prompt "Base ISA"
 228        default ARCH_RV64I
 229        help
 230          This selects the base ISA that this kernel will target and must match
 231          the target platform.
 232
 233config ARCH_RV32I
 234        bool "RV32I"
 235        select 32BIT
 236        select GENERIC_LIB_ASHLDI3
 237        select GENERIC_LIB_ASHRDI3
 238        select GENERIC_LIB_LSHRDI3
 239        select GENERIC_LIB_UCMPDI2
 240        select MMU
 241
 242config ARCH_RV64I
 243        bool "RV64I"
 244        select 64BIT
 245        select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
 246        select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
 247        select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
 248        select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
 249        select HAVE_FUNCTION_GRAPH_TRACER
 250        select HAVE_FUNCTION_TRACER if !XIP_KERNEL
 251        select SWIOTLB if MMU
 252
 253endchoice
 254
 255# We must be able to map all physical memory into the kernel, but the compiler
 256# is still a bit more efficient when generating code if it's setup in a manner
 257# such that it can only map 2GiB of memory.
 258choice
 259        prompt "Kernel Code Model"
 260        default CMODEL_MEDLOW if 32BIT
 261        default CMODEL_MEDANY if 64BIT
 262
 263        config CMODEL_MEDLOW
 264                bool "medium low code model"
 265        config CMODEL_MEDANY
 266                bool "medium any code model"
 267endchoice
 268
 269config MODULE_SECTIONS
 270        bool
 271        select HAVE_MOD_ARCH_SPECIFIC
 272
 273choice
 274        prompt "Maximum Physical Memory"
 275        default MAXPHYSMEM_1GB if 32BIT
 276        default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
 277        default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
 278
 279        config MAXPHYSMEM_1GB
 280                depends on 32BIT
 281                bool "1GiB"
 282        config MAXPHYSMEM_2GB
 283                depends on 64BIT && CMODEL_MEDLOW
 284                bool "2GiB"
 285        config MAXPHYSMEM_128GB
 286                depends on 64BIT && CMODEL_MEDANY
 287                bool "128GiB"
 288endchoice
 289
 290
 291config SMP
 292        bool "Symmetric Multi-Processing"
 293        help
 294          This enables support for systems with more than one CPU.  If
 295          you say N here, the kernel will run on single and
 296          multiprocessor machines, but will use only one CPU of a
 297          multiprocessor machine. If you say Y here, the kernel will run
 298          on many, but not all, single processor machines. On a single
 299          processor machine, the kernel will run faster if you say N
 300          here.
 301
 302          If you don't know what to do here, say N.
 303
 304config NR_CPUS
 305        int "Maximum number of CPUs (2-32)"
 306        range 2 32
 307        depends on SMP
 308        default "8"
 309
 310config HOTPLUG_CPU
 311        bool "Support for hot-pluggable CPUs"
 312        depends on SMP
 313        select GENERIC_IRQ_MIGRATION
 314        help
 315
 316          Say Y here to experiment with turning CPUs off and on.  CPUs
 317          can be controlled through /sys/devices/system/cpu.
 318
 319          Say N if you want to disable CPU hotplug.
 320
 321choice
 322        prompt "CPU Tuning"
 323        default TUNE_GENERIC
 324
 325config TUNE_GENERIC
 326        bool "generic"
 327
 328endchoice
 329
 330# Common NUMA Features
 331config NUMA
 332        bool "NUMA Memory Allocation and Scheduler Support"
 333        depends on SMP && MMU
 334        select GENERIC_ARCH_NUMA
 335        select OF_NUMA
 336        select ARCH_SUPPORTS_NUMA_BALANCING
 337        help
 338          Enable NUMA (Non-Uniform Memory Access) support.
 339
 340          The kernel will try to allocate memory used by a CPU on the
 341          local memory of the CPU and add some more NUMA awareness to the kernel.
 342
 343config NODES_SHIFT
 344        int "Maximum NUMA Nodes (as a power of 2)"
 345        range 1 10
 346        default "2"
 347        depends on NUMA
 348        help
 349          Specify the maximum number of NUMA Nodes available on the target
 350          system.  Increases memory reserved to accommodate various tables.
 351
 352config USE_PERCPU_NUMA_NODE_ID
 353        def_bool y
 354        depends on NUMA
 355
 356config NEED_PER_CPU_EMBED_FIRST_CHUNK
 357        def_bool y
 358        depends on NUMA
 359
 360config RISCV_ISA_C
 361        bool "Emit compressed instructions when building Linux"
 362        default y
 363        help
 364           Adds "C" to the ISA subsets that the toolchain is allowed to emit
 365           when building Linux, which results in compressed instructions in the
 366           Linux binary.
 367
 368           If you don't know what to do here, say Y.
 369
 370menu "supported PMU type"
 371        depends on PERF_EVENTS
 372
 373config RISCV_BASE_PMU
 374        bool "Base Performance Monitoring Unit"
 375        def_bool y
 376        help
 377          A base PMU that serves as a reference implementation and has limited
 378          feature of perf.  It can run on any RISC-V machines so serves as the
 379          fallback, but this option can also be disable to reduce kernel size.
 380
 381endmenu
 382
 383config FPU
 384        bool "FPU support"
 385        default y
 386        help
 387          Say N here if you want to disable all floating-point related procedure
 388          in the kernel.
 389
 390          If you don't know what to do here, say Y.
 391
 392endmenu
 393
 394menu "Kernel features"
 395
 396source "kernel/Kconfig.hz"
 397
 398config RISCV_SBI_V01
 399        bool "SBI v0.1 support"
 400        default y
 401        depends on RISCV_SBI
 402        help
 403          This config allows kernel to use SBI v0.1 APIs. This will be
 404          deprecated in future once legacy M-mode software are no longer in use.
 405
 406config KEXEC
 407        bool "Kexec system call"
 408        select KEXEC_CORE
 409        select HOTPLUG_CPU if SMP
 410        depends on MMU
 411        help
 412          kexec is a system call that implements the ability to shutdown your
 413          current kernel, and to start another kernel. It is like a reboot
 414          but it is independent of the system firmware. And like a reboot
 415          you can start any kernel with it, not just Linux.
 416
 417          The name comes from the similarity to the exec system call.
 418
 419config CRASH_DUMP
 420        bool "Build kdump crash kernel"
 421        help
 422          Generate crash dump after being started by kexec. This should
 423          be normally only set in special crash dump kernels which are
 424          loaded in the main kernel with kexec-tools into a specially
 425          reserved region and then later executed after a crash by
 426          kdump/kexec.
 427
 428          For more details see Documentation/admin-guide/kdump/kdump.rst
 429
 430endmenu
 431
 432menu "Boot options"
 433
 434config CMDLINE
 435        string "Built-in kernel command line"
 436        help
 437          For most platforms, the arguments for the kernel's command line
 438          are provided at run-time, during boot. However, there are cases
 439          where either no arguments are being provided or the provided
 440          arguments are insufficient or even invalid.
 441
 442          When that occurs, it is possible to define a built-in command
 443          line here and choose how the kernel should use it later on.
 444
 445choice
 446        prompt "Built-in command line usage" if CMDLINE != ""
 447        default CMDLINE_FALLBACK
 448        help
 449          Choose how the kernel will handle the provided built-in command
 450          line.
 451
 452config CMDLINE_FALLBACK
 453        bool "Use bootloader kernel arguments if available"
 454        help
 455          Use the built-in command line as fallback in case we get nothing
 456          during boot. This is the default behaviour.
 457
 458config CMDLINE_EXTEND
 459        bool "Extend bootloader kernel arguments"
 460        help
 461          The command-line arguments provided during boot will be
 462          appended to the built-in command line. This is useful in
 463          cases where the provided arguments are insufficient and
 464          you don't want to or cannot modify them.
 465
 466
 467config CMDLINE_FORCE
 468        bool "Always use the default kernel command string"
 469        help
 470          Always use the built-in command line, even if we get one during
 471          boot. This is useful in case you need to override the provided
 472          command line on systems where you don't have or want control
 473          over it.
 474
 475endchoice
 476
 477config EFI_STUB
 478        bool
 479
 480config EFI
 481        bool "UEFI runtime support"
 482        depends on OF && !XIP_KERNEL
 483        select LIBFDT
 484        select UCS2_STRING
 485        select EFI_PARAMS_FROM_FDT
 486        select EFI_STUB
 487        select EFI_GENERIC_STUB
 488        select EFI_RUNTIME_WRAPPERS
 489        select RISCV_ISA_C
 490        depends on MMU
 491        default y
 492        help
 493          This option provides support for runtime services provided
 494          by UEFI firmware (such as non-volatile variables, realtime
 495          clock, and platform reset). A UEFI stub is also provided to
 496          allow the kernel to be booted as an EFI application. This
 497          is only useful on systems that have UEFI firmware.
 498
 499config CC_HAVE_STACKPROTECTOR_TLS
 500        def_bool $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=0)
 501
 502config STACKPROTECTOR_PER_TASK
 503        def_bool y
 504        depends on !GCC_PLUGIN_RANDSTRUCT
 505        depends on STACKPROTECTOR && CC_HAVE_STACKPROTECTOR_TLS
 506
 507config PHYS_RAM_BASE_FIXED
 508        bool "Explicitly specified physical RAM address"
 509        default n
 510
 511config PHYS_RAM_BASE
 512        hex "Platform Physical RAM address"
 513        depends on PHYS_RAM_BASE_FIXED
 514        default "0x80000000"
 515        help
 516          This is the physical address of RAM in the system. It has to be
 517          explicitly specified to run early relocations of read-write data
 518          from flash to RAM.
 519
 520config XIP_KERNEL
 521        bool "Kernel Execute-In-Place from ROM"
 522        depends on MMU && SPARSEMEM
 523        # This prevents XIP from being enabled by all{yes,mod}config, which
 524        # fail to build since XIP doesn't support large kernels.
 525        depends on !COMPILE_TEST
 526        select PHYS_RAM_BASE_FIXED
 527        help
 528          Execute-In-Place allows the kernel to run from non-volatile storage
 529          directly addressable by the CPU, such as NOR flash. This saves RAM
 530          space since the text section of the kernel is not loaded from flash
 531          to RAM.  Read-write sections, such as the data section and stack,
 532          are still copied to RAM.  The XIP kernel is not compressed since
 533          it has to run directly from flash, so it will take more space to
 534          store it.  The flash address used to link the kernel object files,
 535          and for storing it, is configuration dependent. Therefore, if you
 536          say Y here, you must know the proper physical address where to
 537          store the kernel image depending on your own flash memory usage.
 538
 539          Also note that the make target becomes "make xipImage" rather than
 540          "make zImage" or "make Image".  The final kernel binary to put in
 541          ROM memory will be arch/riscv/boot/xipImage.
 542
 543          SPARSEMEM is required because the kernel text and rodata that are
 544          flash resident are not backed by memmap, then any attempt to get
 545          a struct page on those regions will trigger a fault.
 546
 547          If unsure, say N.
 548
 549config XIP_PHYS_ADDR
 550        hex "XIP Kernel Physical Location"
 551        depends on XIP_KERNEL
 552        default "0x21000000"
 553        help
 554          This is the physical address in your flash memory the kernel will
 555          be linked for and stored to.  This address is dependent on your
 556          own flash usage.
 557
 558endmenu
 559
 560config BUILTIN_DTB
 561        bool
 562        depends on OF
 563        default y if XIP_KERNEL
 564
 565menu "Power management options"
 566
 567source "kernel/power/Kconfig"
 568
 569endmenu
 570