Merge branch 'next'
[u-boot.git] / arch / riscv / Kconfig
bloba160d24fb033eafeee70971a1bff12b545d23a2e
1 menu "RISC-V architecture"
2         depends on RISCV
4 config SYS_ARCH
5         default "riscv"
7 choice
8         prompt "Target select"
9         optional
11 config TARGET_ANDES_AE350
12         bool "Support Andes ae350"
14 config TARGET_BANANAPI_F3
15         bool "Support BananaPi F3 Board"
17 config TARGET_LICHEERV_NANO
18         bool "Support LicheeRV Nano Board"
20 config TARGET_MICROCHIP_ICICLE
21         bool "Support Microchip PolarFire-SoC Icicle Board"
23 config TARGET_MILKV_DUO
24         bool "Support Milk-v Duo Board"
26 config TARGET_OPENPITON_RISCV64
27         bool "Support RISC-V cores on OpenPiton SoC"
29 config TARGET_QEMU_VIRT
30         bool "Support QEMU Virt & RVVM Boards"
31         select BOARD_LATE_INIT
33 config TARGET_SIFIVE_UNLEASHED
34         bool "Support SiFive Unleashed Board"
36 config TARGET_SIFIVE_UNMATCHED
37         bool "Support SiFive Unmatched Board"
38         select SYS_CACHE_SHIFT_6
40 config TARGET_SIPEED_MAIX
41         bool "Support Sipeed Maix Board"
42         select SYS_CACHE_SHIFT_6
44 config TARGET_STARFIVE_VISIONFIVE2
45         bool "Support StarFive VisionFive2 Board"
46         select BOARD_LATE_INIT
48 config TARGET_TH1520_LPI4A
49         bool "Support Sipeed's TH1520 Lichee PI 4A Board"
50         select SYS_CACHE_SHIFT_6
52 config TARGET_XILINX_MBV
53         bool "Support AMD/Xilinx MicroBlaze V"
55 config TARGET_ASPEED_AST2700_IBEX
56         bool "Support Ibex RISC-V cores on Aspeed AST2700 SoC"
58 endchoice
60 config SYS_ICACHE_OFF
61         bool "Do not enable icache"
62         help
63           Do not enable instruction cache in U-Boot.
65 config SPL_SYS_ICACHE_OFF
66         bool "Do not enable icache in SPL"
67         depends on SPL
68         default SYS_ICACHE_OFF
69         help
70           Do not enable instruction cache in SPL.
72 config SYS_DCACHE_OFF
73         bool "Do not enable dcache"
74         help
75           Do not enable data cache in U-Boot.
77 config SPL_SYS_DCACHE_OFF
78         bool "Do not enable dcache in SPL"
79         depends on SPL
80         default SYS_DCACHE_OFF
81         help
82           Do not enable data cache in SPL.
84 config SPL_ZERO_MEM_BEFORE_USE
85         bool "Zero memory before use"
86         depends on SPL
87         help
88           Zero stack/GD/malloc area in SPL before using them, this is needed for
89           Sifive core devices that uses L2 cache to store SPL.
91 # board-specific options below
92 source "board/andestech/ae350/Kconfig"
93 source "board/aspeed/ibex_ast2700/Kconfig"
94 source "board/emulation/qemu-riscv/Kconfig"
95 source "board/microchip/mpfs_icicle/Kconfig"
96 source "board/openpiton/riscv64/Kconfig"
97 source "board/sifive/unleashed/Kconfig"
98 source "board/sifive/unmatched/Kconfig"
99 source "board/sipeed/maix/Kconfig"
100 source "board/sophgo/milkv_duo/Kconfig"
101 source "board/sophgo/licheerv_nano/Kconfig"
102 source "board/spacemit/bananapi-f3/Kconfig"
103 source "board/starfive/visionfive2/Kconfig"
104 source "board/thead/th1520_lpi4a/Kconfig"
105 source "board/xilinx/mbv/Kconfig"
107 # platform-specific options below
108 source "arch/riscv/cpu/andes/Kconfig"
109 source "arch/riscv/cpu/cv1800b/Kconfig"
110 source "arch/riscv/cpu/fu540/Kconfig"
111 source "arch/riscv/cpu/fu740/Kconfig"
112 source "arch/riscv/cpu/ast2700/Kconfig"
113 source "arch/riscv/cpu/generic/Kconfig"
114 source "arch/riscv/cpu/jh7110/Kconfig"
115 source "arch/riscv/cpu/k1/Kconfig"
117 # architecture-specific options below
119 choice
120         prompt "Base ISA"
121         default ARCH_RV32I
123 config ARCH_RV32I
124         bool "RV32I"
125         select 32BIT
126         help
127           Choose this option to target the RV32I base integer instruction set.
129 config ARCH_RV64I
130         bool "RV64I"
131         select 64BIT
132         select SPL_64BIT if SPL
133         select PHYS_64BIT
134         help
135           Choose this option to target the RV64I base integer instruction set.
137 endchoice
139 config FRAMEPOINTER
140         bool "Build with frame pointer for stack unwinding"
141         help
142           Choose this option to use the frame pointer so the stack can be
143           unwound if needed. This is useful for tracing where faults came
144           from as the source may be several functions back
146           If you say Y here, then the code size will be increased due to
147           having to store the fp.
149 config SPL_FRAMEPOINTER
150         bool "Build SPL with frame pointer for stack unwinding"
151         depends on SPL
152         help
153           Choose this option to use the frame pointer so the stack can be
154           unwound if needed. This is useful for tracing where faults came
155           from as the source may be several functions back
157           If you say Y here, then the code size will be increased due to
158           having to store the fp.
160 choice
161         prompt "Code Model"
162         default CMODEL_MEDLOW
164 config CMODEL_MEDLOW
165         bool "medium low code model"
166         help
167           U-Boot and its statically defined symbols must lie within a single 2 GiB
168           address range and must lie between absolute addresses -2 GiB and +2 GiB.
170 config CMODEL_MEDANY
171         bool "medium any code model"
172         help
173           U-Boot and its statically defined symbols must be within any single 2 GiB
174           address range.
176 endchoice
178 choice
179         prompt "Run Mode"
180         default RISCV_MMODE
182 config RISCV_MMODE
183         bool "Machine"
184         help
185           Choose this option to build U-Boot for RISC-V M-Mode.
187 config RISCV_SMODE
188         bool "Supervisor"
189         imply DEBUG_UART
190         help
191           Choose this option to build U-Boot for RISC-V S-Mode.
193 endchoice
195 choice
196         prompt "SPL Run Mode"
197         default SPL_RISCV_MMODE
198         depends on SPL
200 config SPL_RISCV_MMODE
201         bool "Machine"
202         help
203           Choose this option to build U-Boot SPL for RISC-V M-Mode.
205 config SPL_RISCV_SMODE
206         bool "Supervisor"
207         help
208           Choose this option to build U-Boot SPL for RISC-V S-Mode.
210 endchoice
212 config RISCV_ISA_C
213         bool "Emit compressed instructions"
214         default y
215         help
216           Adds "C" to the ISA subsets that the toolchain is allowed to emit
217           when building U-Boot, which results in compressed instructions in the
218           U-Boot binary.
220 config RISCV_ISA_F
221         bool "Standard extension for Single-Precision Floating Point"
222         default y
223         help
224           Adds "F" to the ISA string passed to the compiler.
226 config RISCV_ISA_D
227         bool "Standard extension for Double-Precision Floating Point"
228         depends on RISCV_ISA_F
229         default y
230         help
231           Adds "D" to the ISA string passed to the compiler and changes the
232           riscv32 ABI from ilp32 to ilp32d and the riscv64 ABI from lp64 to
233           lp64d.
235 config RISCV_ISA_ZBB
236         bool "Zbb extension support for bit manipulation instructions"
237         help
238           Adds ZBB extension (basic bit manipulation) to the ISA subsets
239           that the toolchain is allowed to emit when building U-Boot.
240           The Zbb extension provides instructions to accelerate a number
241           of bit-specific operations (count bit population, sign extending,
242           bitrotation, etc) and enables optimized string routines.
244 menu "Use assembly optimized implementation of string routines"
246 config USE_ARCH_STRLEN
247         bool "Use an assembly optimized implementation of strlen"
248         default y
249         depends on RISCV_ISA_ZBB
250         help
251           Enable the generation of an optimized version of strlen using
252           Zbb extension.
254 config SPL_USE_ARCH_STRLEN
255         bool "Use an assembly optimized implementation of strlen for SPL"
256         default y if USE_ARCH_STRLEN
257         depends on RISCV_ISA_ZBB
258         depends on SPL
259         help
260           Enable the generation of an optimized version of strlen using
261           Zbb extension.
263 config TPL_USE_ARCH_STRLEN
264         bool "Use an assembly optimized implementation of strlen for TPL"
265         default y if USE_ARCH_STRLEN
266         depends on RISCV_ISA_ZBB
267         depends on TPL
268         help
269           Enable the generation of an optimized version of strlen using
270           Zbb extension.
272 config USE_ARCH_STRCMP
273         bool "Use an assembly optimized implementation of strcmp"
274         default y
275         depends on RISCV_ISA_ZBB
276         help
277           Enable the generation of an optimized version of strcmp using
278           Zbb extension.
280 config SPL_USE_ARCH_STRCMP
281         bool "Use an assembly optimized implementation of strcmp for SPL"
282         default y if USE_ARCH_STRCMP
283         depends on RISCV_ISA_ZBB
284         depends on SPL
285         help
286           Enable the generation of an optimized version of strcmp using
287           Zbb extension.
289 config TPL_USE_ARCH_STRCMP
290         bool "Use an assembly optimized implementation of strcmp for TPL"
291         default y if USE_ARCH_STRCMP
292         depends on RISCV_ISA_ZBB
293         depends on TPL
294         help
295           Enable the generation of an optimized version of strcmp using
296           Zbb extension.
298 config USE_ARCH_STRNCMP
299         bool "Use an assembly optimized implementation of strncmp"
300         default y
301         depends on RISCV_ISA_ZBB
302         help
303           Enable the generation of an optimized version of strncmp using
304           Zbb extension.
306 config SPL_USE_ARCH_STRNCMP
307         bool "Use an assembly optimized implementation of strncmp for SPL"
308         default y if USE_ARCH_STRNCMP
309         depends on RISCV_ISA_ZBB
310         depends on SPL
311         help
312           Enable the generation of an optimized version of strncmp using
313           Zbb extension.
315 config TPL_USE_ARCH_STRNCMP
316         bool "Use an assembly optimized implementation of strncmp for TPL"
317         default y if USE_ARCH_STRNCMP
318         depends on RISCV_ISA_ZBB
319         depends on TPL
320         help
321           Enable the generation of an optimized version of strncmp using
322           Zbb extension.
324 endmenu
326 config RISCV_ISA_A
327         bool "Standard extension for Atomic Instructions"
328         default y
329         help
330           Adds "A" to the ISA string passed to the compiler.
332 config RISCV_ISA_ZICBOM
333         bool "Zicbom support"
334         depends on !SYS_DISABLE_DCACHE_OPS
336 config DMA_ADDR_T_64BIT
337         bool
338         default y if 64BIT
340 config RISCV_ACLINT
341         bool
342         depends on RISCV_MMODE
343         select REGMAP
344         select SYSCON
345         help
346           The RISC-V ACLINT block holds memory-mapped control and status registers
347           associated with software and timer interrupts.
349 config SPL_RISCV_ACLINT
350         bool
351         depends on SPL_RISCV_MMODE
352         select SPL_REGMAP
353         select SPL_SYSCON
354         help
355           The RISC-V ACLINT block holds memory-mapped control and status registers
356           associated with software and timer interrupts.
358 config SIFIVE_CACHE
359         bool
360         help
361           This enables the operations to configure SiFive cache
363 config ANDES_PLICSW
364         bool
365         depends on RISCV_MMODE || SPL_RISCV_MMODE
366         select REGMAP
367         select SYSCON
368         select SPL_REGMAP if SPL
369         select SPL_SYSCON if SPL
370         help
371           The Andes PLICSW block holds memory-mapped claim and pending
372           registers associated with software interrupt.
374 config SMP
375         bool "Symmetric Multi-Processing"
376         depends on SBI_V01 || !RISCV_SMODE
377         help
378           This enables support for systems with more than one CPU. If
379           you say N here, U-Boot will run on single and multiprocessor
380           machines, but will use only one CPU of a multiprocessor
381           machine. If you say Y here, U-Boot will run on many, but not
382           all, single processor machines.
384 config SPL_SMP
385         bool "Symmetric Multi-Processing in SPL"
386         depends on SPL && SPL_RISCV_MMODE
387         default y
388         help
389           This enables support for systems with more than one CPU in SPL.
390           If you say N here, U-Boot SPL will run on single and multiprocessor
391           machines, but will use only one CPU of a multiprocessor
392           machine. If you say Y here, U-Boot SPL will run on many, but not
393           all, single processor machines.
395 config NR_CPUS
396         int "Maximum number of CPUs (2-32)"
397         range 2 32
398         depends on SMP || SPL_SMP
399         default 8
400         help
401           On multiprocessor machines, U-Boot sets up a stack for each CPU.
402           Stack memory is pre-allocated. U-Boot must therefore know the
403           maximum number of CPUs that may be present.
405 config SBI
406         bool
407         default y if RISCV_SMODE || SPL_RISCV_SMODE
409 choice
410         prompt "SBI support"
411         default SBI_V02
413 config SBI_V01
414         bool "SBI v0.1 support"
415         depends on SBI
416         help
417           This config allows kernel to use SBI v0.1 APIs. This will be
418           deprecated in future once legacy M-mode software are no longer in use.
420 config SBI_V02
421         bool "SBI v0.2 or later support"
422         depends on SBI
423         help
424           The SBI specification introduced the concept of extensions in version
425           v0.2. With this configuration option U-Boot can detect and use SBI
426           extensions. With the HSM extension introduced in SBI 0.2, only a
427           single hart needs to boot and enter the operating system. The booting
428           hart can bring up secondary harts one by one afterwards.
430           Choose this option if OpenSBI release v0.7 or above is used together
431           with U-Boot.
433 endchoice
435 config SBI_IPI
436         bool
437         depends on SBI
438         default y if RISCV_SMODE || SPL_RISCV_SMODE
439         depends on SMP
441 config XIP
442         bool "XIP mode"
443         help
444           XIP (eXecute In Place) is a method for executing code directly
445           from a NOR flash memory without copying the code to ram.
446           Say yes here if U-Boot boots from flash directly.
448 config SPL_XIP
449         bool "Enable XIP mode for SPL"
450         help
451           If SPL starts in read-only memory (XIP for example) then we shouldn't
452           rely on lock variables (for example hart_lottery and available_harts_lock),
453           this affects only SPL, other stages should proceed as non-XIP.
455 config AVAILABLE_HARTS
456         bool "Send IPI by available harts"
457         default y
458         help
459           By default, IPI sending mechanism will depend on available_harts.
460           If disable this, it will send IPI by CPUs node numbers of device tree.
462 config SHOW_REGS
463         default y
464         bool "Show registers on unhandled exception"
465         help
466           By default only the program counter and the return address register
467           are shown in crash dumps. Enable this symbol to show all registers in
468           main U-Boot.
470 config SPL_SHOW_REGS
471         bool "In SPL show registers on unhandled exception"
472         depends on SPL
473         help
474           By default only the program counter and the return address register
475           are shown in crash dumps. Enable this symbol to show all registers in
476           SPL.
478 config RISCV_PRIV_1_9
479         bool "Use version 1.9 of the RISC-V priviledged specification"
480         help
481           Older versions of the RISC-V priviledged specification had
482           separate counter enable CSRs for each privilege mode. Writing
483           to the unified mcounteren CSR on a processor implementing the
484           old specification will result in an illegal instruction
485           exception. In addition to counter CSR changes, the way virtual
486           memory is configured was also changed.
488 config STACK_SIZE_SHIFT
489         int "Stack size shift"
490         default 14
492 config OF_BOARD_FIXUP
493         default y if OF_SEPARATE && RISCV_SMODE
495 menu "Use assembly optimized implementation of memory routines"
497 config USE_ARCH_MEMCPY
498         bool "Use an assembly optimized implementation of memcpy"
499         default y
500         help
501           Enable the generation of an optimized version of memcpy.
502           Such an implementation may be faster under some conditions
503           but may increase the binary size.
505 config SPL_USE_ARCH_MEMCPY
506         bool "Use an assembly optimized implementation of memcpy for SPL"
507         default y if USE_ARCH_MEMCPY
508         depends on SPL
509         help
510           Enable the generation of an optimized version of memcpy.
511           Such an implementation may be faster under some conditions
512           but may increase the binary size.
514 config TPL_USE_ARCH_MEMCPY
515         bool "Use an assembly optimized implementation of memcpy for TPL"
516         default y if USE_ARCH_MEMCPY
517         depends on TPL
518         help
519           Enable the generation of an optimized version of memcpy.
520           Such an implementation may be faster under some conditions
521           but may increase the binary size.
523 config USE_ARCH_MEMMOVE
524         bool "Use an assembly optimized implementation of memmove"
525         default y
526         help
527           Enable the generation of an optimized version of memmove.
528           Such an implementation may be faster under some conditions
529           but may increase the binary size.
531 config SPL_USE_ARCH_MEMMOVE
532         bool "Use an assembly optimized implementation of memmove for SPL"
533         default y if USE_ARCH_MEMCPY
534         depends on SPL
535         help
536           Enable the generation of an optimized version of memmove.
537           Such an implementation may be faster under some conditions
538           but may increase the binary size.
540 config TPL_USE_ARCH_MEMMOVE
541         bool "Use an assembly optimized implementation of memmove for TPL"
542         default y if USE_ARCH_MEMCPY
543         depends on TPL
544         help
545           Enable the generation of an optimized version of memmove.
546           Such an implementation may be faster under some conditions
547           but may increase the binary size.
549 config USE_ARCH_MEMSET
550         bool "Use an assembly optimized implementation of memset"
551         default y
552         help
553           Enable the generation of an optimized version of memset.
554           Such an implementation may be faster under some conditions
555           but may increase the binary size.
557 config SPL_USE_ARCH_MEMSET
558         bool "Use an assembly optimized implementation of memset for SPL"
559         default y if USE_ARCH_MEMSET
560         depends on SPL
561         help
562           Enable the generation of an optimized version of memset.
563           Such an implementation may be faster under some conditions
564           but may increase the binary size.
566 config TPL_USE_ARCH_MEMSET
567         bool "Use an assembly optimized implementation of memset for TPL"
568         default y if USE_ARCH_MEMSET
569         depends on TPL
570         help
571           Enable the generation of an optimized version of memset.
572           Such an implementation may be faster under some conditions
573           but may increase the binary size.
575 endmenu
577 config SPL_LOAD_FIT_OPENSBI_OS_BOOT
578         bool "Enable SPL (OpenSBI OS boot mode) applying linux from FIT"
579         depends on SPL_LOAD_FIT
580         help
581           Use fw_dynamic from the FIT image, and u-boot SPL will invoke it directly.
582           This is a shortcut boot flow, from u-boot SPL -> OpenSBI -> u-boot proper
583           -> linux to u-boot SPL -> OpenSBI -> linux.
585 endmenu