hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
# SPDX-License-Identifier: GPL-2.0-only
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.rst.
#
 
config 64BIT
   bool
 
config 32BIT
   bool
 
config RISCV
   def_bool y
   select ARCH_CLOCKSOURCE_INIT
   select ARCH_SUPPORTS_ATOMIC_RMW
   select ARCH_HAS_BINFMT_FLAT
   select ARCH_HAS_DEBUG_VM_PGTABLE
   select ARCH_HAS_DEBUG_VIRTUAL if MMU
   select ARCH_HAS_DEBUG_WX
   select ARCH_HAS_GCOV_PROFILE_ALL
   select ARCH_HAS_GIGANTIC_PAGE
   select ARCH_HAS_KCOV
   select ARCH_HAS_MMIOWB
   select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
   select ARCH_HAS_PTE_SPECIAL
   select ARCH_HAS_SET_DIRECT_MAP
   select ARCH_HAS_SET_MEMORY
   select ARCH_HAS_STRICT_KERNEL_RWX if MMU
   select ARCH_OPTIONAL_KERNEL_RWX if ARCH_HAS_STRICT_KERNEL_RWX
   select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT
   select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU
   select ARCH_WANT_FRAME_POINTERS
   select ARCH_WANT_HUGE_PMD_SHARE if 64BIT
   select CLONE_BACKWARDS
   select CLINT_TIMER if !MMU
   select COMMON_CLK
   select EDAC_SUPPORT
   select GENERIC_ARCH_TOPOLOGY
   select GENERIC_ATOMIC64 if !64BIT
   select GENERIC_CLOCKEVENTS
   select GENERIC_EARLY_IOREMAP
   select GENERIC_GETTIMEOFDAY if HAVE_GENERIC_VDSO
   select GENERIC_IOREMAP
   select GENERIC_IRQ_MULTI_HANDLER
   select GENERIC_IRQ_SHOW
   select GENERIC_PCI_IOMAP
   select GENERIC_PTDUMP if MMU
   select GENERIC_SCHED_CLOCK
   select GENERIC_SMP_IDLE_THREAD
   select GENERIC_STRNCPY_FROM_USER if MMU
   select GENERIC_STRNLEN_USER if MMU
   select GENERIC_TIME_VSYSCALL if MMU && 64BIT
   select HANDLE_DOMAIN_IRQ
   select HAVE_ARCH_AUDITSYSCALL
   select HAVE_ARCH_JUMP_LABEL
   select HAVE_ARCH_JUMP_LABEL_RELATIVE
   select HAVE_ARCH_KASAN if MMU && 64BIT
   select HAVE_ARCH_KGDB
   select HAVE_ARCH_KGDB_QXFER_PKT
   select HAVE_ARCH_MMAP_RND_BITS if MMU
   select HAVE_ARCH_SECCOMP_FILTER
   select HAVE_ARCH_TRACEHOOK
   select HAVE_ASM_MODVERSIONS
   select HAVE_CONTEXT_TRACKING
   select HAVE_DEBUG_KMEMLEAK
   select HAVE_DMA_CONTIGUOUS if MMU
   select HAVE_EBPF_JIT if MMU
   select HAVE_FUTEX_CMPXCHG if FUTEX
   select HAVE_GCC_PLUGINS
   select HAVE_GENERIC_VDSO if MMU && 64BIT
   select HAVE_PCI
   select HAVE_PERF_EVENTS
   select HAVE_PERF_REGS
   select HAVE_PERF_USER_STACK_DUMP
   select HAVE_STACKPROTECTOR
   select HAVE_SYSCALL_TRACEPOINTS
   select IRQ_DOMAIN
   select MODULES_USE_ELF_RELA if MODULES
   select MODULE_SECTIONS if MODULES
   select OF
   select OF_EARLY_FLATTREE
   select OF_IRQ
   select PCI_DOMAINS_GENERIC if PCI
   select PCI_MSI if PCI
   select RISCV_INTC
   select RISCV_TIMER if RISCV_SBI
   select SPARSE_IRQ
   select SYSCTL_EXCEPTION_TRACE
   select THREAD_INFO_IN_TASK
   select UACCESS_MEMCPY if !MMU
 
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
 
# set if we run in machine mode, cleared if we run in supervisor mode
config RISCV_M_MODE
   bool
   default !MMU
 
# set if we are running in S-mode and can use SBI calls
config RISCV_SBI
   bool
   depends on !RISCV_M_MODE
   default y
 
config MMU
   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'.
 
config ZONE_DMA32
   bool
   default y if 64BIT
 
config VA_BITS
   int
   default 32 if 32BIT
   default 39 if 64BIT
 
config PA_BITS
   int
   default 34 if 32BIT
   default 56 if 64BIT
 
config PAGE_OFFSET
   hex
   default 0xC0000000 if 32BIT && MAXPHYSMEM_1GB
   default 0x80000000 if 64BIT && !MMU
   default 0xffffffff80000000 if 64BIT && MAXPHYSMEM_2GB
   default 0xffffffe000000000 if 64BIT && MAXPHYSMEM_128GB
 
config KASAN_SHADOW_OFFSET
   hex
   depends on KASAN_GENERIC
   default 0xdfffffc800000000 if 64BIT
   default 0xffffffff if 32BIT
 
config ARCH_FLATMEM_ENABLE
   def_bool y
 
config ARCH_SPARSEMEM_ENABLE
   def_bool y
   depends on MMU
   select SPARSEMEM_STATIC if 32BIT && SPARSEMEM
   select SPARSEMEM_VMEMMAP_ENABLE if 64BIT
 
config ARCH_SELECT_MEMORY_MODEL
   def_bool ARCH_SPARSEMEM_ENABLE
 
config ARCH_WANT_GENERAL_HUGETLB
   def_bool y
 
config ARCH_SUPPORTS_DEBUG_PAGEALLOC
   def_bool y
 
config SYS_SUPPORTS_HUGETLBFS
   depends on MMU
   def_bool y
 
config STACKTRACE_SUPPORT
   def_bool y
 
config TRACE_IRQFLAGS_SUPPORT
   def_bool y
 
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
 
config FIX_EARLYCON_MEM
   def_bool MMU
 
config PGTABLE_LEVELS
   int
   default 3 if 64BIT
   default 2
 
config LOCKDEP_SUPPORT
   def_bool y
 
source "arch/riscv/Kconfig.socs"
 
menu "Platform type"
 
choice
   prompt "Base ISA"
   default ARCH_RV64I
   help
     This selects the base ISA that this kernel will target and must match
     the target platform.
 
config ARCH_RV32I
   bool "RV32I"
   select 32BIT
   select GENERIC_LIB_ASHLDI3
   select GENERIC_LIB_ASHRDI3
   select GENERIC_LIB_LSHRDI3
   select GENERIC_LIB_UCMPDI2
   select MMU
 
config ARCH_RV64I
   bool "RV64I"
   select 64BIT
   select ARCH_SUPPORTS_INT128 if CC_HAS_INT128 && GCC_VERSION >= 50000
   select HAVE_DYNAMIC_FTRACE if MMU
   select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
   select HAVE_FTRACE_MCOUNT_RECORD
   select HAVE_FUNCTION_GRAPH_TRACER
   select HAVE_FUNCTION_TRACER
   select SWIOTLB if MMU
 
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
 
config MODULE_SECTIONS
   bool
   select HAVE_MOD_ARCH_SPECIFIC
 
choice
   prompt "Maximum Physical Memory"
   default MAXPHYSMEM_1GB if 32BIT
   default MAXPHYSMEM_2GB if 64BIT && CMODEL_MEDLOW
   default MAXPHYSMEM_128GB if 64BIT && CMODEL_MEDANY
 
   config MAXPHYSMEM_1GB
       depends on 32BIT
       bool "1GiB"
   config MAXPHYSMEM_2GB
       depends on 64BIT && CMODEL_MEDLOW
       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"
 
config HOTPLUG_CPU
   bool "Support for hot-pluggable CPUs"
   depends on SMP
   select GENERIC_IRQ_MIGRATION
   help
 
     Say Y here to experiment with turning CPUs off and on.  CPUs
     can be controlled through /sys/devices/system/cpu.
 
     Say N if you want to disable CPU hotplug.
 
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.
 
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
 
config TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
   def_bool y
   # https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=aed44286efa8ae8717a77d94b51ac3614e2ca6dc
   depends on AS_IS_GNU && AS_VERSION >= 23800
   help
     Newer binutils versions default to ISA spec version 20191213 which
     moves some instructions from the I extension to the Zicsr and Zifencei
     extensions.
 
config TOOLCHAIN_NEEDS_OLD_ISA_SPEC
   def_bool y
   depends on TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI
   # https://github.com/llvm/llvm-project/commit/22e199e6afb1263c943c0c0d4498694e15bf8a16
   depends on CC_IS_CLANG && CLANG_VERSION < 170000
   help
     Certain versions of clang do not support zicsr and zifencei via -march
     but newer versions of binutils require it for the reasons noted in the
     help text of CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI. This
     option causes an older ISA spec compatible with these older versions
     of clang to be passed to GAS, which has the same result as passing zicsr
     and zifencei to -march.
 
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 features"
 
source "kernel/Kconfig.hz"
 
config RISCV_SBI_V01
   bool "SBI v0.1 support"
   default y
   depends on RISCV_SBI
   help
     This config allows kernel to use SBI v0.1 APIs. This will be
     deprecated in future once legacy M-mode software are no longer in use.
endmenu
 
menu "Boot options"
 
config CMDLINE
   string "Built-in kernel command line"
   help
     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.
 
     When that occurs, it is possible to define a built-in command
     line here and choose how the kernel should use it later on.
 
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.
 
config CMDLINE_FALLBACK
   bool "Use bootloader kernel arguments if available"
   help
     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.
 
 
config CMDLINE_FORCE
   bool "Always use the default kernel command string"
   help
     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.
 
endchoice
 
config EFI_STUB
   bool
 
config EFI
   bool "UEFI runtime support"
   depends on OF
   select LIBFDT
   select UCS2_STRING
   select EFI_PARAMS_FROM_FDT
   select EFI_STUB
   select EFI_GENERIC_STUB
   select EFI_RUNTIME_WRAPPERS
   select RISCV_ISA_C
   depends on MMU
   default y
   help
     This option provides support for runtime services provided
     by UEFI firmware (such as non-volatile variables, realtime
     clock, and platform reset). A UEFI stub is also provided to
     allow the kernel to be booted as an EFI application. This
     is only useful on systems that have UEFI firmware.
 
endmenu
 
config BUILTIN_DTB
   def_bool n
   depends on RISCV_M_MODE
   depends on OF
 
menu "Power management options"
 
source "kernel/power/Kconfig"
 
endmenu
 
source "drivers/firmware/Kconfig"