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