6771d8d9198d74b8b3b602d95c1cf26e72d6f350
[platform/kernel/u-boot.git] / arch / riscv / Kconfig
1 menu "RISC-V architecture"
2         depends on RISCV
3
4 config SYS_ARCH
5         default "riscv"
6
7 choice
8         prompt "Target select"
9         optional
10
11 config TARGET_AE350
12         bool "Support ae350"
13
14 config TARGET_MICROCHIP_ICICLE
15         bool "Support Microchip PolarFire-SoC Icicle Board"
16
17 config TARGET_QEMU_VIRT
18         bool "Support QEMU Virt Board"
19
20 config TARGET_SIFIVE_UNLEASHED
21         bool "Support SiFive Unleashed Board"
22
23 config TARGET_SIFIVE_UNMATCHED
24         bool "Support SiFive Unmatched Board"
25         select SYS_CACHE_SHIFT_6
26
27 config TARGET_STARFIVE_VISIONFIVE2
28         bool "Support StarFive VisionFive2 Board"
29
30 config TARGET_TH1520_LPI4A
31         bool "Support Sipeed's TH1520 Lichee PI 4A Board"
32         select SYS_CACHE_SHIFT_6
33
34 config TARGET_SIPEED_MAIX
35         bool "Support Sipeed Maix Board"
36         select SYS_CACHE_SHIFT_6
37
38 config TARGET_OPENPITON_RISCV64
39         bool "Support RISC-V cores on OpenPiton SoC"
40
41 endchoice
42
43 config SYS_ICACHE_OFF
44         bool "Do not enable icache"
45         help
46           Do not enable instruction cache in U-Boot.
47
48 config SPL_SYS_ICACHE_OFF
49         bool "Do not enable icache in SPL"
50         depends on SPL
51         default SYS_ICACHE_OFF
52         help
53           Do not enable instruction cache in SPL.
54
55 config SYS_DCACHE_OFF
56         bool "Do not enable dcache"
57         help
58           Do not enable data cache in U-Boot.
59
60 config SPL_SYS_DCACHE_OFF
61         bool "Do not enable dcache in SPL"
62         depends on SPL
63         default SYS_DCACHE_OFF
64         help
65           Do not enable data cache in SPL.
66
67 config SPL_ZERO_MEM_BEFORE_USE
68         bool "Zero memory before use"
69         depends on SPL
70         default n
71         help
72           Zero stack/GD/malloc area in SPL before using them, this is needed for
73           Sifive core devices that uses L2 cache to store SPL.
74
75 # board-specific options below
76 source "board/AndesTech/ae350/Kconfig"
77 source "board/emulation/qemu-riscv/Kconfig"
78 source "board/microchip/mpfs_icicle/Kconfig"
79 source "board/sifive/unleashed/Kconfig"
80 source "board/sifive/unmatched/Kconfig"
81 source "board/thead/th1520_lpi4a/Kconfig"
82 source "board/openpiton/riscv64/Kconfig"
83 source "board/sipeed/maix/Kconfig"
84 source "board/starfive/visionfive2/Kconfig"
85
86 # platform-specific options below
87 source "arch/riscv/cpu/andesv5/Kconfig"
88 source "arch/riscv/cpu/fu540/Kconfig"
89 source "arch/riscv/cpu/fu740/Kconfig"
90 source "arch/riscv/cpu/generic/Kconfig"
91 source "arch/riscv/cpu/jh7110/Kconfig"
92
93 # architecture-specific options below
94
95 choice
96         prompt "Base ISA"
97         default ARCH_RV32I
98
99 config ARCH_RV32I
100         bool "RV32I"
101         select 32BIT
102         help
103           Choose this option to target the RV32I base integer instruction set.
104
105 config ARCH_RV64I
106         bool "RV64I"
107         select 64BIT
108         select PHYS_64BIT
109         help
110           Choose this option to target the RV64I base integer instruction set.
111
112 endchoice
113
114 choice
115         prompt "Code Model"
116         default CMODEL_MEDLOW
117
118 config CMODEL_MEDLOW
119         bool "medium low code model"
120         help
121           U-Boot and its statically defined symbols must lie within a single 2 GiB
122           address range and must lie between absolute addresses -2 GiB and +2 GiB.
123
124 config CMODEL_MEDANY
125         bool "medium any code model"
126         help
127           U-Boot and its statically defined symbols must be within any single 2 GiB
128           address range.
129
130 endchoice
131
132 choice
133         prompt "Run Mode"
134         default RISCV_MMODE
135
136 config RISCV_MMODE
137         bool "Machine"
138         help
139           Choose this option to build U-Boot for RISC-V M-Mode.
140
141 config RISCV_SMODE
142         bool "Supervisor"
143         help
144           Choose this option to build U-Boot for RISC-V S-Mode.
145
146 endchoice
147
148 choice
149         prompt "SPL Run Mode"
150         default SPL_RISCV_MMODE
151         depends on SPL
152
153 config SPL_RISCV_MMODE
154         bool "Machine"
155         help
156           Choose this option to build U-Boot SPL for RISC-V M-Mode.
157
158 config SPL_RISCV_SMODE
159         bool "Supervisor"
160         help
161           Choose this option to build U-Boot SPL for RISC-V S-Mode.
162
163 endchoice
164
165 config RISCV_ISA_C
166         bool "Emit compressed instructions"
167         default y
168         help
169           Adds "C" to the ISA subsets that the toolchain is allowed to emit
170           when building U-Boot, which results in compressed instructions in the
171           U-Boot binary.
172
173 config RISCV_ISA_F
174         bool "Standard extension for Single-Precision Floating Point"
175         default y
176         help
177           Adds "F" to the ISA string passed to the compiler.
178
179 config RISCV_ISA_D
180         bool "Standard extension for Double-Precision Floating Point"
181         depends on RISCV_ISA_F
182         default y
183         help
184           Adds "D" to the ISA string passed to the compiler and changes the
185           riscv32 ABI from ilp32 to ilp32d and the riscv64 ABI from lp64 to
186           lp64d.
187
188 config RISCV_ISA_A
189         def_bool y
190
191 config 32BIT
192         bool
193
194 config 64BIT
195         bool
196
197 config DMA_ADDR_T_64BIT
198         bool
199         default y if 64BIT
200
201 config RISCV_ACLINT
202         bool
203         depends on RISCV_MMODE
204         select REGMAP
205         select SYSCON
206         help
207           The RISC-V ACLINT block holds memory-mapped control and status registers
208           associated with software and timer interrupts.
209
210 config SPL_RISCV_ACLINT
211         bool
212         depends on SPL_RISCV_MMODE
213         select SPL_REGMAP
214         select SPL_SYSCON
215         help
216           The RISC-V ACLINT block holds memory-mapped control and status registers
217           associated with software and timer interrupts.
218
219 config SIFIVE_CACHE
220         bool
221         help
222           This enables the operations to configure SiFive cache
223
224 config ANDES_PLICSW
225         bool
226         depends on RISCV_MMODE || SPL_RISCV_MMODE
227         select REGMAP
228         select SYSCON
229         select SPL_REGMAP if SPL
230         select SPL_SYSCON if SPL
231         help
232           The Andes PLICSW block holds memory-mapped claim and pending
233           registers associated with software interrupt.
234
235 config SMP
236         bool "Symmetric Multi-Processing"
237         depends on SBI_V01 || !RISCV_SMODE
238         help
239           This enables support for systems with more than one CPU. If
240           you say N here, U-Boot will run on single and multiprocessor
241           machines, but will use only one CPU of a multiprocessor
242           machine. If you say Y here, U-Boot will run on many, but not
243           all, single processor machines.
244
245 config SPL_SMP
246         bool "Symmetric Multi-Processing in SPL"
247         depends on SPL && SPL_RISCV_MMODE
248         default y
249         help
250           This enables support for systems with more than one CPU in SPL.
251           If you say N here, U-Boot SPL will run on single and multiprocessor
252           machines, but will use only one CPU of a multiprocessor
253           machine. If you say Y here, U-Boot SPL will run on many, but not
254           all, single processor machines.
255
256 config NR_CPUS
257         int "Maximum number of CPUs (2-32)"
258         range 2 32
259         depends on SMP || SPL_SMP
260         default 8
261         help
262           On multiprocessor machines, U-Boot sets up a stack for each CPU.
263           Stack memory is pre-allocated. U-Boot must therefore know the
264           maximum number of CPUs that may be present.
265
266 config SBI
267         bool
268         default y if RISCV_SMODE || SPL_RISCV_SMODE
269
270 choice
271         prompt "SBI support"
272         default SBI_V02
273
274 config SBI_V01
275         bool "SBI v0.1 support"
276         depends on SBI
277         help
278           This config allows kernel to use SBI v0.1 APIs. This will be
279           deprecated in future once legacy M-mode software are no longer in use.
280
281 config SBI_V02
282         bool "SBI v0.2 or later support"
283         depends on SBI
284         help
285           The SBI specification introduced the concept of extensions in version
286           v0.2. With this configuration option U-Boot can detect and use SBI
287           extensions. With the HSM extension introduced in SBI 0.2, only a
288           single hart needs to boot and enter the operating system. The booting
289           hart can bring up secondary harts one by one afterwards.
290
291           Choose this option if OpenSBI release v0.7 or above is used together
292           with U-Boot.
293
294 endchoice
295
296 config SBI_IPI
297         bool
298         depends on SBI
299         default y if RISCV_SMODE || SPL_RISCV_SMODE
300         depends on SMP
301
302 config XIP
303         bool "XIP mode"
304         help
305           XIP (eXecute In Place) is a method for executing code directly
306           from a NOR flash memory without copying the code to ram.
307           Say yes here if U-Boot boots from flash directly.
308
309 config SPL_XIP
310         bool "Enable XIP mode for SPL"
311         help
312           If SPL starts in read-only memory (XIP for example) then we shouldn't
313           rely on lock variables (for example hart_lottery and available_harts_lock),
314           this affects only SPL, other stages should proceed as non-XIP.
315
316 config AVAILABLE_HARTS
317         bool "Send IPI by available harts"
318         default y
319         help
320           By default, IPI sending mechanism will depend on available_harts.
321           If disable this, it will send IPI by CPUs node numbers of device tree.
322
323 config SHOW_REGS
324         bool "Show registers on unhandled exception"
325
326 config RISCV_PRIV_1_9
327         bool "Use version 1.9 of the RISC-V priviledged specification"
328         help
329           Older versions of the RISC-V priviledged specification had
330           separate counter enable CSRs for each privilege mode. Writing
331           to the unified mcounteren CSR on a processor implementing the
332           old specification will result in an illegal instruction
333           exception. In addition to counter CSR changes, the way virtual
334           memory is configured was also changed.
335
336 config STACK_SIZE_SHIFT
337         int
338         default 14
339
340 config OF_BOARD_FIXUP
341         default y if OF_SEPARATE && RISCV_SMODE
342
343 menu "Use assembly optimized implementation of memory routines"
344
345 config USE_ARCH_MEMCPY
346         bool "Use an assembly optimized implementation of memcpy"
347         default y
348         help
349           Enable the generation of an optimized version of memcpy.
350           Such an implementation may be faster under some conditions
351           but may increase the binary size.
352
353 config SPL_USE_ARCH_MEMCPY
354         bool "Use an assembly optimized implementation of memcpy for SPL"
355         default y if USE_ARCH_MEMCPY
356         depends on SPL
357         help
358           Enable the generation of an optimized version of memcpy.
359           Such an implementation may be faster under some conditions
360           but may increase the binary size.
361
362 config TPL_USE_ARCH_MEMCPY
363         bool "Use an assembly optimized implementation of memcpy for TPL"
364         default y if USE_ARCH_MEMCPY
365         depends on TPL
366         help
367           Enable the generation of an optimized version of memcpy.
368           Such an implementation may be faster under some conditions
369           but may increase the binary size.
370
371 config USE_ARCH_MEMMOVE
372         bool "Use an assembly optimized implementation of memmove"
373         default y
374         help
375           Enable the generation of an optimized version of memmove.
376           Such an implementation may be faster under some conditions
377           but may increase the binary size.
378
379 config SPL_USE_ARCH_MEMMOVE
380         bool "Use an assembly optimized implementation of memmove for SPL"
381         default y if USE_ARCH_MEMCPY
382         depends on SPL
383         help
384           Enable the generation of an optimized version of memmove.
385           Such an implementation may be faster under some conditions
386           but may increase the binary size.
387
388 config TPL_USE_ARCH_MEMMOVE
389         bool "Use an assembly optimized implementation of memmove for TPL"
390         default y if USE_ARCH_MEMCPY
391         depends on TPL
392         help
393           Enable the generation of an optimized version of memmove.
394           Such an implementation may be faster under some conditions
395           but may increase the binary size.
396
397 config USE_ARCH_MEMSET
398         bool "Use an assembly optimized implementation of memset"
399         default y
400         help
401           Enable the generation of an optimized version of memset.
402           Such an implementation may be faster under some conditions
403           but may increase the binary size.
404
405 config SPL_USE_ARCH_MEMSET
406         bool "Use an assembly optimized implementation of memset for SPL"
407         default y if USE_ARCH_MEMSET
408         depends on SPL
409         help
410           Enable the generation of an optimized version of memset.
411           Such an implementation may be faster under some conditions
412           but may increase the binary size.
413
414 config TPL_USE_ARCH_MEMSET
415         bool "Use an assembly optimized implementation of memset for TPL"
416         default y if USE_ARCH_MEMSET
417         depends on TPL
418         help
419           Enable the generation of an optimized version of memset.
420           Such an implementation may be faster under some conditions
421           but may increase the binary size.
422
423 endmenu
424
425 endmenu