# 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
	select HAVE_IDE
	select HAVE_OPROFILE
	select HAVE_KPROBES

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"
	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), 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 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"
	select PPC_LIB_RHEAP

endchoice

config PPC_FPU
	bool

config PPC_DCR_NATIVE
	bool
	default n

config PPC_DCR
	bool
	depends on PPC_DCR_NATIVE
	default y

config PTE_64BIT
	bool
	depends on 44x
	default y if 44x

config PHYS_64BIT
	bool
	depends on 44x
	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
	---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 TAU
	bool "Thermal Management Support"
	depends on 6xx && !8260
	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
	---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

config PPC_STD_MMU
	bool
	depends on 6xx
	default y

config NOT_COHERENT_CACHE
	bool
	depends on 4xx || 8xx
	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 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 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
	select PPC_LIB_RHEAP
	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
	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 PPC_PREP
	default n

config PPC_INDIRECT_PCI
	bool
	depends on PCI
	default y if 40x || 44x || 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 || PPC_MPC52xx
	default y if !40x && !CPM2 && !8xx
	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 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

config PPC_LIB_RHEAP
	bool

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/ppc/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"
