# SPDX-License-Identifier: GPL-2.0
source "arch/powerpc/platforms/Kconfig.cputype"

config PPC32
	bool
	default y if !PPC64

config 32BIT
	bool
	default y if PPC32

config 64BIT
	bool
	default y if PPC64

config MMU
	bool
	default y

config ARCH_MMAP_RND_BITS_MAX
	# On Book3S 64, the default virtual address space for 64-bit processes
	# is 2^47 (128TB). As a maximum, allow randomisation to consume up to
	# 32T of address space (2^45), which should ensure a reasonable gap
	# between bottom-up and top-down allocations for applications that
	# consume "normal" amounts of address space. Book3S 64 only supports 64K
	# and 4K page sizes.
	default 29 if PPC_BOOK3S_64 && PPC_64K_PAGES # 29 = 45 (32T) - 16 (64K)
	default 33 if PPC_BOOK3S_64		     # 33 = 45 (32T) - 12 (4K)
	#
	# On all other 64-bit platforms (currently only Book3E), the virtual
	# address space is 2^46 (64TB). Allow randomisation to consume up to 16T
	# of address space (2^44). Only 4K page sizes are supported.
	default 32 if 64BIT	# 32 = 44 (16T) - 12 (4K)
	#
	# For 32-bit, use the compat values, as they're the same.
	default ARCH_MMAP_RND_COMPAT_BITS_MAX

config ARCH_MMAP_RND_BITS_MIN
	# Allow randomisation to consume up to 1GB of address space (2^30).
	default 14 if 64BIT && PPC_64K_PAGES	# 14 = 30 (1GB) - 16 (64K)
	default 18 if 64BIT			# 18 = 30 (1GB) - 12 (4K)
	#
	# For 32-bit, use the compat values, as they're the same.
	default ARCH_MMAP_RND_COMPAT_BITS_MIN

config ARCH_MMAP_RND_COMPAT_BITS_MAX
	# Total virtual address space for 32-bit processes is 2^31 (2GB).
	# Allow randomisation to consume up to 512MB of address space (2^29).
	default 11 if PPC_256K_PAGES	# 11 = 29 (512MB) - 18 (256K)
	default 13 if PPC_64K_PAGES	# 13 = 29 (512MB) - 16 (64K)
	default 15 if PPC_16K_PAGES 	# 15 = 29 (512MB) - 14 (16K)
	default 17			# 17 = 29 (512MB) - 12 (4K)

config ARCH_MMAP_RND_COMPAT_BITS_MIN
	# Total virtual address space for 32-bit processes is 2^31 (2GB).
	# Allow randomisation to consume up to 8MB of address space (2^23).
	default 5 if PPC_256K_PAGES	#  5 = 23 (8MB) - 18 (256K)
	default 7 if PPC_64K_PAGES	#  7 = 23 (8MB) - 16 (64K)
	default 9 if PPC_16K_PAGES	#  9 = 23 (8MB) - 14 (16K)
	default 11			# 11 = 23 (8MB) - 12 (4K)

config HAVE_SETUP_PER_CPU_AREA
	def_bool PPC64

config NEED_PER_CPU_EMBED_FIRST_CHUNK
	def_bool PPC64

config NR_IRQS
	int "Number of virtual interrupt numbers"
	range 32 32768
	default "512"
	help
	  This defines the number of virtual interrupt numbers the kernel
	  can manage. Virtual interrupt numbers are what you see in
	  /proc/interrupts. If you configure your system to have too few,
	  drivers will fail to load or worse - handle with care.

config NMI_IPI
	bool
	depends on SMP && (DEBUGGER || KEXEC_CORE || HARDLOCKUP_DETECTOR)
	default y

config PPC_WATCHDOG
	bool
	depends on HARDLOCKUP_DETECTOR
	depends on HAVE_HARDLOCKUP_DETECTOR_ARCH
	default y
	help
	  This is a placeholder when the powerpc hardlockup detector
	  watchdog is selected (arch/powerpc/kernel/watchdog.c). It is
	  seleted via the generic lockup detector menu which is why we
	  have no standalone config option for it here.

config STACKTRACE_SUPPORT
	bool
	default y

config TRACE_IRQFLAGS_SUPPORT
	bool
	default y

config LOCKDEP_SUPPORT
	bool
	default y

config RWSEM_GENERIC_SPINLOCK
	bool

config RWSEM_XCHGADD_ALGORITHM
	bool
	default y

config GENERIC_LOCKBREAK
	bool
	default y
	depends on SMP && PREEMPT

config GENERIC_HWEIGHT
	bool
	default y

config ARCH_HAS_DMA_SET_COHERENT_MASK
        bool

config PPC
	bool
	default y
	#
	# Please keep this list sorted alphabetically.
	#
	select ARCH_HAS_DEVMEM_IS_ALLOWED
	select ARCH_HAS_DMA_SET_COHERENT_MASK
	select ARCH_HAS_ELF_RANDOMIZE
	select ARCH_HAS_FORTIFY_SOURCE
	select ARCH_HAS_GCOV_PROFILE_ALL
	select ARCH_HAS_PHYS_TO_DMA
	select ARCH_HAS_PMEM_API                if PPC64
	select ARCH_HAS_PTE_SPECIAL
	select ARCH_HAS_MEMBARRIER_CALLBACKS
	select ARCH_HAS_SCALED_CPUTIME		if VIRT_CPU_ACCOUNTING_NATIVE
	select ARCH_HAS_SG_CHAIN
	select ARCH_HAS_STRICT_KERNEL_RWX	if (PPC32 && !HIBERNATION)
	select ARCH_HAS_TICK_BROADCAST		if GENERIC_CLOCKEVENTS_BROADCAST
	select ARCH_HAS_UACCESS_FLUSHCACHE	if PPC64
	select ARCH_HAS_UBSAN_SANITIZE_ALL
	select ARCH_HAS_ZONE_DEVICE		if PPC_BOOK3S_64
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select ARCH_MIGHT_HAVE_PC_PARPORT
	select ARCH_MIGHT_HAVE_PC_SERIO
	select ARCH_OPTIONAL_KERNEL_RWX		if ARCH_HAS_STRICT_KERNEL_RWX
	select ARCH_SUPPORTS_ATOMIC_RMW
	select ARCH_USE_BUILTIN_BSWAP
	select ARCH_USE_CMPXCHG_LOCKREF		if PPC64
	select ARCH_WANT_IPC_PARSE_VERSION
	select ARCH_WEAK_RELEASE_ACQUIRE
	select BINFMT_ELF
	select BUILDTIME_EXTABLE_SORT
	select CLONE_BACKWARDS
	select DCACHE_WORD_ACCESS		if PPC64 && CPU_LITTLE_ENDIAN
	select DYNAMIC_FTRACE			if FUNCTION_TRACER
	select EDAC_ATOMIC_SCRUB
	select EDAC_SUPPORT
	select GENERIC_ATOMIC64			if PPC32
	select GENERIC_CLOCKEVENTS
	select GENERIC_CLOCKEVENTS_BROADCAST	if SMP
	select GENERIC_CMOS_UPDATE
	select GENERIC_CPU_AUTOPROBE
	select GENERIC_CPU_VULNERABILITIES	if PPC_BARRIER_NOSPEC
	select GENERIC_IRQ_SHOW
	select GENERIC_IRQ_SHOW_LEVEL
	select GENERIC_SMP_IDLE_THREAD
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNLEN_USER
	select GENERIC_TIME_VSYSCALL
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_ARCH_JUMP_LABEL
	select HAVE_ARCH_KGDB
	select HAVE_ARCH_MMAP_RND_BITS
	select HAVE_ARCH_MMAP_RND_COMPAT_BITS	if COMPAT
	select HAVE_ARCH_SECCOMP_FILTER
	select HAVE_ARCH_TRACEHOOK
	select HAVE_CBPF_JIT			if !PPC64
	select HAVE_CONTEXT_TRACKING		if PPC64
	select HAVE_DEBUG_KMEMLEAK
	select HAVE_DEBUG_STACKOVERFLOW
	select HAVE_DYNAMIC_FTRACE
	select HAVE_DYNAMIC_FTRACE_WITH_REGS	if MPROFILE_KERNEL
	select HAVE_EBPF_JIT			if PPC64
	select HAVE_EFFICIENT_UNALIGNED_ACCESS	if !(CPU_LITTLE_ENDIAN && POWER7_CPU)
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FUNCTION_TRACER
	select HAVE_GCC_PLUGINS			if GCC_VERSION >= 50200   # plugin support on gcc <= 5.1 is buggy on PPC
	select HAVE_GENERIC_GUP
	select HAVE_HW_BREAKPOINT		if PERF_EVENTS && (PPC_BOOK3S || PPC_8xx)
	select HAVE_IDE
	select HAVE_IOREMAP_PROT
	select HAVE_IRQ_EXIT_ON_IRQ_STACK
	select HAVE_KERNEL_GZIP
	select HAVE_KERNEL_XZ			if PPC_BOOK3S
	select HAVE_KPROBES
	select HAVE_KPROBES_ON_FTRACE
	select HAVE_KRETPROBES
	select HAVE_LD_DEAD_CODE_DATA_ELIMINATION
	select HAVE_LIVEPATCH			if HAVE_DYNAMIC_FTRACE_WITH_REGS
	select HAVE_MEMBLOCK
	select HAVE_MEMBLOCK_NODE_MAP
	select HAVE_MOD_ARCH_SPECIFIC
	select HAVE_NMI				if PERF_EVENTS || (PPC64 && PPC_BOOK3S)
	select HAVE_HARDLOCKUP_DETECTOR_ARCH	if (PPC64 && PPC_BOOK3S)
	select HAVE_OPROFILE
	select HAVE_OPTPROBES			if PPC64
	select HAVE_PERF_EVENTS
	select HAVE_PERF_EVENTS_NMI		if PPC64
	select HAVE_HARDLOCKUP_DETECTOR_PERF	if PERF_EVENTS && HAVE_PERF_EVENTS_NMI && !HAVE_HARDLOCKUP_DETECTOR_ARCH
	select HAVE_PERF_REGS
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_RCU_TABLE_FREE		if SMP
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_RELIABLE_STACKTRACE		if PPC64 && CPU_LITTLE_ENDIAN
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_VIRT_CPU_ACCOUNTING
	select HAVE_IRQ_TIME_ACCOUNTING
	select HAVE_RSEQ
	select IOMMU_HELPER			if PPC64
	select IRQ_DOMAIN
	select IRQ_FORCED_THREADING
	select MODULES_USE_ELF_RELA
	select NEED_DMA_MAP_STATE		if PPC64 || NOT_COHERENT_CACHE
	select NEED_SG_DMA_LENGTH
	select NO_BOOTMEM
	select OF
	select OF_DMA_DEFAULT_COHERENT		if !NOT_COHERENT_CACHE
	select OF_EARLY_FLATTREE
	select OF_RESERVED_MEM
	select OLD_SIGACTION			if PPC32
	select OLD_SIGSUSPEND
	select RTC_LIB
	select SPARSE_IRQ
	select SYSCTL_EXCEPTION_TRACE
	select VIRT_TO_BUS			if !PPC64
	#
	# Please keep this list sorted alphabetically.
	#

config PPC_BARRIER_NOSPEC
    bool
    default y
    depends on PPC_BOOK3S_64 || PPC_FSL_BOOK3E

config GENERIC_CSUM
	def_bool n

config EARLY_PRINTK
	bool
	default y

config PANIC_TIMEOUT
	int
	default 180

config COMPAT
	bool
	default y if PPC64
	select COMPAT_BINFMT_ELF
	select ARCH_WANT_OLD_COMPAT_IPC
	select COMPAT_OLD_SIGACTION

config SYSVIPC_COMPAT
	bool
	depends on COMPAT && SYSVIPC
	default y

# All PPC32s use generic nvram driver through ppc_md
config GENERIC_NVRAM
	bool
	default y if PPC32

config SCHED_OMIT_FRAME_POINTER
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default PCI

config PPC_UDBG_16550
	bool
	default n

config GENERIC_TBSYNC
	bool
	default y if PPC32 && SMP
	default n

config AUDIT_ARCH
	bool
	default y

config GENERIC_BUG
	bool
	default y
	depends on BUG

config SYS_SUPPORTS_APM_EMULATION
	default y if PMAC_APM_EMU
	bool

config EPAPR_BOOT
	bool
	help
	  Used to allow a board to specify it wants an ePAPR compliant wrapper.
	default n

config DEFAULT_UIMAGE
	bool
	help
	  Used to allow a board to specify it wants a uImage built by default
	default n

config ARCH_HIBERNATION_POSSIBLE
	bool
	default y

config ARCH_SUSPEND_POSSIBLE
	def_bool y
	depends on ADB_PMU || PPC_EFIKA || PPC_LITE5200 || PPC_83xx || \
		   (PPC_85xx && !PPC_E500MC) || PPC_86xx || PPC_PSERIES \
		   || 44x || 40x

config PPC_DCR_NATIVE
	bool
	default n

config PPC_DCR_MMIO
	bool
	default n

config PPC_DCR
	bool
	depends on PPC_DCR_NATIVE || PPC_DCR_MMIO
	default y

config PPC_OF_PLATFORM_PCI
	bool
	depends on PCI
	depends on PPC64 # not supported on 32 bits yet
	default n

config ARCH_SUPPORTS_DEBUG_PAGEALLOC
	depends on PPC32 || PPC_BOOK3S_64
	def_bool y

config ARCH_SUPPORTS_UPROBES
	def_bool y

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

config PPC_ADV_DEBUG_IACS
	int
	depends on PPC_ADV_DEBUG_REGS
	default 4 if 44x
	default 2

config PPC_ADV_DEBUG_DACS
	int
	depends on PPC_ADV_DEBUG_REGS
	default 2

config PPC_ADV_DEBUG_DVCS
	int
	depends on PPC_ADV_DEBUG_REGS
	default 2 if 44x
	default 0

config PPC_ADV_DEBUG_DAC_RANGE
	bool
	depends on PPC_ADV_DEBUG_REGS && 44x
	default y

config ZONE_DMA32
	bool
	default y if PPC64

config PGTABLE_LEVELS
	int
	default 2 if !PPC64
	default 3 if PPC_64K_PAGES && !PPC_BOOK3S_64
	default 4

source "arch/powerpc/sysdev/Kconfig"
source "arch/powerpc/platforms/Kconfig"

menu "Kernel options"

config HIGHMEM
	bool "High memory support"
	depends on PPC32

source kernel/Kconfig.hz

config HUGETLB_PAGE_SIZE_VARIABLE
	bool
	depends on HUGETLB_PAGE
	default y

config MATH_EMULATION
	bool "Math emulation"
	depends on 4xx || PPC_8xx || PPC_MPC832x || BOOKE
	---help---
	  Some PowerPC chips designed for embedded applications do not have
	  a floating-point unit and therefore do not implement the
	  floating-point instructions in the PowerPC instruction set.  If you
	  say Y here, the kernel will include code to emulate a floating-point
	  unit, which will allow programs that use floating-point
	  instructions to run.

	  This is also useful to emulate missing (optional) instructions
	  such as fsqrt on cores that do have an FPU but do not implement
	  them (such as Freescale BookE).

choice
	prompt "Math emulation options"
	default MATH_EMULATION_FULL
	depends on MATH_EMULATION

config	MATH_EMULATION_FULL
	bool "Emulate all the floating point instructions"
	---help---
	  Select this option will enable the kernel to support to emulate
	  all the floating point instructions. If your SoC doesn't have
	  a FPU, you should select this.

config MATH_EMULATION_HW_UNIMPLEMENTED
	bool "Just emulate the FPU unimplemented instructions"
	---help---
	  Select this if you know there does have a hardware FPU on your
	  SoC, but some floating point instructions are not implemented by that.

endchoice

config PPC_TRANSACTIONAL_MEM
       bool "Transactional Memory support for POWERPC"
       depends on PPC_BOOK3S_64
       depends on SMP
       select ALTIVEC
       select VSX
       default n
       ---help---
         Support user-mode Transactional Memory on POWERPC.

config LD_HEAD_STUB_CATCH
	bool "Reserve 256 bytes to cope with linker stubs in HEAD text" if EXPERT
	depends on PPC64
	default n
	help
	  Very large kernels can cause linker branch stubs to be generated by
	  code in head_64.S, which moves the head text sections out of their
	  specified location. This option can work around the problem.

	  If unsure, say "N".

config MPROFILE_KERNEL
	depends on PPC64 && CPU_LITTLE_ENDIAN
	def_bool $(success,$(srctree)/arch/powerpc/tools/gcc-check-mprofile-kernel.sh $(CC) -I$(srctree)/include -D__KERNEL__)

config HOTPLUG_CPU
	bool "Support for enabling/disabling CPUs"
	depends on SMP && (PPC_PSERIES || \
	PPC_PMAC || PPC_POWERNV || FSL_SOC_BOOKE)
	---help---
	  Say Y here to be able to disable and re-enable individual
	  CPUs at runtime on SMP machines.

	  Say N if you are unsure.

config ARCH_CPU_PROBE_RELEASE
	def_bool y
	depends on HOTPLUG_CPU

config ARCH_ENABLE_MEMORY_HOTPLUG
	def_bool y

config ARCH_HAS_WALK_MEMORY
	def_bool y

config ARCH_ENABLE_MEMORY_HOTREMOVE
	def_bool y

config PPC64_SUPPORTS_MEMORY_FAILURE
	bool "Add support for memory hwpoison"
	depends on PPC_BOOK3S_64
	default "y" if PPC_POWERNV
	select ARCH_SUPPORTS_MEMORY_FAILURE

config KEXEC
	bool "kexec system call"
	depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP)) || PPC_BOOK3E
	select KEXEC_CORE
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but it is independent of the system firmware.   And like a reboot
	  you can start any kernel with it, not just Linux.

	  The name comes from the similarity to the exec system call.

	  It is an ongoing process to be certain the hardware in a machine
	  is properly shutdown, so do not be surprised if this code does not
	  initially work for you.  As of this writing the exact hardware
	  interface is strongly in flux, so no good recommendation can be
	  made.

config KEXEC_FILE
	bool "kexec file based system call"
	select KEXEC_CORE
	select HAVE_IMA_KEXEC
	select BUILD_BIN2C
	depends on PPC64
	depends on CRYPTO=y
	depends on CRYPTO_SHA256=y
	help
	  This is a new version of the kexec system call. This call is
	  file based and takes in file descriptors as system call arguments
	  for kernel and initramfs as opposed to a list of segments as is the
	  case for the older kexec call.

config ARCH_HAS_KEXEC_PURGATORY
	def_bool KEXEC_FILE

config RELOCATABLE
	bool "Build a relocatable kernel"
	depends on PPC64 || (FLATMEM && (44x || FSL_BOOKE))
	select NONSTATIC_KERNEL
	select MODULE_REL_CRCS if MODVERSIONS
	help
	  This builds a kernel image that is capable of running at the
	  location the kernel is loaded at. For ppc32, there is no any
	  alignment restrictions, and this feature is a superset of
	  DYNAMIC_MEMSTART and hence overrides it. For ppc64, we should use
	  16k-aligned base address. The kernel is linked as a
	  position-independent executable (PIE) and contains dynamic relocations
	  which are processed early in the bootup process.

	  One use is for the kexec on panic case where the recovery kernel
	  must live at a different physical address than the primary
	  kernel.

	  Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address
	  it has been loaded at and the compile time physical addresses
	  CONFIG_PHYSICAL_START is ignored.  However CONFIG_PHYSICAL_START
	  setting can still be useful to bootwrappers that need to know the
	  load address of the kernel (eg. u-boot/mkimage).

config RELOCATABLE_TEST
	bool "Test relocatable kernel"
	depends on (PPC64 && RELOCATABLE)
	default n
	help
	  This runs the relocatable kernel at the address it was initially
	  loaded at, which tends to be non-zero and therefore test the
	  relocation code.

config CRASH_DUMP
	bool "Build a dump capture kernel"
	depends on PPC64 || 6xx || FSL_BOOKE || (44x && !SMP)
	select RELOCATABLE if PPC64 || 44x || FSL_BOOKE
	help
	  Build a kernel suitable for use as a dump capture kernel.
	  The same kernel binary can be used as production kernel and dump
	  capture kernel.

config FA_DUMP
	bool "Firmware-assisted dump"
	depends on PPC64 && PPC_RTAS
	select CRASH_CORE
	select CRASH_DUMP
	help
	  A robust mechanism to get reliable kernel crash dump with
	  assistance from firmware. This approach does not use kexec,
	  instead firmware assists in booting the capture kernel
	  while preserving memory contents. Firmware-assisted dump
	  is meant to be a kdump replacement offering robustness and
	  speed not possible without system firmware assistance.

	  If unsure, say "N"

config IRQ_ALL_CPUS
	bool "Distribute interrupts on all CPUs by default"
	depends on SMP
	help
	  This option gives the kernel permission to distribute IRQs across
	  multiple CPUs.  Saying N here will route all IRQs to the first
	  CPU.  Generally saying Y is safe, although some problems have been
	  reported with SMP Power Macintoshes with this option enabled.

config NUMA
	bool "NUMA support"
	depends on PPC64
	default y if SMP && PPC_PSERIES

config NODES_SHIFT
	int
	default "8" if PPC64
	default "4"
	depends on NEED_MULTIPLE_NODES

config USE_PERCPU_NUMA_NODE_ID
	def_bool y
	depends on NUMA

config HAVE_MEMORYLESS_NODES
	def_bool y
	depends on NUMA

config ARCH_SELECT_MEMORY_MODEL
	def_bool y
	depends on PPC64

config ARCH_FLATMEM_ENABLE
	def_bool y
	depends on (PPC64 && !NUMA) || PPC32

config ARCH_SPARSEMEM_ENABLE
	def_bool y
	depends on PPC64
	select SPARSEMEM_VMEMMAP_ENABLE

config ARCH_SPARSEMEM_DEFAULT
	def_bool y
	depends on PPC_BOOK3S_64

config SYS_SUPPORTS_HUGETLBFS
	bool

config ILLEGAL_POINTER_VALUE
	hex
	# This is roughly half way between the top of user space and the bottom
	# of kernel space, which seems about as good as we can get.
	default 0x5deadbeef0000000 if PPC64
	default 0

config ARCH_MEMORY_PROBE
	def_bool y
	depends on MEMORY_HOTPLUG

# Some NUMA nodes have memory ranges that span
# other nodes.  Even though a pfn is valid and
# between a node's start and end pfns, it may not
# reside on that node.  See memmap_init_zone()
# for details.
config NODES_SPAN_OTHER_NODES
	def_bool y
	depends on NEED_MULTIPLE_NODES

config STDBINUTILS
	bool "Using standard binutils settings"
	depends on 44x
	default y
	help
	  Turning this option off allows you to select 256KB PAGE_SIZE on 44x.
	  Note, that kernel will be able to run only those applications,
	  which had been compiled using binutils later than 2.17.50.0.3 with
	  '-zmax-page-size' set to 256K (the default is 64K). Or, if using
	  the older binutils, you can patch them with a trivial patch, which
	  changes the ELF_MAXPAGESIZE definition from 0x10000 to 0x40000.

choice
	prompt "Page size"
	default PPC_4K_PAGES
	help
	  Select the kernel logical page size. Increasing the page size
	  will reduce software overhead at each page boundary, allow
	  hardware prefetch mechanisms to be more effective, and allow
	  larger dma transfers increasing IO efficiency and reducing
	  overhead. However the utilization of memory will increase.
	  For example, each cached file will using a multiple of the
	  page size to hold its contents and the difference between the
	  end of file and the end of page is wasted.

	  Some dedicated systems, such as software raid serving with
	  accelerated calculations, have shown significant increases.

	  If you configure a 64 bit kernel for 64k pages but the
	  processor does not support them, then the kernel will simulate
	  them with 4k pages, loading them on demand, but with the
	  reduced software overhead and larger internal fragmentation.
	  For the 32 bit kernel, a large page option will not be offered
	  unless it is supported by the configured processor.

	  If unsure, choose 4K_PAGES.

config PPC_4K_PAGES
	bool "4k page size"
	select HAVE_ARCH_SOFT_DIRTY if PPC_BOOK3S_64

config PPC_16K_PAGES
	bool "16k page size"
	depends on 44x || PPC_8xx

config PPC_64K_PAGES
	bool "64k page size"
	depends on !PPC_FSL_BOOK3E && (44x || PPC_BOOK3S_64 || PPC_BOOK3E_64)
	select HAVE_ARCH_SOFT_DIRTY if PPC_BOOK3S_64

config PPC_256K_PAGES
	bool "256k page size"
	depends on 44x && !STDBINUTILS
	help
	  Make the page size 256k.

	  As the ELF standard only requires alignment to support page
	  sizes up to 64k, you will need to compile all of your user
	  space applications with a non-standard binutils settings
	  (see the STDBINUTILS description for details).

	  Say N unless you know what you are doing.

endchoice

config THREAD_SHIFT
	int "Thread shift" if EXPERT
	range 13 15
	default "15" if PPC_256K_PAGES
	default "14" if PPC64
	default "13"
	help
	  Used to define the stack size. The default is almost always what you
	  want. Only change this if you know what you are doing.

config FORCE_MAX_ZONEORDER
	int "Maximum zone order"
	range 8 9 if PPC64 && PPC_64K_PAGES
	default "9" if PPC64 && PPC_64K_PAGES
	range 13 13 if PPC64 && !PPC_64K_PAGES
	default "13" if PPC64 && !PPC_64K_PAGES
	range 9 64 if PPC32 && PPC_16K_PAGES
	default "9" if PPC32 && PPC_16K_PAGES
	range 7 64 if PPC32 && PPC_64K_PAGES
	default "7" if PPC32 && PPC_64K_PAGES
	range 5 64 if PPC32 && PPC_256K_PAGES
	default "5" if PPC32 && PPC_256K_PAGES
	range 11 64
	default "11"
	help
	  The kernel memory allocator divides physically contiguous memory
	  blocks into "zones", where each zone is a power of two number of
	  pages.  This option selects the largest power of two that the kernel
	  keeps in the memory allocator.  If you need to allocate very large
	  blocks of physically contiguous memory, then you may need to
	  increase this value.

	  This config option is actually maximum order plus one. For example,
	  a value of 11 means that the largest free memory block is 2^10 pages.

	  The page size is not necessarily 4KB.  For example, on 64-bit
	  systems, 64KB pages can be enabled via CONFIG_PPC_64K_PAGES.  Keep
	  this in mind when choosing a value for this option.

config PPC_SUBPAGE_PROT
	bool "Support setting protections for 4k subpages"
	depends on PPC_BOOK3S_64 && PPC_64K_PAGES
	help
	  This option adds support for a system call to allow user programs
	  to set access permissions (read/write, readonly, or no access)
	  on the 4k subpages of each 64k page.

config PPC_COPRO_BASE
	bool
	default n

config SCHED_SMT
	bool "SMT (Hyperthreading) scheduler support"
	depends on PPC64 && SMP
	help
	  SMT scheduler support improves the CPU scheduler's decision making
	  when dealing with POWER5 cpus at a cost of slightly increased
	  overhead in some places. If unsure say N here.

config PPC_DENORMALISATION
	bool "PowerPC denormalisation exception handling"
	depends on PPC_BOOK3S_64
	default "y" if PPC_POWERNV
	---help---
	  Add support for handling denormalisation of single precision
	  values.  Useful for bare metal only.  If unsure say Y here.

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyS0,9600 console=tty0 root=/dev/sda2"
	help
	  On some platforms, there is currently no way for the boot loader to
	  pass arguments to the kernel. For these platforms, you can supply
	  some command-line options at build time by entering them here.  In
	  most cases you will need to specify the root device here.

config CMDLINE_FORCE
	bool "Always use the default kernel command string"
	depends on CMDLINE_BOOL
	help
	  Always use the default kernel command string, even if the boot
	  loader passes other arguments to the kernel.
	  This is useful if you cannot or don't want to change the
	  command-line options your boot loader passes to the kernel.

config EXTRA_TARGETS
	string "Additional default image types"
	help
	  List additional targets to be built by the bootwrapper here (separated
	  by spaces).  This is useful for targets that depend of device tree
	  files in the .dts directory.

	  Targets in this list will be build as part of the default build
	  target, or when the user does a 'make zImage' or a
	  'make zImage.initrd'.

	  If unsure, leave blank

config ARCH_WANTS_FREEZER_CONTROL
	def_bool y
	depends on ADB_PMU

source kernel/power/Kconfig

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
	depends on PROC_FS
	default y
	help
	  This kernel feature is useful for number crunching applications
	  that may need to compute untrusted bytecode during their
	  execution. By using pipes or other transports made available to
	  the process as file descriptors supporting the read/write
	  syscalls, it's possible to isolate those applications in
	  their own address space using seccomp. Once seccomp is
	  enabled via /proc/<pid>/seccomp, it cannot be disabled
	  and the task is only allowed to execute a few safe syscalls
	  defined by each seccomp mode.

	  If unsure, say Y. Only embedded should say N here.

config PPC_MEM_KEYS
	prompt "PowerPC Memory Protection Keys"
	def_bool y
	depends on PPC_BOOK3S_64
	select ARCH_USES_HIGH_VMA_FLAGS
	select ARCH_HAS_PKEYS
	help
	  Memory Protection Keys provides a mechanism for enforcing
	  page-based protections, but without requiring modification of the
	  page tables when an application changes protection domains.

	  For details, see Documentation/vm/protection-keys.rst

	  If unsure, say y.

endmenu

config ISA_DMA_API
	bool
	default PCI

menu "Bus options"

config ISA
	bool "Support for ISA-bus hardware"
	depends on PPC_CHRP
	select PPC_I8259
	help
	  Find out whether you have ISA slots on your motherboard.  ISA is the
	  name of a bus system, i.e. the way the CPU talks to the other stuff
	  inside your box.  If you have an Apple machine, say N here; if you
	  have an IBM RS/6000 or pSeries machine, say Y.  If you have an
	  embedded board, consult your board documentation.

config ZONE_DMA
	bool
	default y

config GENERIC_ISA_DMA
	bool
	depends on ISA_DMA_API
	default y

config PPC_INDIRECT_PCI
	bool
	depends on PCI
	default y if 40x || 44x
	default n

config EISA
	bool

config SBUS
	bool

config FSL_SOC
	bool

config FSL_PCI
 	bool
	select PPC_INDIRECT_PCI
	select PCI_QUIRKS

config FSL_PMC
	bool
	default y
	depends on SUSPEND && (PPC_85xx || PPC_86xx)
	help
	  Freescale MPC85xx/MPC86xx power management controller support
	  (suspend/resume). For MPC83xx see platforms/83xx/suspend.c

config PPC4xx_CPM
	bool
	default y
	depends on SUSPEND && (44x || 40x)
	help
	  PPC4xx Clock Power Management (CPM) support (suspend/resume).
	  It also enables support for two different idle states (idle-wait
	  and idle-doze).

config 4xx_SOC
	bool

config FSL_LBC
	bool "Freescale Local Bus support"
	help
	  Enables reporting of errors from the Freescale local bus
	  controller.  Also contains some common code used by
	  drivers for specific local bus peripherals.

config FSL_GTM
	bool
	depends on PPC_83xx || QUICC_ENGINE || CPM2
	help
	  Freescale General-purpose Timers support

# Yes MCA RS/6000s exist but Linux-PPC does not currently support any
config MCA
	bool

# Platforms that what PCI turned unconditionally just do select PCI
# in their config node.  Platforms that want to choose at config
# time should select PPC_PCI_CHOICE
config PPC_PCI_CHOICE
	bool

config PCI
	bool "PCI support" if PPC_PCI_CHOICE
	default y if !40x && !CPM2 && !PPC_8xx && !PPC_83xx \
		&& !PPC_85xx && !PPC_86xx && !GAMECUBE_COMMON
	default PCI_QSPAN if PPC_8xx
	select GENERIC_PCI_IOMAP
	help
	  Find out whether your system includes a PCI bus. PCI is the name of
	  a bus system, i.e. the way the CPU talks to the other stuff inside
	  your box.  If you say Y here, the kernel will include drivers and
	  infrastructure code to support PCI bus devices.

config PCI_DOMAINS
	def_bool PCI

config PCI_SYSCALL
	def_bool PCI

config PCI_QSPAN
	bool "QSpan PCI"
	depends on PPC_8xx
	select PPC_I8259
	help
	  Say Y here if you have a system based on a Motorola 8xx-series
	  embedded processor with a QSPAN PCI interface, otherwise say N.

config PCI_8260
	bool
	depends on PCI && 8260
	select PPC_INDIRECT_PCI
	default y

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

config HAS_RAPIDIO
	bool
	default n

config RAPIDIO
	tristate "RapidIO support"
	depends on HAS_RAPIDIO || PCI
	help
	  If you say Y here, the kernel will include drivers and
	  infrastructure code to support RapidIO interconnect devices.

config FSL_RIO
	bool "Freescale Embedded SRIO Controller support"
	depends on RAPIDIO = y && HAS_RAPIDIO
	default "n"
	---help---
	  Include support for RapidIO controller on Freescale embedded
	  processors (MPC8548, MPC8641, etc).

source "drivers/rapidio/Kconfig"

endmenu

config NONSTATIC_KERNEL
	bool
	default n

menu "Advanced setup"
	depends on PPC32

config ADVANCED_OPTIONS
	bool "Prompt for advanced kernel configuration options"
	help
	  This option will enable prompting for a variety of advanced kernel
	  configuration options.  These options can cause the kernel to not
	  work if they are set incorrectly, but can be used to optimize certain
	  aspects of kernel memory management.

	  Unless you know what you are doing, say N here.

comment "Default settings for advanced configuration options are used"
	depends on !ADVANCED_OPTIONS

config LOWMEM_SIZE_BOOL
	bool "Set maximum low memory"
	depends on ADVANCED_OPTIONS
	help
	  This option allows you to set the maximum amount of memory which
	  will be used as "low memory", that is, memory which the kernel can
	  access directly, without having to set up a kernel virtual mapping.
	  This can be useful in optimizing the layout of kernel virtual
	  memory.

	  Say N here unless you know what you are doing.

config LOWMEM_SIZE
	hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL
	default "0x30000000"

config LOWMEM_CAM_NUM_BOOL
	bool "Set number of CAMs to use to map low memory"
	depends on ADVANCED_OPTIONS && FSL_BOOKE
	help
	  This option allows you to set the maximum number of CAM slots that
	  will be used to map low memory.  There are a limited number of slots
	  available and even more limited number that will fit in the L1 MMU.
	  However, using more entries will allow mapping more low memory.  This
	  can be useful in optimizing the layout of kernel virtual memory.

	  Say N here unless you know what you are doing.

config LOWMEM_CAM_NUM
	depends on FSL_BOOKE
	int "Number of CAMs to use to map low memory" if LOWMEM_CAM_NUM_BOOL
	default 3

config DYNAMIC_MEMSTART
	bool "Enable page aligned dynamic load address for kernel"
	depends on ADVANCED_OPTIONS && FLATMEM && (FSL_BOOKE || 44x)
	select NONSTATIC_KERNEL
	help
	  This option enables the kernel to be loaded at any page aligned
	  physical address. The kernel creates a mapping from KERNELBASE to 
	  the address where the kernel is loaded. The page size here implies
	  the TLB page size of the mapping for kernel on the particular platform.
	  Please refer to the init code for finding the TLB page size.

	  DYNAMIC_MEMSTART is an easy way of implementing pseudo-RELOCATABLE
	  kernel image, where the only restriction is the page aligned kernel
	  load address. When this option is enabled, the compile time physical 
	  address CONFIG_PHYSICAL_START is ignored.

	  This option is overridden by CONFIG_RELOCATABLE

config PAGE_OFFSET_BOOL
	bool "Set custom page offset address"
	depends on ADVANCED_OPTIONS
	help
	  This option allows you to set the kernel virtual address at which
	  the kernel will map low memory.  This can be useful in optimizing
	  the virtual memory layout of the system.

	  Say N here unless you know what you are doing.

config PAGE_OFFSET
	hex "Virtual address of memory base" if PAGE_OFFSET_BOOL
	default "0xc0000000"

config KERNEL_START_BOOL
	bool "Set custom kernel base address"
	depends on ADVANCED_OPTIONS
	help
	  This option allows you to set the kernel virtual address at which
	  the kernel will be loaded.  Normally this should match PAGE_OFFSET
	  however there are times (like kdump) that one might not want them
	  to be the same.

	  Say N here unless you know what you are doing.

config KERNEL_START
	hex "Virtual address of kernel base" if KERNEL_START_BOOL
	default PAGE_OFFSET if PAGE_OFFSET_BOOL
	default "0xc2000000" if CRASH_DUMP && !NONSTATIC_KERNEL
	default "0xc0000000"

config PHYSICAL_START_BOOL
	bool "Set physical address where the kernel is loaded"
	depends on ADVANCED_OPTIONS && FLATMEM && FSL_BOOKE
	help
	  This gives the physical address where the kernel is loaded.

	  Say N here unless you know what you are doing.

config PHYSICAL_START
	hex "Physical address where the kernel is loaded" if PHYSICAL_START_BOOL
	default "0x02000000" if PPC_STD_MMU && CRASH_DUMP && !NONSTATIC_KERNEL
	default "0x00000000"

config PHYSICAL_ALIGN
	hex
	default "0x04000000" if FSL_BOOKE
	help
	  This value puts the alignment restrictions on physical address
	  where kernel is loaded and run from. Kernel is compiled for an
	  address which meets above alignment restriction.

config TASK_SIZE_BOOL
	bool "Set custom user task size"
	depends on ADVANCED_OPTIONS
	help
	  This option allows you to set the amount of virtual address space
	  allocated to user tasks.  This can be useful in optimizing the
	  virtual memory layout of the system.

	  Say N here unless you know what you are doing.

config TASK_SIZE
	hex "Size of user task space" if TASK_SIZE_BOOL
	default "0x80000000" if PPC_8xx
	default "0xc0000000"

config CONSISTENT_SIZE_BOOL
	bool "Set custom consistent memory pool size"
	depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
	help
	  This option allows you to set the size of the
	  consistent memory pool.  This pool of virtual memory
	  is used to make consistent memory allocations.

config CONSISTENT_SIZE
	hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL
	default "0x00200000" if NOT_COHERENT_CACHE

config PIN_TLB
	bool "Pinned Kernel TLBs (860 ONLY)"
	depends on ADVANCED_OPTIONS && PPC_8xx && \
		   !DEBUG_PAGEALLOC && !STRICT_KERNEL_RWX

config PIN_TLB_DATA
	bool "Pinned TLB for DATA"
	depends on PIN_TLB
	default y

config PIN_TLB_IMMR
	bool "Pinned TLB for IMMR"
	depends on PIN_TLB
	default y

config PIN_TLB_TEXT
	bool "Pinned TLB for TEXT"
	depends on PIN_TLB
	default y
endmenu

if PPC64
# This value must have zeroes in the bottom 60 bits otherwise lots will break
config PAGE_OFFSET
	hex
	default "0xc000000000000000"
config KERNEL_START
	hex
	default "0xc000000000000000"
config PHYSICAL_START
	hex
	default "0x00000000"
endif

config	ARCH_RANDOM
	def_bool n

config PPC_LIB_RHEAP
	bool

source "arch/powerpc/kvm/Kconfig"

source "kernel/livepatch/Kconfig"
