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