1 # SPDX-License-Identifier: GPL-2.0
2 config PPC32
3 	bool
4 	default y if !PPC64
5 
6 config PPC64
7 	bool "64-bit kernel"
8 	select ZLIB_DEFLATE
9 	help
10 	  This option selects whether a 32-bit or a 64-bit kernel
11 	  will be built.
12 
13 menu "Processor support"
14 choice
15 	prompt "Processor Type"
16 	depends on PPC32
17 	help
18 	  There are five families of 32 bit PowerPC chips supported.
19 	  The most common ones are the desktop and server CPUs (603,
20 	  604, 740, 750, 74xx) CPUs from Freescale and IBM, with their
21 	  embedded 512x/52xx/82xx/83xx/86xx counterparts.
22 	  The other embedded parts, namely 4xx, 8xx and e500
23 	  (85xx) each form a family of their own that is not compatible
24 	  with the others.
25 
26 	  If unsure, select 52xx/6xx/7xx/74xx/82xx/83xx/86xx.
27 
28 config PPC_BOOK3S_32
29 	bool "512x/52xx/6xx/7xx/74xx/82xx/83xx/86xx"
30 	imply PPC_FPU
31 	select PPC_HAVE_PMU_SUPPORT
32 	select HAVE_ARCH_VMAP_STACK
33 
34 config PPC_85xx
35 	bool "Freescale 85xx"
36 	select PPC_E500
37 
38 config PPC_8xx
39 	bool "Freescale 8xx"
40 	select ARCH_SUPPORTS_HUGETLBFS
41 	select FSL_SOC
42 	select PPC_KUEP
43 	select HAVE_ARCH_VMAP_STACK
44 	select HUGETLBFS
45 
46 config 44x
47 	bool "AMCC 44x, 46x or 47x"
48 	select PPC_DCR_NATIVE
49 	select PPC_UDBG_16550
50 	select HAVE_PCI
51 	select PHYS_64BIT
52 	select PPC_KUEP
53 
54 endchoice
55 
56 config PPC_BOOK3S_603
57 	bool "Support for 603 SW loaded TLB"
58 	depends on PPC_BOOK3S_32
59 	default y
60 	help
61 	  Provide support for processors based on the 603 cores. Those
62 	  processors don't have a HASH MMU and provide SW TLB loading.
63 
64 config PPC_BOOK3S_604
65 	bool "Support for 604+ HASH MMU" if PPC_BOOK3S_603
66 	depends on PPC_BOOK3S_32
67 	default y
68 	help
69 	  Provide support for processors not based on the 603 cores.
70 	  Those processors have a HASH MMU.
71 
72 choice
73 	prompt "Processor Type"
74 	depends on PPC64
75 	help
76 	  There are two families of 64 bit PowerPC chips supported.
77 	  The most common ones are the desktop and server CPUs
78 	  (POWER5, 970, POWER5+, POWER6, POWER7, POWER8, POWER9 ...)
79 
80 	  The other are the "embedded" processors compliant with the
81 	  "Book 3E" variant of the architecture
82 
83 config PPC_BOOK3S_64
84 	bool "Server processors"
85 	select PPC_FPU
86 	select PPC_HAVE_PMU_SUPPORT
87 	select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
88 	select ARCH_ENABLE_SPLIT_PMD_PTLOCK
89 	select ARCH_SUPPORTS_HUGETLBFS
90 	select ARCH_SUPPORTS_NUMA_BALANCING
91 	select HAVE_MOVE_PMD
92 	select HAVE_MOVE_PUD
93 	select IRQ_WORK
94 	select PPC_64S_HASH_MMU if !PPC_RADIX_MMU
95 	select KASAN_VMALLOC if KASAN
96 
97 config PPC_BOOK3E_64
98 	bool "Embedded processors"
99 	select PPC_E500
100 	select PPC_E500MC
101 	select PPC_FPU # Make it a choice ?
102 	select PPC_SMP_MUXED_IPI
103 	select PPC_DOORBELL
104 	select ZONE_DMA
105 
106 endchoice
107 
108 config PPC_THP
109        def_bool y
110        depends on PPC_BOOK3S_64
111        depends on PPC_RADIX_MMU || (PPC_64S_HASH_MMU && PAGE_SIZE_64KB)
112        select HAVE_ARCH_TRANSPARENT_HUGEPAGE
113        select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
114        select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
115 
116 choice
117 	prompt "CPU selection"
118 	help
119 	  This will create a kernel which is optimised for a particular CPU.
120 	  The resulting kernel may not run on other CPUs, so use this with care.
121 
122 	  If unsure, select Generic.
123 
124 config POWERPC64_CPU
125 	bool "Generic (POWER5 and PowerPC 970 and above)"
126 	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
127 	select PPC_64S_HASH_MMU
128 
129 config POWERPC64_CPU
130 	bool "Generic (POWER8 and above)"
131 	depends on PPC_BOOK3S_64 && CPU_LITTLE_ENDIAN
132 	select ARCH_HAS_FAST_MULTIPLIER
133 	select PPC_64S_HASH_MMU
134 	select PPC_HAS_LBARX_LHARX
135 
136 config POWERPC_CPU
137 	bool "Generic 32 bits powerpc"
138 	depends on PPC_BOOK3S_32
139 
140 config CELL_CPU
141 	bool "Cell Broadband Engine"
142 	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
143 	depends on !CC_IS_CLANG
144 	select PPC_64S_HASH_MMU
145 
146 config PPC_970_CPU
147 	bool "PowerPC 970 (including PowerPC G5)"
148 	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
149 	select PPC_64S_HASH_MMU
150 
151 config POWER6_CPU
152 	bool "POWER6"
153 	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
154 	select PPC_64S_HASH_MMU
155 
156 config POWER7_CPU
157 	bool "POWER7"
158 	depends on PPC_BOOK3S_64
159 	select ARCH_HAS_FAST_MULTIPLIER
160 	select PPC_64S_HASH_MMU
161 	select PPC_HAS_LBARX_LHARX
162 
163 config POWER8_CPU
164 	bool "POWER8"
165 	depends on PPC_BOOK3S_64
166 	select ARCH_HAS_FAST_MULTIPLIER
167 	select PPC_64S_HASH_MMU
168 	select PPC_HAS_LBARX_LHARX
169 
170 config POWER9_CPU
171 	bool "POWER9"
172 	depends on PPC_BOOK3S_64
173 	select ARCH_HAS_FAST_MULTIPLIER
174 	select PPC_HAS_LBARX_LHARX
175 
176 config POWER10_CPU
177 	bool "POWER10"
178 	depends on PPC_BOOK3S_64
179 	select ARCH_HAS_FAST_MULTIPLIER
180 	select PPC_HAVE_PREFIXED_SUPPORT
181 	select PPC_HAVE_PCREL_SUPPORT
182 
183 config E5500_CPU
184 	bool "Freescale e5500"
185 	depends on PPC64 && PPC_E500
186 
187 config E6500_CPU
188 	bool "Freescale e6500"
189 	depends on PPC64 && PPC_E500
190 	depends on !CC_IS_CLANG
191 	select PPC_HAS_LBARX_LHARX
192 
193 config 440_CPU
194 	bool "440 (44x family)"
195 	depends on 44x
196 
197 config 464_CPU
198 	bool "464 (44x family)"
199 	depends on 44x
200 	depends on !CC_IS_CLANG
201 
202 config 476_CPU
203 	bool "476 (47x family)"
204 	depends on PPC_47x
205 	depends on !CC_IS_CLANG
206 
207 config 860_CPU
208 	bool "8xx family"
209 	depends on PPC_8xx
210 	depends on !CC_IS_CLANG
211 
212 config E300C2_CPU
213 	bool "e300c2 (832x)"
214 	depends on PPC_BOOK3S_32
215 	depends on !CC_IS_CLANG
216 
217 config E300C3_CPU
218 	bool "e300c3 (831x)"
219 	depends on PPC_BOOK3S_32
220 	depends on !CC_IS_CLANG
221 
222 config G4_CPU
223 	bool "G4 (74xx)"
224 	depends on PPC_BOOK3S_32
225 	select ALTIVEC
226 
227 config E500_CPU
228 	bool "e500 (8540)"
229 	depends on PPC_85xx && !PPC_E500MC
230 
231 config E500MC_CPU
232 	bool "e500mc"
233 	depends on PPC_85xx && PPC_E500MC
234 
235 config TOOLCHAIN_DEFAULT_CPU
236 	bool "Rely on the toolchain's implicit default CPU"
237 
238 endchoice
239 
240 config TARGET_CPU_BOOL
241 	bool
242 	default !TOOLCHAIN_DEFAULT_CPU
243 
244 config TARGET_CPU
245 	string
246 	depends on TARGET_CPU_BOOL
247 	default "cell" if CELL_CPU
248 	default "970" if PPC_970_CPU
249 	default "power6" if POWER6_CPU
250 	default "power7" if POWER7_CPU
251 	default "power8" if POWER8_CPU
252 	default "power9" if POWER9_CPU
253 	default "power10" if POWER10_CPU
254 	default "e5500" if E5500_CPU
255 	default "e6500" if E6500_CPU
256 	default "power4" if POWERPC64_CPU && !CPU_LITTLE_ENDIAN
257 	default "power8" if POWERPC64_CPU && CPU_LITTLE_ENDIAN
258 	default "440" if 440_CPU
259 	default "464" if 464_CPU
260 	default "476" if 476_CPU
261 	default "860" if 860_CPU
262 	default "e300c2" if E300C2_CPU
263 	default "e300c3" if E300C3_CPU
264 	default "G4" if G4_CPU
265 	default "8540" if E500_CPU
266 	default "e500mc" if E500MC_CPU
267 	default "powerpc" if POWERPC_CPU
268 
269 config TUNE_CPU
270 	string
271 	depends on POWERPC64_CPU
272 	default "-mtune=power10" if $(cc-option,-mtune=power10)
273 	default "-mtune=power9"  if $(cc-option,-mtune=power9)
274 	default "-mtune=power8"  if $(cc-option,-mtune=power8)
275 
276 config PPC_BOOK3S
277 	def_bool y
278 	depends on PPC_BOOK3S_32 || PPC_BOOK3S_64
279 
280 config PPC_E500
281 	select FSL_EMB_PERFMON
282 	bool
283 	select ARCH_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64
284 	select PPC_SMP_MUXED_IPI
285 	select PPC_DOORBELL
286 	select PPC_KUEP
287 
288 config PPC_E500MC
289 	bool "e500mc Support"
290 	select PPC_FPU
291 	select COMMON_CLK
292 	depends on PPC_E500
293 	help
294 	  This must be enabled for running on e500mc (and derivatives
295 	  such as e5500/e6500), and must be disabled for running on
296 	  e500v1 or e500v2.
297 
298 config PPC_FPU_REGS
299 	bool
300 
301 config PPC_FPU
302 	bool "Support for Floating Point Unit (FPU)" if PPC_MPC832x
303 	default y if PPC64
304 	select PPC_FPU_REGS
305 	help
306 	  This must be enabled to support the Floating Point Unit
307 	  Most 6xx have an FPU but e300c2 core (mpc832x) don't have
308 	  an FPU, so when building an embedded kernel for that target
309 	  you can disable FPU support.
310 
311 	  If unsure say Y.
312 
313 config FSL_EMB_PERFMON
314 	bool "Freescale Embedded Perfmon"
315 	depends on PPC_E500 || PPC_83xx
316 	help
317 	  This is the Performance Monitor support found on the e500 core
318 	  and some e300 cores (c3 and c4).  Select this only if your
319 	  core supports the Embedded Performance Monitor APU
320 
321 config FSL_EMB_PERF_EVENT
322 	bool
323 	depends on FSL_EMB_PERFMON && PERF_EVENTS && !PPC_PERF_CTRS
324 	default y
325 
326 config FSL_EMB_PERF_EVENT_E500
327 	bool
328 	depends on FSL_EMB_PERF_EVENT && PPC_E500
329 	default y
330 
331 config 4xx
332 	bool
333 	depends on 44x
334 	default y
335 
336 config BOOKE
337 	bool
338 	depends on PPC_E500 || 44x
339 	default y
340 
341 config PTE_64BIT
342 	bool
343 	depends on 44x || PPC_E500 || PPC_86xx
344 	default y if PHYS_64BIT
345 
346 config PHYS_64BIT
347 	bool 'Large physical address support' if PPC_E500 || PPC_86xx
348 	depends on (44x || PPC_E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx
349 	select PHYS_ADDR_T_64BIT
350 	help
351 	  This option enables kernel support for larger than 32-bit physical
352 	  addresses.  This feature may not be available on all cores.
353 
354 	  If you have more than 3.5GB of RAM or so, you also need to enable
355 	  SWIOTLB under Kernel Options for this to work.  The actual number
356 	  is platform-dependent.
357 
358 	  If in doubt, say N here.
359 
360 config ALTIVEC
361 	bool "AltiVec Support"
362 	depends on PPC_BOOK3S || (PPC_E500MC && PPC64 && !E5500_CPU)
363 	select PPC_FPU
364 	help
365 	  This option enables kernel support for the Altivec extensions to the
366 	  PowerPC processor. The kernel currently supports saving and restoring
367 	  altivec registers, and turning on the 'altivec enable' bit so user
368 	  processes can execute altivec instructions.
369 
370 	  This option is only usefully if you have a processor that supports
371 	  altivec (G4, otherwise known as 74xx series), but does not have
372 	  any affect on a non-altivec cpu (it does, however add code to the
373 	  kernel).
374 
375 	  If in doubt, say Y here.
376 
377 config VSX
378 	bool "VSX Support"
379 	depends on PPC_BOOK3S_64 && ALTIVEC && PPC_FPU
380 	help
381 
382 	  This option enables kernel support for the Vector Scaler extensions
383 	  to the PowerPC processor. The kernel currently supports saving and
384 	  restoring VSX registers, and turning on the 'VSX enable' bit so user
385 	  processes can execute VSX instructions.
386 
387 	  This option is only useful if you have a processor that supports
388 	  VSX (P7 and above), but does not have any affect on a non-VSX
389 	  CPUs (it does, however add code to the kernel).
390 
391 	  If in doubt, say Y here.
392 
393 config SPE_POSSIBLE
394 	def_bool y
395 	depends on PPC_E500 && !PPC_E500MC
396 
397 config SPE
398 	bool "SPE Support"
399 	depends on SPE_POSSIBLE
400 	default y
401 	help
402 	  This option enables kernel support for the Signal Processing
403 	  Extensions (SPE) to the PowerPC processor. The kernel currently
404 	  supports saving and restoring SPE registers, and turning on the
405 	  'spe enable' bit so user processes can execute SPE instructions.
406 
407 	  This option is only useful if you have a processor that supports
408 	  SPE (e500, otherwise known as 85xx series), but does not have any
409 	  effect on a non-spe cpu (it does, however add code to the kernel).
410 
411 	  If in doubt, say Y here.
412 
413 config PPC_64S_HASH_MMU
414 	bool "Hash MMU Support"
415 	depends on PPC_BOOK3S_64
416 	default y
417 	help
418 	  Enable support for the Power ISA Hash style MMU. This is implemented
419 	  by all IBM Power and other 64-bit Book3S CPUs before ISA v3.0. The
420 	  OpenPOWER ISA does not mandate the hash MMU and some CPUs do not
421 	  implement it (e.g., Microwatt).
422 
423 	  Note that POWER9 PowerVM platforms only support the hash
424 	  MMU. From POWER10 radix is also supported by PowerVM.
425 
426 	  If you're unsure, say Y.
427 
428 config PPC_RADIX_MMU
429 	bool "Radix MMU Support"
430 	depends on PPC_BOOK3S_64
431 	select ARCH_HAS_GIGANTIC_PAGE
432 	default y
433 	help
434 	  Enable support for the Power ISA 3.0 Radix style MMU. Currently this
435 	  is only implemented by IBM Power9 CPUs, if you don't have one of them
436 	  you can probably disable this.
437 
438 config PPC_RADIX_MMU_DEFAULT
439 	bool "Default to using the Radix MMU when possible" if PPC_64S_HASH_MMU
440 	depends on PPC_BOOK3S_64
441 	depends on PPC_RADIX_MMU
442 	default y
443 	help
444 	  When the hardware supports the Radix MMU, default to using it unless
445 	  "disable_radix[=yes]" is specified on the kernel command line.
446 
447 	  If this option is disabled, the Hash MMU will be used by default,
448 	  unless "disable_radix=no" is specified on the kernel command line.
449 
450 	  If you're unsure, say Y.
451 
452 config PPC_KERNEL_PREFIXED
453 	depends on PPC_HAVE_PREFIXED_SUPPORT
454 	depends on CC_HAS_PREFIXED
455 	default n
456 	bool "Build Kernel with Prefixed Instructions"
457 	help
458 	  POWER10 and later CPUs support prefixed instructions, 8 byte
459 	  instructions that include large immediate, pc relative addressing,
460 	  and various floating point, vector, MMA.
461 
462 	  This option builds the kernel with prefixed instructions, and
463 	  allows a pc relative addressing option to be selected.
464 
465 	  Kernel support for prefixed instructions in applications and guests
466 	  is not affected by this option.
467 
468 config PPC_KERNEL_PCREL
469 	depends on PPC_HAVE_PCREL_SUPPORT
470 	depends on PPC_HAVE_PREFIXED_SUPPORT
471 	depends on CC_HAS_PCREL
472 	default n
473 	select PPC_KERNEL_PREFIXED
474 	bool "Build Kernel with PC-Relative addressing model"
475 	help
476 	  POWER10 and later CPUs support pc relative addressing. Recent
477 	  compilers have support for an ELF ABI extension for a pc relative
478 	  ABI.
479 
480 	  This option builds the kernel with the pc relative ABI model.
481 
482 config PPC_KUEP
483 	bool "Kernel Userspace Execution Prevention"
484 	default y
485 	help
486 	  Enable support for Kernel Userspace Execution Prevention (KUEP)
487 
488 	  If you're unsure, say Y.
489 
490 config PPC_KUAP
491 	bool "Kernel Userspace Access Protection"
492 	default y
493 	help
494 	  Enable support for Kernel Userspace Access Protection (KUAP)
495 
496 	  If you're unsure, say Y.
497 
498 config PPC_KUAP_DEBUG
499 	bool "Extra debugging for Kernel Userspace Access Protection"
500 	depends on PPC_KUAP
501 	help
502 	  Add extra debugging for Kernel Userspace Access Protection (KUAP)
503 	  If you're unsure, say N.
504 
505 config PPC_PKEY
506 	def_bool y
507 	depends on PPC_BOOK3S_64
508 	depends on PPC_MEM_KEYS || PPC_KUAP || PPC_KUEP
509 
510 
511 config PPC_MMU_NOHASH
512 	def_bool y
513 	depends on !PPC_BOOK3S
514 
515 config PPC_HAVE_PMU_SUPPORT
516 	bool
517 
518 config PPC_HAVE_PREFIXED_SUPPORT
519 	bool
520 
521 config PPC_HAVE_PCREL_SUPPORT
522 	bool
523 
524 config PMU_SYSFS
525 	bool "Create PMU SPRs sysfs file"
526 	default n
527 	help
528 	  This option enables sysfs file creation for PMU SPRs like MMCR* and PMC*.
529 
530 config PPC_PERF_CTRS
531 	def_bool y
532 	depends on PERF_EVENTS && PPC_HAVE_PMU_SUPPORT
533 	help
534 	 This enables the powerpc-specific perf_event back-end.
535 
536 config FORCE_SMP
537 	# Allow platforms to force SMP=y by selecting this
538 	bool
539 	select SMP
540 
541 config SMP
542 	depends on PPC_BOOK3S || PPC_E500 || PPC_47x
543 	select GENERIC_IRQ_MIGRATION
544 	bool "Symmetric multi-processing support" if !FORCE_SMP
545 	help
546 	  This enables support for systems with more than one CPU. If you have
547 	  a system with only one CPU, say N. If you have a system with more
548 	  than one CPU, say Y.  Note that the kernel does not currently
549 	  support SMP machines with 603/603e/603ev or PPC750 ("G3") processors
550 	  since they have inadequate hardware support for multiprocessor
551 	  operation.
552 
553 	  If you say N here, the kernel will run on single and multiprocessor
554 	  machines, but will use only one CPU of a multiprocessor machine. If
555 	  you say Y here, the kernel will run on single-processor machines.
556 	  On a single-processor machine, the kernel will run faster if you say
557 	  N here.
558 
559 	  If you don't know what to do here, say N.
560 
561 config NR_CPUS
562 	int "Maximum number of CPUs (2-8192)" if SMP
563 	range 2 8192 if SMP
564 	default "1" if !SMP
565 	default "32" if PPC64
566 	default "4"
567 
568 config NOT_COHERENT_CACHE
569 	bool
570 	depends on 44x || PPC_8xx || PPC_MPC512x || \
571 		GAMECUBE_COMMON || AMIGAONE
572 	select ARCH_HAS_DMA_PREP_COHERENT
573 	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
574 	select ARCH_HAS_SYNC_DMA_FOR_CPU
575 	select DMA_DIRECT_REMAP
576 	default n if PPC_47x
577 	default y
578 
579 config CHECK_CACHE_COHERENCY
580 	bool
581 
582 config PPC_DOORBELL
583 	bool
584 
585 endmenu
586 
587 config VDSO32
588 	def_bool y
589 	depends on PPC32 || COMPAT
590 	help
591 	  This symbol controls whether we build the 32-bit VDSO. We obviously
592 	  want to do that if we're building a 32-bit kernel. If we're building
593 	  a 64-bit kernel then we only want a 32-bit VDSO if we're also enabling
594 	  COMPAT.
595 
596 choice
597 	prompt "Endianness selection"
598 	default CPU_BIG_ENDIAN
599 	help
600 	  This option selects whether a big endian or little endian kernel will
601 	  be built.
602 
603 config CPU_BIG_ENDIAN
604 	bool "Build big endian kernel"
605 	help
606 	  Build a big endian kernel.
607 
608 	  If unsure, select this option.
609 
610 config CPU_LITTLE_ENDIAN
611 	bool "Build little endian kernel"
612 	depends on PPC_BOOK3S_64
613 	select PPC64_BOOT_WRAPPER
614 	help
615 	  Build a little endian kernel.
616 
617 	  Note that if cross compiling a little endian kernel,
618 	  CROSS_COMPILE must point to a toolchain capable of targeting
619 	  little endian powerpc.
620 
621 endchoice
622 
623 config PPC64_ELF_ABI_V1
624 	def_bool PPC64 && (CPU_BIG_ENDIAN && !PPC64_BIG_ENDIAN_ELF_ABI_V2)
625 
626 config PPC64_ELF_ABI_V2
627 	def_bool PPC64 && !PPC64_ELF_ABI_V1
628 
629 config PPC64_BOOT_WRAPPER
630 	def_bool n
631 	depends on CPU_LITTLE_ENDIAN
632