# SPDX-License-Identifier: GPL-2.0
config PPC32
	bool
	default y if !PPC64
	select KASAN_VMALLOC if KASAN && MODULES

config PPC64
	bool "64-bit kernel"
	select ZLIB_DEFLATE
	help
	  This option selects whether a 32-bit or a 64-bit kernel
	  will be built.

menu "Processor support"
choice
	prompt "Processor Type"
	depends on PPC32
	help
	  There are five families of 32 bit PowerPC chips supported.
	  The most common ones are the desktop and server CPUs (603,
	  604, 740, 750, 74xx) CPUs from Freescale and IBM, with their
	  embedded 512x/52xx/82xx/83xx/86xx counterparts.
	  The other embedded parts, namely 4xx, 8xx and e500
	  (85xx) each form a family of their own that is not compatible
	  with the others.

	  If unsure, select 52xx/6xx/7xx/74xx/82xx/83xx/86xx.

config PPC_BOOK3S_32
	bool "512x/52xx/6xx/7xx/74xx/82xx/83xx/86xx"
	imply PPC_FPU
	select PPC_HAVE_PMU_SUPPORT
	select HAVE_ARCH_VMAP_STACK

config PPC_85xx
	bool "Freescale 85xx"
	select E500

config PPC_8xx
	bool "Freescale 8xx"
	select ARCH_SUPPORTS_HUGETLBFS
	select FSL_SOC
	select PPC_KUEP
	select HAVE_ARCH_VMAP_STACK
	select HUGETLBFS

config 40x
	bool "AMCC 40x"
	select PPC_DCR_NATIVE
	select PPC_UDBG_16550
	select 4xx_SOC
	select HAVE_PCI
	select PPC_KUEP if PPC_KUAP

config 44x
	bool "AMCC 44x, 46x or 47x"
	select PPC_DCR_NATIVE
	select PPC_UDBG_16550
	select 4xx_SOC
	select HAVE_PCI
	select PHYS_64BIT
	select PPC_KUEP

endchoice

config PPC_BOOK3S_603
	bool "Support for 603 SW loaded TLB"
	depends on PPC_BOOK3S_32
	default y
	help
	  Provide support for processors based on the 603 cores. Those
	  processors don't have a HASH MMU and provide SW TLB loading.

config PPC_BOOK3S_604
	bool "Support for 604+ HASH MMU" if PPC_BOOK3S_603
	depends on PPC_BOOK3S_32
	default y
	help
	  Provide support for processors not based on the 603 cores.
	  Those processors have a HASH MMU.

choice
	prompt "Processor Type"
	depends on PPC64
	help
	  There are two families of 64 bit PowerPC chips supported.
	  The most common ones are the desktop and server CPUs
	  (POWER5, 970, POWER5+, POWER6, POWER7, POWER8, POWER9 ...)

	  The other are the "embedded" processors compliant with the
	  "Book 3E" variant of the architecture

config PPC_BOOK3S_64
	bool "Server processors"
	select PPC_FPU
	select PPC_HAVE_PMU_SUPPORT
	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
	select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
	select ARCH_ENABLE_SPLIT_PMD_PTLOCK
	select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
	select ARCH_SUPPORTS_HUGETLBFS
	select ARCH_SUPPORTS_NUMA_BALANCING
	select HAVE_MOVE_PMD
	select HAVE_MOVE_PUD
	select IRQ_WORK
	select PPC_64S_HASH_MMU if !PPC_RADIX_MMU

config PPC_BOOK3E_64
	bool "Embedded processors"
	select PPC_FSL_BOOK3E
	select PPC_FPU # Make it a choice ?
	select PPC_SMP_MUXED_IPI
	select PPC_DOORBELL
	select ZONE_DMA

endchoice

choice
	prompt "CPU selection"
	default GENERIC_CPU
	help
	  This will create a kernel which is optimised for a particular CPU.
	  The resulting kernel may not run on other CPUs, so use this with care.

	  If unsure, select Generic.

config GENERIC_CPU
	bool "Generic (POWER4 and above)"
	depends on PPC64 && !CPU_LITTLE_ENDIAN
	select PPC_64S_HASH_MMU if PPC_BOOK3S_64

config GENERIC_CPU
	bool "Generic (POWER8 and above)"
	depends on PPC64 && CPU_LITTLE_ENDIAN
	select ARCH_HAS_FAST_MULTIPLIER
	select PPC_64S_HASH_MMU

config GENERIC_CPU
	bool "Generic 32 bits powerpc"
	depends on PPC32 && !PPC_8xx

config CELL_CPU
	bool "Cell Broadband Engine"
	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
	select PPC_64S_HASH_MMU

config POWER5_CPU
	bool "POWER5"
	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
	select PPC_64S_HASH_MMU

config POWER6_CPU
	bool "POWER6"
	depends on PPC_BOOK3S_64 && !CPU_LITTLE_ENDIAN
	select PPC_64S_HASH_MMU

config POWER7_CPU
	bool "POWER7"
	depends on PPC_BOOK3S_64
	select ARCH_HAS_FAST_MULTIPLIER
	select PPC_64S_HASH_MMU

config POWER8_CPU
	bool "POWER8"
	depends on PPC_BOOK3S_64
	select ARCH_HAS_FAST_MULTIPLIER
	select PPC_64S_HASH_MMU

config POWER9_CPU
	bool "POWER9"
	depends on PPC_BOOK3S_64
	select ARCH_HAS_FAST_MULTIPLIER

config E5500_CPU
	bool "Freescale e5500"
	depends on E500

config E6500_CPU
	bool "Freescale e6500"
	depends on E500

config 860_CPU
	bool "8xx family"
	depends on PPC_8xx

config E300C2_CPU
	bool "e300c2 (832x)"
	depends on PPC_BOOK3S_32

config E300C3_CPU
	bool "e300c3 (831x)"
	depends on PPC_BOOK3S_32

config G4_CPU
	bool "G4 (74xx)"
	depends on PPC_BOOK3S_32
	select ALTIVEC

endchoice

config TARGET_CPU_BOOL
	bool
	default !GENERIC_CPU

config TARGET_CPU
	string
	depends on TARGET_CPU_BOOL
	default "cell" if CELL_CPU
	default "power5" if POWER5_CPU
	default "power6" if POWER6_CPU
	default "power7" if POWER7_CPU
	default "power8" if POWER8_CPU
	default "power9" if POWER9_CPU
	default "860" if 860_CPU
	default "e300c2" if E300C2_CPU
	default "e300c3" if E300C3_CPU
	default "G4" if G4_CPU

config PPC_BOOK3S
	def_bool y
	depends on PPC_BOOK3S_32 || PPC_BOOK3S_64

config PPC_BOOK3E
	def_bool y
	depends on PPC_BOOK3E_64

config E500
	select FSL_EMB_PERFMON
	select PPC_FSL_BOOK3E
	bool

config PPC_E500MC
	bool "e500mc Support"
	select PPC_FPU
	select COMMON_CLK
	depends on E500
	help
	  This must be enabled for running on e500mc (and derivatives
	  such as e5500/e6500), and must be disabled for running on
	  e500v1 or e500v2.

config PPC_FPU_REGS
	bool

config PPC_FPU
	bool "Support for Floating Point Unit (FPU)" if PPC_MPC832x
	default y if PPC64
	select PPC_FPU_REGS
	help
	  This must be enabled to support the Floating Point Unit
	  Most 6xx have an FPU but e300c2 core (mpc832x) don't have
	  an FPU, so when building an embedded kernel for that target
	  you can disable FPU support.

	  If unsure say Y.

config FSL_EMB_PERFMON
	bool "Freescale Embedded Perfmon"
	depends on E500 || PPC_83xx
	help
	  This is the Performance Monitor support found on the e500 core
	  and some e300 cores (c3 and c4).  Select this only if your
	  core supports the Embedded Performance Monitor APU

config FSL_EMB_PERF_EVENT
	bool
	depends on FSL_EMB_PERFMON && PERF_EVENTS && !PPC_PERF_CTRS
	default y

config FSL_EMB_PERF_EVENT_E500
	bool
	depends on FSL_EMB_PERF_EVENT && E500
	default y

config 4xx
	bool
	depends on 40x || 44x
	default y

config BOOKE
	bool
	depends on E500 || 44x || PPC_BOOK3E
	default y

config BOOKE_OR_40x
	bool
	depends on BOOKE || 40x
	default y

config FSL_BOOKE
	bool
	depends on E500 && PPC32
	default y

# this is for common code between PPC32 & PPC64 FSL BOOKE
config PPC_FSL_BOOK3E
	bool
	select ARCH_SUPPORTS_HUGETLBFS if PHYS_64BIT || PPC64
	imply FSL_EMB_PERFMON
	select PPC_SMP_MUXED_IPI
	select PPC_DOORBELL
	select PPC_KUEP
	default y if FSL_BOOKE

config PTE_64BIT
	bool
	depends on 44x || E500 || PPC_86xx
	default y if PHYS_64BIT

config PHYS_64BIT
	bool 'Large physical address support' if E500 || PPC_86xx
	depends on (44x || E500 || PPC_86xx) && !PPC_83xx && !PPC_82xx
	select PHYS_ADDR_T_64BIT
	help
	  This option enables kernel support for larger than 32-bit physical
	  addresses.  This feature may not be available on all cores.

	  If you have more than 3.5GB of RAM or so, you also need to enable
	  SWIOTLB under Kernel Options for this to work.  The actual number
	  is platform-dependent.

	  If in doubt, say N here.

config ALTIVEC
	bool "AltiVec Support"
	depends on PPC_BOOK3S_32 || PPC_BOOK3S_64 || (PPC_E500MC && PPC64)
	select PPC_FPU
	help
	  This option enables kernel support for the Altivec extensions to the
	  PowerPC processor. The kernel currently supports saving and restoring
	  altivec registers, and turning on the 'altivec enable' bit so user
	  processes can execute altivec instructions.

	  This option is only usefully if you have a processor that supports
	  altivec (G4, otherwise known as 74xx series), but does not have
	  any affect on a non-altivec cpu (it does, however add code to the
	  kernel).

	  If in doubt, say Y here.

config VSX
	bool "VSX Support"
	depends on PPC_BOOK3S_64 && ALTIVEC && PPC_FPU
	help

	  This option enables kernel support for the Vector Scaler extensions
	  to the PowerPC processor. The kernel currently supports saving and
	  restoring VSX registers, and turning on the 'VSX enable' bit so user
	  processes can execute VSX instructions.

	  This option is only useful if you have a processor that supports
	  VSX (P7 and above), but does not have any affect on a non-VSX
	  CPUs (it does, however add code to the kernel).

	  If in doubt, say Y here.

config SPE_POSSIBLE
	def_bool y
	depends on E500 && !PPC_E500MC

config SPE
	bool "SPE Support"
	depends on SPE_POSSIBLE
	default y
	help
	  This option enables kernel support for the Signal Processing
	  Extensions (SPE) to the PowerPC processor. The kernel currently
	  supports saving and restoring SPE registers, and turning on the
	  'spe enable' bit so user processes can execute SPE instructions.

	  This option is only useful if you have a processor that supports
	  SPE (e500, otherwise known as 85xx series), but does not have any
	  effect on a non-spe cpu (it does, however add code to the kernel).

	  If in doubt, say Y here.

config PPC_64S_HASH_MMU
	bool "Hash MMU Support"
	depends on PPC_BOOK3S_64
	select PPC_MM_SLICES
	default y
	help
	  Enable support for the Power ISA Hash style MMU. This is implemented
	  by all IBM Power and other 64-bit Book3S CPUs before ISA v3.0. The
	  OpenPOWER ISA does not mandate the hash MMU and some CPUs do not
	  implement it (e.g., Microwatt).

	  Note that POWER9 PowerVM platforms only support the hash
	  MMU. From POWER10 radix is also supported by PowerVM.

	  If you're unsure, say Y.

config PPC_RADIX_MMU
	bool "Radix MMU Support"
	depends on PPC_BOOK3S_64
	select ARCH_HAS_GIGANTIC_PAGE
	default y
	help
	  Enable support for the Power ISA 3.0 Radix style MMU. Currently this
	  is only implemented by IBM Power9 CPUs, if you don't have one of them
	  you can probably disable this.

config PPC_RADIX_MMU_DEFAULT
	bool "Default to using the Radix MMU when possible" if PPC_64S_HASH_MMU
	depends on PPC_BOOK3S_64
	depends on PPC_RADIX_MMU
	default y
	help
	  When the hardware supports the Radix MMU, default to using it unless
	  "disable_radix[=yes]" is specified on the kernel command line.

	  If this option is disabled, the Hash MMU will be used by default,
	  unless "disable_radix=no" is specified on the kernel command line.

	  If you're unsure, say Y.

config PPC_KUEP
	bool "Kernel Userspace Execution Prevention" if !40x
	default y if !40x
	help
	  Enable support for Kernel Userspace Execution Prevention (KUEP)

	  If you're unsure, say Y.

config PPC_KUAP
	bool "Kernel Userspace Access Protection"
	default y
	help
	  Enable support for Kernel Userspace Access Protection (KUAP)

	  If you're unsure, say Y.

config PPC_KUAP_DEBUG
	bool "Extra debugging for Kernel Userspace Access Protection"
	depends on PPC_KUAP
	help
	  Add extra debugging for Kernel Userspace Access Protection (KUAP)
	  If you're unsure, say N.

config PPC_PKEY
	def_bool y
	depends on PPC_BOOK3S_64
	depends on PPC_MEM_KEYS || PPC_KUAP || PPC_KUEP


config PPC_MMU_NOHASH
	def_bool y
	depends on !PPC_BOOK3S

config PPC_BOOK3E_MMU
	def_bool y
	depends on FSL_BOOKE || PPC_BOOK3E

config PPC_MM_SLICES
	bool

config PPC_HAVE_PMU_SUPPORT
	bool

config PMU_SYSFS
	bool "Create PMU SPRs sysfs file"
	default n
	help
	  This option enables sysfs file creation for PMU SPRs like MMCR* and PMC*.

config PPC_PERF_CTRS
	def_bool y
	depends on PERF_EVENTS && PPC_HAVE_PMU_SUPPORT
	help
	 This enables the powerpc-specific perf_event back-end.

config FORCE_SMP
	# Allow platforms to force SMP=y by selecting this
	bool
	select SMP

config SMP
	depends on PPC_BOOK3S || PPC_BOOK3E || FSL_BOOKE || PPC_47x
	select GENERIC_IRQ_MIGRATION
	bool "Symmetric multi-processing support" if !FORCE_SMP
	help
	  This enables support for systems with more than one CPU. If you have
	  a system with only one CPU, say N. If you have a system with more
	  than one CPU, say Y.  Note that the kernel does not currently
	  support SMP machines with 603/603e/603ev or PPC750 ("G3") processors
	  since they have inadequate hardware support for multiprocessor
	  operation.

	  If you say N here, the kernel will run on single and multiprocessor
	  machines, but will use only one CPU of a multiprocessor machine. If
	  you say Y here, the kernel will run on single-processor machines.
	  On a single-processor machine, the kernel will run faster if you say
	  N here.

	  If you don't know what to do here, say N.

config NR_CPUS
	int "Maximum number of CPUs (2-8192)" if SMP
	range 2 8192 if SMP
	default "1" if !SMP
	default "32" if PPC64
	default "4"

config NOT_COHERENT_CACHE
	bool
	depends on 4xx || PPC_8xx || PPC_MPC512x || \
		GAMECUBE_COMMON || AMIGAONE
	select ARCH_HAS_DMA_PREP_COHERENT
	select ARCH_HAS_SYNC_DMA_FOR_DEVICE
	select ARCH_HAS_SYNC_DMA_FOR_CPU
	select DMA_DIRECT_REMAP
	default n if PPC_47x
	default y

config CHECK_CACHE_COHERENCY
	bool

config PPC_DOORBELL
	bool

endmenu

config VDSO32
	def_bool y
	depends on PPC32 || COMPAT
	help
	  This symbol controls whether we build the 32-bit VDSO. We obviously
	  want to do that if we're building a 32-bit kernel. If we're building
	  a 64-bit kernel then we only want a 32-bit VDSO if we're also enabling
	  COMPAT.

choice
	prompt "Endianness selection"
	default CPU_BIG_ENDIAN
	help
	  This option selects whether a big endian or little endian kernel will
	  be built.

config CPU_BIG_ENDIAN
	bool "Build big endian kernel"
	help
	  Build a big endian kernel.

	  If unsure, select this option.

config CPU_LITTLE_ENDIAN
	bool "Build little endian kernel"
	depends on PPC_BOOK3S_64
	select PPC64_BOOT_WRAPPER
	help
	  Build a little endian kernel.

	  Note that if cross compiling a little endian kernel,
	  CROSS_COMPILE must point to a toolchain capable of targeting
	  little endian powerpc.

endchoice

config PPC64_BOOT_WRAPPER
	def_bool n
	depends on CPU_LITTLE_ENDIAN
