xref: /linux/arch/loongarch/Kconfig (revision 8804d970fab45726b3c7cd7f240b31122aa94219)
1# SPDX-License-Identifier: GPL-2.0
2config LOONGARCH
3	bool
4	default y
5	select ACPI
6	select ACPI_GENERIC_GSI if ACPI
7	select ACPI_MCFG if ACPI
8	select ACPI_HOTPLUG_CPU if ACPI_PROCESSOR && HOTPLUG_CPU
9	select ACPI_PPTT if ACPI
10	select ACPI_SYSTEM_POWER_STATES_SUPPORT	if ACPI
11	select ARCH_BINFMT_ELF_STATE
12	select ARCH_NEEDS_DEFER_KASAN
13	select ARCH_DISABLE_KASAN_INLINE
14	select ARCH_ENABLE_MEMORY_HOTPLUG
15	select ARCH_ENABLE_MEMORY_HOTREMOVE
16	select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
17	select ARCH_HAS_ACPI_TABLE_UPGRADE	if ACPI
18	select ARCH_HAS_CPU_FINALIZE_INIT
19	select ARCH_HAS_CURRENT_STACK_POINTER
20	select ARCH_HAS_DEBUG_VM_PGTABLE
21	select ARCH_HAS_FAST_MULTIPLIER
22	select ARCH_HAS_FORTIFY_SOURCE
23	select ARCH_HAS_KCOV
24	select ARCH_HAS_KERNEL_FPU_SUPPORT if CPU_HAS_FPU
25	select ARCH_HAS_NMI_SAFE_THIS_CPU_OPS
26	select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
27	select ARCH_HAS_PREEMPT_LAZY
28	select ARCH_HAS_PTE_SPECIAL
29	select ARCH_HAS_SET_MEMORY
30	select ARCH_HAS_SET_DIRECT_MAP
31	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
32	select ARCH_HAS_UBSAN
33	select ARCH_HAS_VDSO_ARCH_DATA
34	select ARCH_INLINE_READ_LOCK if !PREEMPTION
35	select ARCH_INLINE_READ_LOCK_BH if !PREEMPTION
36	select ARCH_INLINE_READ_LOCK_IRQ if !PREEMPTION
37	select ARCH_INLINE_READ_LOCK_IRQSAVE if !PREEMPTION
38	select ARCH_INLINE_READ_UNLOCK if !PREEMPTION
39	select ARCH_INLINE_READ_UNLOCK_BH if !PREEMPTION
40	select ARCH_INLINE_READ_UNLOCK_IRQ if !PREEMPTION
41	select ARCH_INLINE_READ_UNLOCK_IRQRESTORE if !PREEMPTION
42	select ARCH_INLINE_WRITE_LOCK if !PREEMPTION
43	select ARCH_INLINE_WRITE_LOCK_BH if !PREEMPTION
44	select ARCH_INLINE_WRITE_LOCK_IRQ if !PREEMPTION
45	select ARCH_INLINE_WRITE_LOCK_IRQSAVE if !PREEMPTION
46	select ARCH_INLINE_WRITE_UNLOCK if !PREEMPTION
47	select ARCH_INLINE_WRITE_UNLOCK_BH if !PREEMPTION
48	select ARCH_INLINE_WRITE_UNLOCK_IRQ if !PREEMPTION
49	select ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE if !PREEMPTION
50	select ARCH_INLINE_SPIN_TRYLOCK if !PREEMPTION
51	select ARCH_INLINE_SPIN_TRYLOCK_BH if !PREEMPTION
52	select ARCH_INLINE_SPIN_LOCK if !PREEMPTION
53	select ARCH_INLINE_SPIN_LOCK_BH if !PREEMPTION
54	select ARCH_INLINE_SPIN_LOCK_IRQ if !PREEMPTION
55	select ARCH_INLINE_SPIN_LOCK_IRQSAVE if !PREEMPTION
56	select ARCH_INLINE_SPIN_UNLOCK if !PREEMPTION
57	select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION
58	select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION
59	select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION
60	select ARCH_KEEP_MEMBLOCK
61	select ARCH_MIGHT_HAVE_PC_PARPORT
62	select ARCH_MIGHT_HAVE_PC_SERIO
63	select ARCH_SPARSEMEM_ENABLE
64	select ARCH_STACKWALK
65	select ARCH_SUPPORTS_ACPI
66	select ARCH_SUPPORTS_ATOMIC_RMW
67	select ARCH_SUPPORTS_HUGETLBFS
68	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
69	select ARCH_SUPPORTS_LTO_CLANG
70	select ARCH_SUPPORTS_LTO_CLANG_THIN
71	select ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS
72	select ARCH_SUPPORTS_NUMA_BALANCING
73	select ARCH_SUPPORTS_RT
74	select ARCH_SUPPORTS_SCHED_SMT if SMP
75	select ARCH_SUPPORTS_SCHED_MC  if SMP
76	select ARCH_USE_BUILTIN_BSWAP
77	select ARCH_USE_CMPXCHG_LOCKREF
78	select ARCH_USE_MEMTEST
79	select ARCH_USE_QUEUED_RWLOCKS
80	select ARCH_USE_QUEUED_SPINLOCKS
81	select ARCH_WANT_DEFAULT_BPF_JIT
82	select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
83	select ARCH_WANT_LD_ORPHAN_WARN
84	select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
85	select ARCH_WANTS_NO_INSTR
86	select ARCH_WANTS_THP_SWAP if HAVE_ARCH_TRANSPARENT_HUGEPAGE
87	select BUILDTIME_TABLE_SORT
88	select COMMON_CLK
89	select CPU_PM
90	select EDAC_SUPPORT
91	select EFI
92	select GENERIC_CLOCKEVENTS
93	select GENERIC_CMOS_UPDATE
94	select GENERIC_CPU_AUTOPROBE
95	select GENERIC_CPU_DEVICES
96	select GENERIC_CPU_VULNERABILITIES
97	select GENERIC_ENTRY
98	select GENERIC_GETTIMEOFDAY
99	select GENERIC_IOREMAP if !ARCH_IOREMAP
100	select GENERIC_IRQ_MATRIX_ALLOCATOR
101	select GENERIC_IRQ_MULTI_HANDLER
102	select GENERIC_IRQ_PROBE
103	select GENERIC_IRQ_SHOW
104	select GENERIC_LIB_ASHLDI3
105	select GENERIC_LIB_ASHRDI3
106	select GENERIC_LIB_CMPDI2
107	select GENERIC_LIB_LSHRDI3
108	select GENERIC_LIB_UCMPDI2
109	select GENERIC_LIB_DEVMEM_IS_ALLOWED
110	select GENERIC_PCI_IOMAP
111	select GENERIC_SCHED_CLOCK
112	select GENERIC_SMP_IDLE_THREAD
113	select GENERIC_TIME_VSYSCALL
114	select GPIOLIB
115	select HAS_IOPORT
116	select HAVE_ARCH_AUDITSYSCALL
117	select HAVE_ARCH_JUMP_LABEL
118	select HAVE_ARCH_JUMP_LABEL_RELATIVE
119	select HAVE_ARCH_KASAN
120	select HAVE_ARCH_KFENCE
121	select HAVE_ARCH_KGDB if PERF_EVENTS
122	select HAVE_ARCH_KSTACK_ERASE
123	select HAVE_ARCH_MMAP_RND_BITS if MMU
124	select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
125	select HAVE_ARCH_SECCOMP
126	select HAVE_ARCH_SECCOMP_FILTER
127	select HAVE_ARCH_TRACEHOOK
128	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
129	select HAVE_ARCH_USERFAULTFD_MINOR if USERFAULTFD
130	select HAVE_ASM_MODVERSIONS
131	select HAVE_CONTEXT_TRACKING_USER
132	select HAVE_C_RECORDMCOUNT
133	select HAVE_DEBUG_KMEMLEAK
134	select HAVE_DEBUG_STACKOVERFLOW
135	select HAVE_DMA_CONTIGUOUS
136	select HAVE_DYNAMIC_FTRACE
137	select HAVE_DYNAMIC_FTRACE_WITH_ARGS
138	select HAVE_FTRACE_REGS_HAVING_PT_REGS
139	select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
140	select HAVE_DYNAMIC_FTRACE_WITH_REGS
141	select HAVE_EBPF_JIT
142	select HAVE_EFFICIENT_UNALIGNED_ACCESS if !ARCH_STRICT_ALIGN
143	select HAVE_EXIT_THREAD
144	select HAVE_GENERIC_TIF_BITS
145	select HAVE_GUP_FAST
146	select HAVE_FTRACE_GRAPH_FUNC
147	select HAVE_FUNCTION_ARG_ACCESS_API
148	select HAVE_FUNCTION_ERROR_INJECTION
149	select HAVE_FUNCTION_GRAPH_FREGS
150	select HAVE_FUNCTION_GRAPH_TRACER
151	select HAVE_FUNCTION_TRACER
152	select HAVE_GCC_PLUGINS
153	select HAVE_GENERIC_VDSO
154	select HAVE_HW_BREAKPOINT if PERF_EVENTS
155	select HAVE_IOREMAP_PROT
156	select HAVE_IRQ_EXIT_ON_IRQ_STACK
157	select HAVE_IRQ_TIME_ACCOUNTING
158	select HAVE_KPROBES
159	select HAVE_KPROBES_ON_FTRACE
160	select HAVE_KRETPROBES
161	select HAVE_LIVEPATCH
162	select HAVE_MOD_ARCH_SPECIFIC
163	select HAVE_NMI
164	select HAVE_OBJTOOL if AS_HAS_EXPLICIT_RELOCS && AS_HAS_THIN_ADD_SUB
165	select HAVE_PCI
166	select HAVE_PERF_EVENTS
167	select HAVE_PERF_REGS
168	select HAVE_PERF_USER_STACK_DUMP
169	select HAVE_POSIX_CPU_TIMERS_TASK_WORK
170	select HAVE_PREEMPT_DYNAMIC_KEY
171	select HAVE_REGS_AND_STACK_ACCESS_API
172	select HAVE_RELIABLE_STACKTRACE if UNWINDER_ORC
173	select HAVE_RETHOOK
174	select HAVE_RSEQ
175	select HAVE_RUST
176	select HAVE_SAMPLE_FTRACE_DIRECT
177	select HAVE_SAMPLE_FTRACE_DIRECT_MULTI
178	select HAVE_SETUP_PER_CPU_AREA if NUMA
179	select HAVE_STACK_VALIDATION if HAVE_OBJTOOL
180	select HAVE_STACKPROTECTOR
181	select HAVE_SYSCALL_TRACEPOINTS
182	select HAVE_TIF_NOHZ
183	select HAVE_VIRT_CPU_ACCOUNTING_GEN
184	select IRQ_FORCED_THREADING
185	select IRQ_LOONGARCH_CPU
186	select LOCK_MM_AND_FIND_VMA
187	select MMU_GATHER_MERGE_VMAS if MMU
188	select MODULES_USE_ELF_RELA if MODULES
189	select NEED_PER_CPU_EMBED_FIRST_CHUNK
190	select NEED_PER_CPU_PAGE_FIRST_CHUNK
191	select NUMA_MEMBLKS if NUMA
192	select OF
193	select OF_EARLY_FLATTREE
194	select PCI
195	select PCI_DOMAINS_GENERIC
196	select PCI_ECAM if ACPI
197	select PCI_LOONGSON
198	select PCI_MSI_ARCH_FALLBACKS
199	select PCI_QUIRKS
200	select PERF_USE_VMALLOC
201	select RTC_LIB
202	select SPARSE_IRQ
203	select SYSCTL_ARCH_UNALIGN_ALLOW
204	select SYSCTL_ARCH_UNALIGN_NO_WARN
205	select SYSCTL_EXCEPTION_TRACE
206	select SWIOTLB
207	select TRACE_IRQFLAGS_SUPPORT
208	select USE_PERCPU_NUMA_NODE_ID
209	select USER_STACKTRACE_SUPPORT
210	select VDSO_GETRANDOM
211	select ZONE_DMA32
212
213config 32BIT
214	bool
215
216config 64BIT
217	def_bool y
218
219config GENERIC_BUG
220	def_bool y
221	depends on BUG
222
223config GENERIC_BUG_RELATIVE_POINTERS
224	def_bool y
225	depends on GENERIC_BUG
226
227config GENERIC_CALIBRATE_DELAY
228	def_bool y
229
230config GENERIC_CSUM
231	def_bool y
232
233config GENERIC_HWEIGHT
234	def_bool y
235
236config L1_CACHE_SHIFT
237	int
238	default "6"
239
240config LOCKDEP_SUPPORT
241	bool
242	default y
243
244config STACKTRACE_SUPPORT
245	bool
246	default y
247
248# MACH_LOONGSON32 and MACH_LOONGSON64 are deliberately carried over from the
249# MIPS Loongson code, to preserve Loongson-specific code paths in drivers that
250# are shared between architectures, and specifically expecting the symbols.
251config MACH_LOONGSON32
252	def_bool 32BIT
253
254config MACH_LOONGSON64
255	def_bool 64BIT
256
257config FIX_EARLYCON_MEM
258	def_bool !ARCH_IOREMAP
259
260config PGTABLE_2LEVEL
261	bool
262
263config PGTABLE_3LEVEL
264	bool
265
266config PGTABLE_4LEVEL
267	bool
268
269config PGTABLE_LEVELS
270	int
271	default 2 if PGTABLE_2LEVEL
272	default 3 if PGTABLE_3LEVEL
273	default 4 if PGTABLE_4LEVEL
274
275config SCHED_OMIT_FRAME_POINTER
276	bool
277	default y
278
279config AS_HAS_EXPLICIT_RELOCS
280	def_bool $(as-instr,x:pcalau12i \$t0$(comma)%pc_hi20(x))
281
282config AS_HAS_FCSR_CLASS
283	def_bool $(as-instr,movfcsr2gr \$t0$(comma)\$fcsr0)
284
285config AS_HAS_THIN_ADD_SUB
286	def_bool $(cc-option,-Wa$(comma)-mthin-add-sub) || AS_IS_LLVM
287
288config AS_HAS_LSX_EXTENSION
289	def_bool $(as-instr,vld \$vr0$(comma)\$a0$(comma)0)
290
291config AS_HAS_LASX_EXTENSION
292	def_bool $(as-instr,xvld \$xr0$(comma)\$a0$(comma)0)
293
294config AS_HAS_LBT_EXTENSION
295	def_bool $(as-instr,movscr2gr \$a0$(comma)\$scr0)
296
297config AS_HAS_LVZ_EXTENSION
298	def_bool $(as-instr,hvcl 0)
299
300config CC_HAS_ANNOTATE_TABLEJUMP
301	def_bool $(cc-option,-mannotate-tablejump)
302
303config RUSTC_HAS_ANNOTATE_TABLEJUMP
304	depends on RUST
305	def_bool $(rustc-option,-Cllvm-args=--loongarch-annotate-tablejump)
306
307menu "Kernel type and options"
308
309source "kernel/Kconfig.hz"
310
311choice
312	prompt "Page Table Layout"
313	default 16KB_2LEVEL if 32BIT
314	default 16KB_3LEVEL if 64BIT
315	help
316	  Allows choosing the page table layout, which is a combination
317	  of page size and page table levels. The size of virtual memory
318	  address space are determined by the page table layout.
319
320config 4KB_3LEVEL
321	bool "4KB with 3 levels"
322	select HAVE_PAGE_SIZE_4KB
323	select PGTABLE_3LEVEL
324	help
325	  This option selects 4KB page size with 3 level page tables, which
326	  support a maximum of 39 bits of application virtual memory.
327
328config 4KB_4LEVEL
329	bool "4KB with 4 levels"
330	select HAVE_PAGE_SIZE_4KB
331	select PGTABLE_4LEVEL
332	help
333	  This option selects 4KB page size with 4 level page tables, which
334	  support a maximum of 48 bits of application virtual memory.
335
336config 16KB_2LEVEL
337	bool "16KB with 2 levels"
338	select HAVE_PAGE_SIZE_16KB
339	select PGTABLE_2LEVEL
340	help
341	  This option selects 16KB page size with 2 level page tables, which
342	  support a maximum of 36 bits of application virtual memory.
343
344config 16KB_3LEVEL
345	bool "16KB with 3 levels"
346	select HAVE_PAGE_SIZE_16KB
347	select PGTABLE_3LEVEL
348	help
349	  This option selects 16KB page size with 3 level page tables, which
350	  support a maximum of 47 bits of application virtual memory.
351
352config 64KB_2LEVEL
353	bool "64KB with 2 levels"
354	select HAVE_PAGE_SIZE_64KB
355	select PGTABLE_2LEVEL
356	help
357	  This option selects 64KB page size with 2 level page tables, which
358	  support a maximum of 42 bits of application virtual memory.
359
360config 64KB_3LEVEL
361	bool "64KB with 3 levels"
362	select HAVE_PAGE_SIZE_64KB
363	select PGTABLE_3LEVEL
364	help
365	  This option selects 64KB page size with 3 level page tables, which
366	  support a maximum of 55 bits of application virtual memory.
367
368endchoice
369
370config CMDLINE
371	string "Built-in kernel command line"
372	help
373	  For most platforms, the arguments for the kernel's command line
374	  are provided at run-time, during boot. However, there are cases
375	  where either no arguments are being provided or the provided
376	  arguments are insufficient or even invalid.
377
378	  When that occurs, it is possible to define a built-in command
379	  line here and choose how the kernel should use it later on.
380
381choice
382	prompt "Kernel command line type"
383	default CMDLINE_BOOTLOADER
384	help
385	  Choose how the kernel will handle the provided built-in command
386	  line.
387
388config CMDLINE_BOOTLOADER
389	bool "Use bootloader kernel arguments if available"
390	help
391	  Prefer the command-line passed by the boot loader if available.
392	  Use the built-in command line as fallback in case we get nothing
393	  during boot. This is the default behaviour.
394
395config CMDLINE_EXTEND
396	bool "Use built-in to extend bootloader kernel arguments"
397	help
398	  The built-in command line will be appended to the command-
399	  line arguments provided during boot. This is useful in
400	  cases where the provided arguments are insufficient and
401	  you don't want to or cannot modify them.
402
403config CMDLINE_FORCE
404	bool "Always use the built-in kernel command string"
405	help
406	  Always use the built-in command line, even if we get one during
407	  boot. This is useful in case you need to override the provided
408	  command line on systems where you don't have or want control
409	  over it.
410
411endchoice
412
413config BUILTIN_DTB
414	bool "Enable built-in dtb in kernel"
415	depends on OF
416	select GENERIC_BUILTIN_DTB
417	help
418	  Some existing systems do not provide a canonical device tree to
419	  the kernel at boot time. Let's provide a device tree table in the
420	  kernel, keyed by the dts filename, containing the relevant DTBs.
421
422	  Built-in DTBs are generic enough and can be used as references.
423
424config BUILTIN_DTB_NAME
425	string "Source file for built-in dtb"
426	depends on BUILTIN_DTB
427	help
428	  Base name (without suffix, relative to arch/loongarch/boot/dts/)
429	  for the DTS file that will be used to produce the DTB linked into
430	  the kernel.
431
432config DMI
433	bool "Enable DMI scanning"
434	select DMI_SCAN_MACHINE_NON_EFI_FALLBACK
435	default y
436	help
437	  This enables SMBIOS/DMI feature for systems, and scanning of
438	  DMI to identify machine quirks.
439
440config EFI
441	bool "EFI runtime service support"
442	select UCS2_STRING
443	select EFI_RUNTIME_WRAPPERS
444	help
445	  This enables the kernel to use EFI runtime services that are
446	  available (such as the EFI variable services).
447
448config EFI_STUB
449	bool "EFI boot stub support"
450	default y
451	depends on EFI
452	select EFI_GENERIC_STUB
453	help
454	  This kernel feature allows the kernel to be loaded directly by
455	  EFI firmware without the use of a bootloader.
456
457config SMP
458	bool "Multi-Processing support"
459	help
460	  This enables support for systems with more than one CPU. If you have
461	  a system with only one CPU, say N. If you have a system with more
462	  than one CPU, say Y.
463
464	  If you say N here, the kernel will run on uni- and multiprocessor
465	  machines, but will use only one CPU of a multiprocessor machine. If
466	  you say Y here, the kernel will run on many, but not all,
467	  uniprocessor machines. On a uniprocessor machine, the kernel
468	  will run faster if you say N here.
469
470	  See also the SMP-HOWTO available at <http://www.tldp.org/docs.html#howto>.
471
472	  If you don't know what to do here, say N.
473
474config HOTPLUG_CPU
475	bool "Support for hot-pluggable CPUs"
476	depends on SMP
477	select GENERIC_IRQ_MIGRATION
478	help
479	  Say Y here to allow turning CPUs off and on. CPUs can be
480	  controlled through /sys/devices/system/cpu.
481	  (Note: power management support will enable this option
482	    automatically on SMP systems. )
483	  Say N if you want to disable CPU hotplug.
484
485config NR_CPUS
486	int "Maximum number of CPUs (2-2048)"
487	range 2 2048
488	default "2048"
489	depends on SMP
490	help
491	  This allows you to specify the maximum number of CPUs which this
492	  kernel will support.
493
494config NUMA
495	bool "NUMA Support"
496	select SMP
497	help
498	  Say Y to compile the kernel with NUMA (Non-Uniform Memory Access)
499	  support.  This option improves performance on systems with more
500	  than one NUMA node; on single node systems it is generally better
501	  to leave it disabled.
502
503config NODES_SHIFT
504	int
505	default "6"
506	depends on NUMA
507
508config ARCH_FORCE_MAX_ORDER
509	int "Maximum zone order"
510	default "13" if PAGE_SIZE_64KB
511	default "11" if PAGE_SIZE_16KB
512	default "10"
513	help
514	  The kernel memory allocator divides physically contiguous memory
515	  blocks into "zones", where each zone is a power of two number of
516	  pages.  This option selects the largest power of two that the kernel
517	  keeps in the memory allocator.  If you need to allocate very large
518	  blocks of physically contiguous memory, then you may need to
519	  increase this value.
520
521	  The page size is not necessarily 4KB.  Keep this in mind
522	  when choosing a value for this option.
523
524config ARCH_IOREMAP
525	bool "Enable LoongArch DMW-based ioremap()"
526	help
527	  We use generic TLB-based ioremap() by default since it has page
528	  protection support. However, you can enable LoongArch DMW-based
529	  ioremap() for better performance.
530
531config ARCH_WRITECOMBINE
532	bool "Enable WriteCombine (WUC) for ioremap()"
533	help
534	  LoongArch maintains cache coherency in hardware, but when paired
535	  with LS7A chipsets the WUC attribute (Weak-ordered UnCached, which
536	  is similar to WriteCombine) is out of the scope of cache coherency
537	  machanism for PCIe devices (this is a PCIe protocol violation, which
538	  may be fixed in newer chipsets).
539
540	  This means WUC can only used for write-only memory regions now, so
541	  this option is disabled by default, making WUC silently fallback to
542	  SUC for ioremap(). You can enable this option if the kernel is ensured
543	  to run on hardware without this bug.
544
545	  You can override this setting via writecombine=on/off boot parameter.
546
547config ARCH_STRICT_ALIGN
548	bool "Enable -mstrict-align to prevent unaligned accesses" if EXPERT
549	default y
550	help
551	  Not all LoongArch cores support h/w unaligned access, we can use
552	  -mstrict-align build parameter to prevent unaligned accesses.
553
554	  CPUs with h/w unaligned access support:
555	  Loongson-2K2000/2K3000 and all of Loongson-3 series processors
556	  based on LoongArch.
557
558	  CPUs without h/w unaligned access support:
559	  Loongson-2K0300/2K0500/2K1000.
560
561	  If you want to make sure whether to support unaligned memory access
562	  on your hardware, please read the bit 20 (UAL) of CPUCFG1 register.
563
564	  This option is enabled by default to make the kernel be able to run
565	  on all LoongArch systems. But you can disable it manually if you want
566	  to run kernel only on systems with h/w unaligned access support in
567	  order to optimise for performance.
568
569config CPU_HAS_FPU
570	bool
571	default y
572
573config CPU_HAS_LSX
574	bool "Support for the Loongson SIMD Extension"
575	depends on AS_HAS_LSX_EXTENSION
576	help
577	  Loongson SIMD Extension (LSX) introduces 128 bit wide vector registers
578	  and a set of SIMD instructions to operate on them. When this option
579	  is enabled the kernel will support allocating & switching LSX
580	  vector register contexts. If you know that your kernel will only be
581	  running on CPUs which do not support LSX or that your userland will
582	  not be making use of it then you may wish to say N here to reduce
583	  the size & complexity of your kernel.
584
585	  If unsure, say Y.
586
587config CPU_HAS_LASX
588	bool "Support for the Loongson Advanced SIMD Extension"
589	depends on CPU_HAS_LSX
590	depends on AS_HAS_LASX_EXTENSION
591	help
592	  Loongson Advanced SIMD Extension (LASX) introduces 256 bit wide vector
593	  registers and a set of SIMD instructions to operate on them. When this
594	  option is enabled the kernel will support allocating & switching LASX
595	  vector register contexts. If you know that your kernel will only be
596	  running on CPUs which do not support LASX or that your userland will
597	  not be making use of it then you may wish to say N here to reduce
598	  the size & complexity of your kernel.
599
600	  If unsure, say Y.
601
602config CPU_HAS_LBT
603	bool "Support for the Loongson Binary Translation Extension"
604	depends on AS_HAS_LBT_EXTENSION
605	help
606	  Loongson Binary Translation (LBT) introduces 4 scratch registers (SCR0
607	  to SCR3), x86/ARM eflags (eflags) and x87 fpu stack pointer (ftop).
608	  Enabling this option allows the kernel to allocate and switch registers
609	  specific to LBT.
610
611	  If you want to use this feature, such as the Loongson Architecture
612	  Translator (LAT), say Y.
613
614config CPU_HAS_PREFETCH
615	bool
616	default y
617
618config ARCH_SUPPORTS_KEXEC
619	def_bool y
620
621config ARCH_SUPPORTS_CRASH_DUMP
622	def_bool y
623
624config ARCH_DEFAULT_CRASH_DUMP
625	def_bool y
626
627config ARCH_SELECTS_CRASH_DUMP
628	def_bool y
629	depends on CRASH_DUMP
630	select RELOCATABLE
631
632config ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION
633	def_bool CRASH_RESERVE
634
635config RELOCATABLE
636	bool "Relocatable kernel"
637	select ARCH_HAS_RELR
638	help
639	  This builds the kernel as a Position Independent Executable (PIE),
640	  which retains all relocation metadata required, so as to relocate
641	  the kernel binary at runtime to a different virtual address from
642	  its link address.
643
644config RANDOMIZE_BASE
645	bool "Randomize the address of the kernel (KASLR)"
646	depends on RELOCATABLE
647	help
648	   Randomizes the physical and virtual address at which the
649	   kernel image is loaded, as a security feature that
650	   deters exploit attempts relying on knowledge of the location
651	   of kernel internals.
652
653	   The kernel will be offset by up to RANDOMIZE_BASE_MAX_OFFSET.
654
655	   If unsure, say N.
656
657config RANDOMIZE_BASE_MAX_OFFSET
658	hex "Maximum KASLR offset" if EXPERT
659	depends on RANDOMIZE_BASE
660	range 0x0 0x10000000
661	default "0x01000000"
662	help
663	  When KASLR is active, this provides the maximum offset that will
664	  be applied to the kernel image. It should be set according to the
665	  amount of physical RAM available in the target system.
666
667	  This is limited by the size of the lower address memory, 256MB.
668
669source "kernel/livepatch/Kconfig"
670
671config PARAVIRT
672	bool "Enable paravirtualization code"
673	depends on AS_HAS_LVZ_EXTENSION
674	help
675	  This changes the kernel so it can modify itself when it is run
676	  under a hypervisor, potentially improving performance significantly
677	  over full virtualization.  However, when run without a hypervisor
678	  the kernel is theoretically slower and slightly larger.
679
680config PARAVIRT_TIME_ACCOUNTING
681	bool "Paravirtual steal time accounting"
682	depends on PARAVIRT
683	help
684	  Select this option to enable fine granularity task steal time
685	  accounting. Time spent executing other tasks in parallel with
686	  the current vCPU is discounted from the vCPU power. To account for
687	  that, there can be a small performance impact.
688
689	  If in doubt, say N here.
690
691endmenu
692
693config ARCH_SELECT_MEMORY_MODEL
694	def_bool y
695
696config ARCH_FLATMEM_ENABLE
697	def_bool y
698	depends on !NUMA
699
700config ARCH_SPARSEMEM_ENABLE
701	def_bool y
702	select SPARSEMEM_VMEMMAP_ENABLE
703	help
704	  Say Y to support efficient handling of sparse physical memory,
705	  for architectures which are either NUMA (Non-Uniform Memory Access)
706	  or have huge holes in the physical address space for other reasons.
707	  See <file:Documentation/mm/numa.rst> for more.
708
709config ARCH_MEMORY_PROBE
710	def_bool y
711	depends on MEMORY_HOTPLUG
712
713config MMU
714	bool
715	default y
716
717config ARCH_MMAP_RND_BITS_MIN
718	default 12
719
720config ARCH_MMAP_RND_BITS_MAX
721	default 18
722
723config ARCH_SUPPORTS_UPROBES
724	def_bool y
725
726config KASAN_SHADOW_OFFSET
727	hex
728	default 0x0
729	depends on KASAN
730
731menu "Power management options"
732
733config ARCH_SUSPEND_POSSIBLE
734	def_bool y
735
736config ARCH_HIBERNATION_POSSIBLE
737	def_bool y
738
739source "kernel/power/Kconfig"
740source "drivers/acpi/Kconfig"
741source "drivers/cpufreq/Kconfig"
742
743endmenu
744
745source "arch/loongarch/kvm/Kconfig"
746