# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#

mainmenu "Linux/PowerPC Kernel Configuration"

config WORD_SIZE
	int
	default 32

config MMU
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config RWSEM_GENERIC_SPINLOCK
	bool

config RWSEM_XCHGADD_ALGORITHM
	bool
	default y

config ARCH_HAS_ILOG2_U32
	bool
	default y

config ARCH_HAS_ILOG2_U64
	bool
	default n

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config PPC
	bool
	default y

config PPC32
	bool
	default y

# All PPCs use generic nvram driver through ppc_md
config GENERIC_NVRAM
	bool
	default y

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config SCHED_NO_NO_OMIT_FRAME_POINTER
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default y

config GENERIC_BUG
	bool
	default y
	depends on BUG

source "init/Kconfig"

menu "Processor"

choice
	prompt "Processor Type"
	default 6xx

config 6xx
	bool "6xx/7xx/74xx/52xx/82xx/83xx"
	select PPC_FPU
	help
	  There are four types of PowerPC chips supported.  The more common
	  types (601, 603, 604, 740, 750, 7400), the older Freescale
	  (formerly Motorola) embedded versions (821, 823, 850, 855, 860,
	  52xx, 82xx, 83xx), the IBM embedded versions (403 and 405) and
	  the Book E embedded processors from IBM (44x) and Freescale (85xx).
	  For support for 64-bit processors, set ARCH=powerpc.
	  Unless you are building a kernel for one of the embedded processor
	  systems, choose 6xx.
	  Also note that because the 52xx, 82xx, & 83xx family have a 603e
	  core, specific support for that chipset is asked later on.

config 40x
	bool "40x"
	select PPC_DCR_NATIVE

config 44x
	bool "44x"
	select PPC_DCR_NATIVE

config 8xx
	bool "8xx"

config E200
	bool "e200"

config E500
	bool "e500"

endchoice

config PPC_FPU
	bool

config PPC_DCR_NATIVE
	bool
	default n

config PPC_DCR
	bool
	depends on PPC_DCR_NATIVE
	default y

config BOOKE
	bool
	depends on E200 || E500
	default y

config FSL_BOOKE
	bool
	depends on E200 || E500
	default y

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

config PHYS_64BIT
	bool 'Large physical address support' if E500
	depends on 44x || E500
	default y if 44x
	---help---
	  This option enables kernel support for larger than 32-bit physical
	  addresses.  This features is not be available on all e500 cores.

	  If in doubt, say N here.

config ALTIVEC
	bool "AltiVec Support"
	depends on 6xx
	depends on !8260 && !83xx
	---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 SPE
	bool "SPE Support"
	depends on E200 || E500
	---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 TAU
	bool "Thermal Management Support"
	depends on 6xx && !8260 && !83xx
	help
	  G3 and G4 processors have an on-chip temperature sensor called the
	  'Thermal Assist Unit (TAU)', which, in theory, can measure the on-die
	  temperature within 2-4 degrees Celsius. This option shows the current
	  on-die temperature in /proc/cpuinfo if the cpu supports it.

	  Unfortunately, on some chip revisions, this sensor is very inaccurate
	  and in some cases, does not work at all, so don't assume the cpu
	  temp is actually what /proc/cpuinfo says it is.

config TAU_INT
	bool "Interrupt driven TAU driver (DANGEROUS)"
	depends on TAU
	---help---
	  The TAU supports an interrupt driven mode which causes an interrupt
	  whenever the temperature goes out of range. This is the fastest way
	  to get notified the temp has exceeded a range. With this option off,
	  a timer is used to re-check the temperature periodically.

	  However, on some cpus it appears that the TAU interrupt hardware
	  is buggy and can cause a situation which would lead unexplained hard
	  lockups.

	  Unless you are extending the TAU driver, or enjoy kernel/hardware
	  debugging, leave this option off.

config TAU_AVERAGE
	bool "Average high and low temp"
	depends on TAU
	---help---
	  The TAU hardware can compare the temperature to an upper and lower
	  bound.  The default behavior is to show both the upper and lower
	  bound in /proc/cpuinfo. If the range is large, the temperature is
	  either changing a lot, or the TAU hardware is broken (likely on some
	  G4's). If the range is small (around 4 degrees), the temperature is
	  relatively stable.  If you say Y here, a single temperature value,
	  halfway between the upper and lower bounds, will be reported in
	  /proc/cpuinfo.

	  If in doubt, say N here.

config MATH_EMULATION
	bool "Math emulation"
	depends on 4xx || 8xx || E200 || E500
	---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.

	  If you have an Apple machine or an IBM RS/6000 or pSeries machine,
	  or any machine with a 6xx, 7xx or 7xxx series processor, say N
	  here.  Saying Y here will not hurt performance (on any machine) but
	  will increase the size of the kernel.

config KEXEC
	bool "kexec system call (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	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.  It may help to enable device hotplugging
	  support.  As of this writing the exact hardware interface is
	  strongly in flux, so no good recommendation can be made.

	  In the GameCube implementation, kexec allows you to load and
	  run DOL files, including kernel and homebrew DOLs.

source "drivers/cpufreq/Kconfig"

config PPC601_SYNC_FIX
	bool "Workarounds for PPC601 bugs"
	depends on 6xx && PPC_PREP
	help
	  Some versions of the PPC601 (the first PowerPC chip) have bugs which
	  mean that extra synchronization instructions are required near
	  certain instructions, typically those that make major changes to the
	  CPU state.  These extra instructions reduce performance slightly.
	  If you say N here, these extra instructions will not be included,
	  resulting in a kernel which will run faster but may not run at all
	  on some systems with the PPC601 chip.

	  If in doubt, say Y here.

source arch/ppc/platforms/4xx/Kconfig
source arch/ppc/platforms/85xx/Kconfig

config PPC_STD_MMU
	bool
	depends on 6xx
	default y

config NOT_COHERENT_CACHE
	bool
	depends on 4xx || 8xx || E200
	default y

endmenu

menu "Platform options"

config FADS
	bool

choice
	prompt "8xx Machine Type"
	depends on 8xx
	default RPXLITE

config RPXLITE
	bool "RPX-Lite"
	---help---
	  Single-board computers based around the PowerPC MPC8xx chips and
	  intended for embedded applications.  The following types are
	  supported:

	  RPX-Lite:
	  Embedded Planet RPX Lite. PC104 form-factor SBC based on the MPC823.

	  RPX-Classic:
	  Embedded Planet RPX Classic Low-fat. Credit-card-size SBC based on
	  the MPC 860

	  BSE-IP:
	  Bright Star Engineering ip-Engine.

	  TQM823L:
	  TQM850L:
	  TQM855L:
	  TQM860L:
	  MPC8xx based family of mini modules, half credit card size,
	  up to 64 MB of RAM, 8 MB Flash, (Fast) Ethernet, 2 x serial ports,
	  2 x CAN bus interface, ...
	  Manufacturer: TQ Components, www.tq-group.de
	  Date of Release: October (?) 1999
	  End of Life: not yet :-)
	  URL:
	  - module: <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>
	  - starter kit: <http://www.denx.de/PDF/STK8xxLHWM201.pdf>
	  - images: <http://www.denx.de/embedded-ppc-en.html>

	  FPS850L:
	  FingerPrint Sensor System (based on TQM850L)
	  Manufacturer: IKENDI AG, <http://www.ikendi.com/>
	  Date of Release: November 1999
	  End of life: end 2000 ?
	  URL: see TQM850L

	  IVMS8:
	  MPC860 based board used in the "Integrated Voice Mail System",
	  Small Version (8 voice channels)
	  Manufacturer: Speech Design, <http://www.speech-design.de/>
	  Date of Release: December 2000 (?)
	  End of life: -
	  URL: <http://www.speech-design.de/>

	  IVML24:
	  MPC860 based board used in the "Integrated Voice Mail System",
	  Large Version (24 voice channels)
	  Manufacturer: Speech Design, <http://www.speech-design.de/>
	  Date of Release: March 2001  (?)
	  End of life: -
	  URL: <http://www.speech-design.de/>

	  HERMES:
	  Hermes-Pro ISDN/LAN router with integrated 8 x hub
	  Manufacturer: Multidata Gesellschaft fur Datentechnik und Informatik
	  <http://www.multidata.de/>
	  Date of Release: 2000 (?)
	  End of life: -
	  URL: <http://www.multidata.de/english/products/hpro.htm>

	  IP860:
	  VMEBus IP (Industry Pack) carrier board with MPC860
	  Manufacturer: MicroSys GmbH, <http://www.microsys.de/>
	  Date of Release: ?
	  End of life: -
	  URL: <http://www.microsys.de/html/ip860.html>

	  PCU_E:
	  PCU = Peripheral Controller Unit, Extended
	  Manufacturer: Siemens AG, ICN (Information and Communication Networks)
	  	<http://www.siemens.de/page/1,3771,224315-1-999_2_226207-0,00.html>
	  Date of Release: April 2001
	  End of life: August 2001
	  URL: n. a.

config RPXCLASSIC
	bool "RPX-Classic"
	help
	  The RPX-Classic is a single-board computer based on the Motorola
	  MPC860.  It features 16MB of DRAM and a variable amount of flash,
	  I2C EEPROM, thermal monitoring, a PCMCIA slot, a DIP switch and two
	  LEDs.  Variants with Ethernet ports exist.  Say Y here to support it
	  directly.

config BSEIP
	bool "BSE-IP"
	help
	  Say Y here to support the Bright Star Engineering ipEngine SBC.
	  This is a credit-card-sized device featuring a MPC823 processor,
	  26MB DRAM, 4MB flash, Ethernet, a 16K-gate FPGA, USB, an LCD/video
	  controller, and two RS232 ports.

config MPC8XXFADS
	bool "FADS"
	select FADS

config MPC86XADS
	bool "MPC86XADS"
	help
	  MPC86x Application Development System by Freescale Semiconductor.
	  The MPC86xADS is meant to serve as a platform for s/w and h/w
	  development around the MPC86X processor families.
	select FADS

config MPC885ADS
	bool "MPC885ADS"
	help
	  Freescale Semiconductor MPC885 Application Development System (ADS).
	  Also known as DUET.
	  The MPC885ADS is meant to serve as a platform for s/w and h/w
	  development around the MPC885 processor family.

config TQM823L
	bool "TQM823L"
	help
	  Say Y here to support the TQM823L, one of an MPC8xx-based family of
	  mini SBCs (half credit-card size) from TQ Components first released
	  in late 1999.  Technical references are at
	  <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
	  <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
	  <http://www.denx.de/embedded-ppc-en.html>.

config TQM850L
	bool "TQM850L"
	help
	  Say Y here to support the TQM850L, one of an MPC8xx-based family of
	  mini SBCs (half credit-card size) from TQ Components first released
	  in late 1999.  Technical references are at
	  <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
	  <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
	  <http://www.denx.de/embedded-ppc-en.html>.

config TQM855L
	bool "TQM855L"
	help
	  Say Y here to support the TQM855L, one of an MPC8xx-based family of
	  mini SBCs (half credit-card size) from TQ Components first released
	  in late 1999.  Technical references are at
	  <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
	  <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
	  <http://www.denx.de/embedded-ppc-en.html>.

config TQM860L
	bool "TQM860L"
	help
	  Say Y here to support the TQM860L, one of an MPC8xx-based family of
	  mini SBCs (half credit-card size) from TQ Components first released
	  in late 1999.  Technical references are at
	  <http://www.denx.de/PDF/TQM8xxLHWM201.pdf>, and
	  <http://www.denx.de/PDF/STK8xxLHWM201.pdf>, and an image at
	  <http://www.denx.de/embedded-ppc-en.html>.

config FPS850L
	bool "FPS850L"

config IVMS8
	bool "IVMS8"
	help
	  Say Y here to support the Integrated Voice-Mail Small 8-channel SBC
	  from Speech Design, released March 2001.  The manufacturer's website
	  is at <http://www.speech-design.de/>.

config IVML24
	bool "IVML24"
	help
	  Say Y here to support the Integrated Voice-Mail Large 24-channel SBC
	  from Speech Design, released March 2001.  The manufacturer's website
	  is at <http://www.speech-design.de/>.

config HERMES_PRO
	bool "HERMES"

config IP860
	bool "IP860"

config LWMON
	bool "LWMON"

config PCU_E
	bool "PCU_E"

config CCM
	bool "CCM"

config LANTEC
	bool "LANTEC"

config MBX
	bool "MBX"
	help
	  MBX is a line of Motorola single-board computer based around the
	  MPC821 and MPC860 processors, and intended for embedded-controller
	  applications.  Say Y here to support these boards directly.

config WINCEPT
	bool "WinCept"
	help
	  The Wincept 100/110 is a Motorola single-board computer based on the
	  MPC821 PowerPC, introduced in 1998 and designed to be used in
	  thin-client machines.  Say Y to support it directly.

endchoice

menu "Freescale Ethernet driver platform-specific options"
	depends on FS_ENET

	config MPC8xx_SECOND_ETH
	bool "Second Ethernet channel"
	depends on (MPC885ADS || MPC86XADS)
	default y
	help
	  This enables support for second Ethernet on MPC885ADS and MPC86xADS boards.
	  The latter will use SCC1, for 885ADS you can select it below.

	choice
		prompt "Second Ethernet channel"
		depends on MPC8xx_SECOND_ETH
		default MPC8xx_SECOND_ETH_FEC2

		config MPC8xx_SECOND_ETH_FEC2
		bool "FEC2"
		depends on MPC885ADS
		help
		  Enable FEC2 to serve as 2-nd Ethernet channel. Note that SMC2
		  (often 2-nd UART) will not work if this is enabled.

		config MPC8xx_SECOND_ETH_SCC1
		bool "SCC1"
		depends on MPC86XADS
		select MPC8xx_SCC_ENET_FIXED
		help
		  Enable SCC1 to serve as 2-nd Ethernet channel. Note that SMC1
		  (often 1-nd UART) will not work if this is enabled.

		config MPC8xx_SECOND_ETH_SCC3
		bool "SCC3"
		depends on MPC885ADS
		help
		  Enable SCC3 to serve as 2-nd Ethernet channel. Note that SMC1
		  (often 1-nd UART) will not work if this is enabled.

	endchoice

	config MPC8xx_SCC_ENET_FIXED
	depends on MPC8xx_SECOND_ETH_SCC
	default n
	bool "Use fixed MII-less mode for SCC Ethernet"

endmenu

choice
	prompt "Machine Type"
	depends on 6xx
	default PPC_PREP
	---help---
	  Linux currently supports several different kinds of PowerPC-based
	  machines: Apple Power Macintoshes and clones (such as the Motorola
	  Starmax series), PReP (PowerPC Reference Platform) machines (such
	  as the Motorola PowerStacks, Motorola cPCI/VME embedded systems,
	  and some IBM RS/6000 systems), CHRP (Common Hardware Reference
	  Platform) machines (including all of the recent IBM RS/6000 and
	  pSeries machines), and several embedded PowerPC systems containing
	  4xx, 6xx, 7xx, 8xx, 74xx, and 82xx processors.  Currently, the
	  default option is to build a kernel which works on PReP.

	  Note that support for Apple and CHRP machines is now only available
	  with ARCH=powerpc, and has been removed from this menu.  If you
	  wish to build a kernel for an Apple or CHRP machine, exit this
	  configuration process and re-run it with ARCH=powerpc.

	  Select PReP if configuring for a PReP machine.

config PPC_PREP
	bool "PReP"

config KATANA
	bool "Artesyn-Katana"
	help
	  Select KATANA if configuring an Artesyn KATANA 750i or 3750
	  cPCI board.

config WILLOW
	bool "Cogent-Willow"

config CPCI690
	bool "Force-CPCI690"
	help
	  Select CPCI690 if configuring a Force CPCI690 cPCI board.

config POWERPMC250
	bool "Force-PowerPMC250"

config CHESTNUT
	bool "IBM 750FX Eval board or 750GX Eval board"
	help
	  Select CHESTNUT if configuring an IBM 750FX Eval Board or a
	  IBM 750GX Eval board.

config SPRUCE
	bool "IBM-Spruce"
	select PPC_INDIRECT_PCI

config HDPU
	bool "Sky-HDPU"
	help
	  Select HDPU if configuring a Sky Computers Compute Blade.

config HDPU_FEATURES
	depends on HDPU
	tristate "HDPU-Features"
	help
	  Select to enable HDPU enhanced features.

config EV64260
	bool "Marvell-EV64260BP"
	help
	  Select EV64260 if configuring a Marvell (formerly Galileo)
	  EV64260BP Evaluation platform.

config LOPEC
	bool "Motorola-LoPEC"
	select PPC_I8259

config MVME5100
	bool "Motorola-MVME5100"
	select PPC_INDIRECT_PCI

config PPLUS
	bool "Motorola-PowerPlus"
	select PPC_I8259
	select PPC_INDIRECT_PCI

config PRPMC750
	bool "Motorola-PrPMC750"
	select PPC_INDIRECT_PCI

config PRPMC800
	bool "Motorola-PrPMC800"
	select PPC_INDIRECT_PCI

config SANDPOINT
	bool "Motorola-Sandpoint"
	select PPC_I8259
	help
	  Select SANDPOINT if configuring for a Motorola Sandpoint X3
	  (any flavor).

config RADSTONE_PPC7D
	bool "Radstone Technology PPC7D board"
	select PPC_I8259

config PAL4
	bool "SBS-Palomar4"

config EST8260
	bool "EST8260"
	---help---
	  The EST8260 is a single-board computer manufactured by Wind River
	  Systems, Inc. (formerly Embedded Support Tools Corp.) and based on
	  the MPC8260.  Wind River Systems has a website at
	  <http://www.windriver.com/>, but the EST8260 cannot be found on it
	  and has probably been discontinued or rebadged.

config SBC82xx
	bool "SBC82xx"
	---help---
	  SBC PowerQUICC II, single-board computer with MPC82xx CPU
	  Manufacturer: Wind River Systems, Inc.
	  Date of Release: May 2003
	  End of Life: -
	  URL: <http://www.windriver.com/>

config SBS8260
	bool "SBS8260"

config RPX8260
	bool "RPXSUPER"

config TQM8260
	bool "TQM8260"
	---help---
	  MPC8260 based module, little larger than credit card,
	  up to 128 MB global + 64 MB local RAM, 32 MB Flash,
	  32 kB EEPROM, 256 kB L@ Cache, 10baseT + 100baseT Ethernet,
	  2 x serial ports, ...
	  Manufacturer: TQ Components, www.tq-group.de
	  Date of Release: June 2001
	  End of Life: not yet :-)
	  URL: <http://www.denx.de/PDF/TQM82xx_SPEC_Rev005.pdf>

config ADS8272
	bool "ADS8272"

config PQ2FADS
	bool "Freescale-PQ2FADS"
	help
	  Select PQ2FADS if you wish to configure for a Freescale
	  PQ2FADS board (-VR or -ZU).

config LITE5200
	bool "Freescale LITE5200 / (IceCube)"
	select PPC_MPC52xx
	help
	  Support for the LITE5200 dev board for the MPC5200 from Freescale.
	  This is for the LITE5200 version 2.0 board. Don't know if it changes
	  much but it's only been tested on this board version. I think this
	  board is also known as IceCube.

config LITE5200B
	bool "Freescale LITE5200B"
	depends on LITE5200
	help
	  Support for the LITE5200B dev board for the MPC5200 from Freescale.
	  This is the new board with 2 PCI slots.

config MPC834x_SYS
	bool "Freescale MPC834x SYS"
	help
	  This option enables support for the MPC 834x SYS evaluation board.

	  Be aware that PCI buses can only function when SYS board is plugged
	  into the PIB (Platform IO Board) board from Freescale which provide
	  3 PCI slots.  The PIBs PCI initialization is the bootloader's
	  responsibility.

config EV64360
	bool "Marvell-EV64360BP"
	help
	  Select EV64360 if configuring a Marvell EV64360BP Evaluation
	  platform.
endchoice

config PQ2ADS
	bool
	depends on ADS8272
	default y

config TQM8xxL
	bool
	depends on 8xx && (TQM823L || TQM850L || FPS850L || TQM855L || TQM860L)
	default y

config EMBEDDEDBOOT
	bool
	depends on 8xx || 8260
	default y

config PPC_MPC52xx
	bool

config 8260
	bool "CPM2 Support" if WILLOW
	depends on 6xx
	default y if TQM8260 || RPX8260 || EST8260 || SBS8260 || SBC82xx || PQ2FADS
	help
	  The MPC8260 is a typical embedded CPU made by Motorola.  Selecting
	  this option means that you wish to build a kernel for a machine with
	  an 8260 class CPU.

config 8272
	bool
	depends on 6xx
	default y if ADS8272
	select 8260
	help
	  The MPC8272 CPM has a different internal dpram setup than other CPM2
	  devices

config 83xx
	bool
	default y if MPC834x_SYS

config MPC834x
	bool
	default y if MPC834x_SYS

config PPC_83xx
	bool
	default y if 83xx

config CPM1
	bool
	depends on 8xx
	default y
	help
	  The CPM1 (Communications Processor Module) is a coprocessor on
	  embedded CPUs made by Motorola.  Selecting this option means that
	  you wish to build a kernel for a machine with a CPM1 coprocessor
	  on it (8xx, 827x, 8560).

config CPM2
	bool
	depends on 8260 || MPC8560 || MPC8555
	default y
	help
	  The CPM2 (Communications Processor Module) is a coprocessor on
	  embedded CPUs made by Motorola.  Selecting this option means that
	  you wish to build a kernel for a machine with a CPM2 coprocessor
	  on it (826x, 827x, 8560).

config PPC_GEN550
	bool
	depends on SANDPOINT || SPRUCE || PPLUS || \
		PRPMC750 || PRPMC800 || LOPEC || \
		(EV64260 && !SERIAL_MPSC) || CHESTNUT || RADSTONE_PPC7D || \
		83xx
	default y

config FORCE
	bool
	depends on 6xx && POWERPMC250
	default y

config GT64260
	bool
	depends on EV64260 || CPCI690
	default y

config MV64360		# Really MV64360 & MV64460
	bool
	depends on CHESTNUT || KATANA || RADSTONE_PPC7D || HDPU || EV64360
	default y

config MV64X60
	bool
	depends on (GT64260 || MV64360)
	select PPC_INDIRECT_PCI
	default y

config MV643XX_ETH_0
	bool
	depends on MV643XX_ETH && (KATANA || RADSTONE_PPC7D || EV64360 || HDPU)
	default y

config MV643XX_ETH_1
	bool
	depends on MV643XX_ETH && (KATANA || RADSTONE_PPC7D || EV64360)
	default y

config MV643XX_ETH_2
	bool
	depends on MV643XX_ETH && (KATANA || RADSTONE_PPC7D || EV64360)
	default y

menu "Set bridge options"
	depends on MV64X60

config NOT_COHERENT_CACHE
	bool "Turn off Cache Coherency"
	default n
	help
	  Some 64x60 bridges lock up when trying to enforce cache coherency.
	  When this option is selected, cache coherency will be turned off.
	  Note that this can cause other problems (e.g., stale data being
	  speculatively loaded via a cached mapping).  Use at your own risk.

config MV64X60_BASE
	hex "Set bridge base used by firmware"
	default "0xf1000000"
	help
	  A firmware can leave the base address of the bridge's registers at
	  a non-standard location.  If so, set this value to reflect the
	  address of that non-standard location.

config MV64X60_NEW_BASE
	hex "Set bridge base used by kernel"
	default "0xf1000000"
	help
	  If the current base address of the bridge's registers is not where
	  you want it, set this value to the address that you want it moved to.

endmenu

config NONMONARCH_SUPPORT
	bool "Enable Non-Monarch Support"
	depends on PRPMC800

config HARRIER
	bool
	depends on PRPMC800
	default y

config EPIC_SERIAL_MODE
	bool
	depends on 6xx && (LOPEC || SANDPOINT)
	default y

config MPC10X_BRIDGE
	bool
	depends on POWERPMC250 || LOPEC || SANDPOINT
	select PPC_INDIRECT_PCI
	default y

config MPC10X_OPENPIC
	bool
	depends on POWERPMC250 || LOPEC || SANDPOINT
	default y

config MPC10X_STORE_GATHERING
	bool "Enable MPC10x store gathering"
	depends on MPC10X_BRIDGE

config SANDPOINT_ENABLE_UART1
	bool "Enable DUART mode on Sandpoint"
	depends on SANDPOINT
	help
	  If this option is enabled then the MPC824x processor will run
	  in DUART mode instead of UART mode.

config HARRIER_STORE_GATHERING
	bool "Enable Harrier store gathering"
	depends on HARRIER

config MVME5100_IPMC761_PRESENT
	bool "MVME5100 configured with an IPMC761"
	depends on MVME5100
	select PPC_I8259

config SPRUCE_BAUD_33M
	bool "Spruce baud clock support"
	depends on SPRUCE

config PC_KEYBOARD
	bool "PC PS/2 style Keyboard"
	depends on 4xx || CPM2

config PPCBUG_NVRAM
	bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC
	default y if PPC_PREP

config SMP
	depends on PPC_STD_MMU
	bool "Symmetric multi-processing support"
	---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 IRQ_ALL_CPUS
	bool "Distribute interrupts on all CPUs by default"
	depends on SMP && !MV64360
	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 NR_CPUS
	int "Maximum number of CPUs (2-32)"
	range 2 32
	depends on SMP
	default "4"

config HIGHMEM
	bool "High memory support"

config ARCH_POPULATES_NODE_MAP
	def_bool y

source kernel/Kconfig.hz
source kernel/Kconfig.preempt
source "mm/Kconfig"

source "fs/Kconfig.binfmt"

config PREP_RESIDUAL
	bool "Support for PReP Residual Data"
	depends on PPC_PREP
	help
	  Some PReP systems have residual data passed to the kernel by the
	  firmware.  This allows detection of memory size, devices present and
	  other useful pieces of information.  Sometimes this information is
	  not present or incorrect, in which case it could lead to the machine 
	  behaving incorrectly.  If this happens, either disable PREP_RESIDUAL
	  or pass the 'noresidual' option to the kernel.

	  If you are running a PReP system, say Y here, otherwise say N.

config PROC_PREPRESIDUAL
	bool "Support for reading of PReP Residual Data in /proc"
	depends on PREP_RESIDUAL && PROC_FS
	help
	  Enabling this option will create a /proc/residual file which allows
	  you to get at the residual data on PReP systems.  You will need a tool
	  (lsresidual) to parse it.  If you aren't on a PReP system, you don't
	  want this.

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.

if BROKEN
source kernel/power/Kconfig
endif

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 y

menu "Bus options"

config ISA
	bool "Support for ISA-bus hardware"
	depends on PPC_PREP
	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 or a PReP 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 6xx && !CPM2
	default y

config PPC_I8259
	bool
	default y if 85xx || PPC_PREP
	default n

config PPC_INDIRECT_PCI
	bool
	depends on PCI
	default y if 40x || 44x || 85xx || 83xx || PPC_PREP
	default n

config EISA
	bool
	help
	  The Extended Industry Standard Architecture (EISA) bus is a bus
	  architecture used on some older intel-based PCs.

config SBUS
	bool

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

config PCI
	bool "PCI support" if 40x || CPM2 || 83xx || 85xx || PPC_MPC52xx
	default y if !40x && !CPM2 && !8xx && !83xx && !85xx
	default PCI_QSPAN if !4xx && !CPM2 && 8xx
	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 MPC83xx_PCI2
	bool "Support for 2nd PCI host controller"
	depends on PCI && MPC834x
	default y if MPC834x_SYS

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

config 8260_PCI9
	bool "Enable workaround for MPC826x erratum PCI 9"
	depends on PCI_8260 && !ADS8272
	default y

choice
	prompt "IDMA channel for PCI 9 workaround"
	depends on 8260_PCI9

config 8260_PCI9_IDMA1
	bool "IDMA1"

config 8260_PCI9_IDMA2
	bool "IDMA2"

config 8260_PCI9_IDMA3
	bool "IDMA3"

config 8260_PCI9_IDMA4
	bool "IDMA4"

endchoice

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

config RAPIDIO
	bool "RapidIO support" if MPC8540 || MPC8560
	help
	  If you say Y here, the kernel will include drivers and
	  infrastructure code to support RapidIO interconnect devices.

source "drivers/rapidio/Kconfig"

endmenu

menu "Advanced setup"

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 HIGHMEM_START_BOOL
	bool "Set high memory pool address"
	depends on ADVANCED_OPTIONS && HIGHMEM
	help
	  This option allows you to set the base address of the kernel virtual
	  area used to map high memory pages.  This can be useful in
	  optimizing the layout of kernel virtual memory.

	  Say N here unless you know what you are doing.

config HIGHMEM_START
	hex "Virtual start address of high memory pool" if HIGHMEM_START_BOOL
	default "0xfe000000"

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 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 map low memory (the kernel image will be linked at
	  this address).  This can be useful in optimizing the virtual memory
	  layout of the system.

	  Say N here unless you know what you are doing.

config KERNEL_START
	hex "Virtual address of kernel base" if KERNEL_START_BOOL
	default "0xc0000000"

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"

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

config CONSISTENT_START
	hex "Base virtual address of consistent memory pool" if CONSISTENT_START_BOOL
	default "0xff100000" if NOT_COHERENT_CACHE

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 BOOT_LOAD_BOOL
	bool "Set the boot link/load address"
	depends on ADVANCED_OPTIONS && !PPC_PREP
	help
	  This option allows you to set the initial load address of the zImage
	  or zImage.initrd file.  This can be useful if you are on a board
	  which has a small amount of memory.

	  Say N here unless you know what you are doing.

config BOOT_LOAD
	hex "Link/load address for booting" if BOOT_LOAD_BOOL
	default "0x00400000" if 40x || 8xx || 8260
	default "0x01000000" if 44x
	default "0x00800000"

config PIN_TLB
	bool "Pinned Kernel TLBs (860 ONLY)"
	depends on ADVANCED_OPTIONS && 8xx
endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/ppc/8xx_io/Kconfig"

source "arch/ppc/8260_io/Kconfig"


menu "IBM 40x options"
	depends on 40x

config SERIAL_SICC
	bool "SICC Serial port"
	depends on STB03xxx

config UART1_DFLT_CONSOLE
	bool
	depends on SERIAL_SICC && UART0_TTYS1
	default y

config SERIAL_SICC_CONSOLE
	bool
	depends on SERIAL_SICC && UART0_TTYS1
	default y

endmenu

source "lib/Kconfig"

source "arch/powerpc/oprofile/Kconfig"

source "arch/ppc/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"
