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