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