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 WORD_SIZE
	int
	default 64 if PPC64
	default 32 if !PPC64

config ARCH_PHYS_ADDR_T_64BIT
       def_bool PPC64 || PHYS_64BIT

config ARCH_DMA_ADDR_T_64BIT
	def_bool ARCH_PHYS_ADDR_T_64BIT

config MMU
	bool
	default y

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 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 ARCH_HAS_ILOG2_U32
	bool
	default y

config ARCH_HAS_ILOG2_U64
	bool
	default y if 64BIT

config GENERIC_HWEIGHT
	bool
	default y

config ARCH_HAS_DMA_SET_COHERENT_MASK
        bool

config PPC
	bool
	default y
	select ARCH_MIGHT_HAVE_PC_PARPORT
	select ARCH_MIGHT_HAVE_PC_SERIO
	select BINFMT_ELF
	select ARCH_HAS_ELF_RANDOMIZE
	select OF
	select OF_EARLY_FLATTREE
	select OF_RESERVED_MEM
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
	select SYSCTL_EXCEPTION_TRACE
	select ARCH_WANT_OPTIONAL_GPIOLIB
	select VIRT_TO_BUS if !PPC64
	select HAVE_IDE
	select HAVE_IOREMAP_PROT
	select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_LITTLE_ENDIAN
	select HAVE_KPROBES
	select HAVE_ARCH_KGDB
	select HAVE_KRETPROBES
	select HAVE_ARCH_TRACEHOOK
	select HAVE_MEMBLOCK
	select HAVE_MEMBLOCK_NODE_MAP
	select HAVE_DMA_API_DEBUG
	select HAVE_OPROFILE
	select HAVE_DEBUG_KMEMLEAK
	select ARCH_HAS_SG_CHAIN
	select GENERIC_ATOMIC64 if PPC32
	select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
	select HAVE_PERF_EVENTS
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_HW_BREAKPOINT if PERF_EVENTS && PPC_BOOK3S_64
	select ARCH_WANT_IPC_PARSE_VERSION
	select SPARSE_IRQ
	select IRQ_DOMAIN
	select GENERIC_IRQ_SHOW
	select GENERIC_IRQ_SHOW_LEVEL
	select IRQ_FORCED_THREADING
	select HAVE_RCU_TABLE_FREE if SMP
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_BPF_JIT
	select HAVE_ARCH_JUMP_LABEL
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select ARCH_HAS_GCOV_PROFILE_ALL
	select GENERIC_SMP_IDLE_THREAD
	select GENERIC_CMOS_UPDATE
	select GENERIC_TIME_VSYSCALL_OLD
	select GENERIC_CLOCKEVENTS
	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
	select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
	select GENERIC_STRNCPY_FROM_USER
	select GENERIC_STRNLEN_USER
	select HAVE_MOD_ARCH_SPECIFIC
	select MODULES_USE_ELF_RELA
	select CLONE_BACKWARDS
	select ARCH_USE_BUILTIN_BSWAP
	select OLD_SIGSUSPEND
	select OLD_SIGACTION if PPC32
	select HAVE_DEBUG_STACKOVERFLOW
	select HAVE_IRQ_EXIT_ON_IRQ_STACK
	select ARCH_USE_CMPXCHG_LOCKREF if PPC64
	select HAVE_ARCH_AUDITSYSCALL
	select ARCH_SUPPORTS_ATOMIC_RMW
	select DCACHE_WORD_ACCESS if PPC64 && CPU_LITTLE_ENDIAN
	select NO_BOOTMEM
	select HAVE_GENERIC_RCU_GUP
	select HAVE_PERF_EVENTS_NMI if PPC64
	select EDAC_SUPPORT
	select EDAC_ATOMIC_SCRUB
	select ARCH_HAS_DMA_SET_COHERENT_MASK
	select ARCH_HAS_DEVMEM_IS_ALLOWED
	select HAVE_ARCH_SECCOMP_FILTER
	select ARCH_HAS_UBSAN_SANITIZE_ALL

config GENERIC_CSUM
	def_bool CPU_LITTLE_ENDIAN

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_STD_MMU_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 PPC_EMULATE_SSTEP
	bool
	default y if KPROBES || UPROBES || XMON || HAVE_HW_BREAKPOINT

config ZONE_DMA32
	bool
	default y if PPC64

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

source "init/Kconfig"

source "kernel/Kconfig.freezer"

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
source kernel/Kconfig.preempt
source "fs/Kconfig.binfmt"

config HUGETLB_PAGE_SIZE_VARIABLE
	bool
	depends on HUGETLB_PAGE
	default y

config MATH_EMULATION
	bool "Math emulation"
	depends on 4xx || 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 IOMMU_HELPER
	def_bool PPC64

config SWIOTLB
	bool "SWIOTLB support"
	default n
	select IOMMU_HELPER
	---help---
	  Support for IO bounce buffering for systems without an IOMMU.
	  This allows us to DMA to the full physical address space on
	  platforms where the size of a physical address is larger
	  than the bus address.  Not all platforms support this.

config HOTPLUG_CPU
	bool "Support for enabling/disabling CPUs"
	depends on SMP && (PPC_PSERIES || \
	PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC))
	---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 CRASH_DUMP
	bool "Build a kdump crash kernel"
	depends on PPC64 || 6xx || FSL_BOOKE || (44x && !SMP)
	select RELOCATABLE if (PPC64 && !COMPILE_TEST) || 44x || FSL_BOOKE
	help
	  Build a kernel suitable for use as a kdump 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 && CRASH_DUMP && KEXEC
	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 kdump 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 (SMP && PPC_PSERIES) || PPC_PS3

config SYS_SUPPORTS_HUGETLBFS
	bool

source "mm/Kconfig"

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 CHECKPOINT_RESTORE && PPC_BOOK3S

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_STD_MMU_64 || PPC_BOOK3E_64)
	select HAVE_ARCH_SOFT_DIRTY if CHECKPOINT_RESTORE && PPC_BOOK3S

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 FORCE_MAX_ZONEORDER
	int "Maximum zone order"
	range 9 64 if PPC64 && PPC_64K_PAGES
	default "9" if PPC64 && PPC_64K_PAGES
	range 13 64 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_STD_MMU_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.

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 NEED_DMA_MAP_STATE
	def_bool (PPC64 || NOT_COHERENT_CACHE)

config NEED_SG_DMA_LENGTH
	def_bool 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"
	depends on FSL_SOC
	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 && !8xx && !PPC_83xx \
		&& !PPC_85xx && !PPC_86xx && !GAMECUBE_COMMON
	default PCI_QSPAN if !4xx && !CPM2 && 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 !4xx && !CPM2 && 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/pcie/Kconfig"

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/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 RELOCATABLE
	bool "Build a relocatable kernel"
	depends on ADVANCED_OPTIONS && FLATMEM && (44x || FSL_BOOKE)
	select NONSTATIC_KERNEL
	help
	  This builds a kernel image that is capable of running at the
	  location the kernel is loaded at, without any alignment restrictions.
	  This feature is a superset of DYNAMIC_MEMSTART and hence overrides it.

	  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_PPC32
	def_bool y
	depends on PPC32 && 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 && 8xx
endmenu

if PPC64
config RELOCATABLE
	bool "Build a relocatable kernel"
	depends on !COMPILE_TEST
	select NONSTATIC_KERNEL
	help
	  This builds a kernel image that is capable of running anywhere
	  in the RMA (real memory area) at any 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.

# 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

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "lib/Kconfig"

source "arch/powerpc/Kconfig.debug"

source "security/Kconfig"

config KEYS_COMPAT
	bool
	depends on COMPAT && KEYS
	default y

source "crypto/Kconfig"

config PPC_LIB_RHEAP
	bool

source "arch/powerpc/kvm/Kconfig"
