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