config PPC_PSERIES
	depends on PPC64 && PPC_BOOK3S
	bool "IBM pSeries & new (POWER5-based) iSeries"
	select MPIC
	select PCI_MSI
	select PPC_XICS
	select PPC_ICP_NATIVE
	select PPC_ICP_HV
	select PPC_ICS_RTAS
	select PPC_I8259
	select PPC_RTAS
	select PPC_RTAS_DAEMON
	select RTAS_ERROR_LOGGING
	select PPC_UDBG_16550
	select PPC_NATIVE
	select PPC_PCI_CHOICE if EXPERT
	default y

config PPC_SPLPAR
	depends on PPC_PSERIES
	bool "Support for shared-processor logical partitions"
	default n
	help
	  Enabling this option will make the kernel run more efficiently
	  on logically-partitioned pSeries systems which use shared
	  processors, that is, which share physical processors between
	  two or more partitions.

config EEH
	bool "PCI Extended Error Handling (EEH)" if EXPERT
	depends on PPC_PSERIES && PCI
	default y if !EXPERT

config PSERIES_MSI
       bool
       depends on PCI_MSI && EEH
       default y

config PSERIES_ENERGY
	tristate "pSeries energy management capabilities driver"
	depends on PPC_PSERIES
	default y
	help
	  Provides interface to platform energy management capabilities
	  on supported PSERIES platforms.
	  Provides: /sys/devices/system/cpu/pseries_(de)activation_hint_list
	  and /sys/devices/system/cpu/cpuN/pseries_(de)activation_hint

config SCANLOG
	tristate "Scanlog dump interface"
	depends on RTAS_PROC && PPC_PSERIES

config IO_EVENT_IRQ
	bool "IO Event Interrupt support"
	depends on PPC_PSERIES
	default y
	help
	  Select this option, if you want to enable support for IO Event
	  interrupts. IO event interrupt is a mechanism provided by RTAS
	  to return information about hardware error and non-error events
	  which may need OS attention. RTAS returns events for multiple
	  event types and scopes. Device drivers can register their handlers
	  to receive events.

	  This option will only enable the IO event platform code. You
	  will still need to enable or compile the actual drivers
	  that use this infrastruture to handle IO event interrupts.

	  Say Y if you are unsure.

config LPARCFG
	bool "LPAR Configuration Data"
	depends on PPC_PSERIES || PPC_ISERIES
	help
	Provide system capacity information via human readable
	<key word>=<value> pairs through a /proc/ppc64/lparcfg interface.

config PPC_PSERIES_DEBUG
	depends on PPC_PSERIES && PPC_EARLY_DEBUG
	bool "Enable extra debug logging in platforms/pseries"
        help
	  Say Y here if you want the pseries core to produce a bunch of
	  debug messages to the system log. Select this if you are having a
	  problem with the pseries core and want to see more of what is
	  going on. This does not enable debugging in lpar.c, which must
	  be manually done due to its verbosity.
	default y

config PPC_SMLPAR
	bool "Support for shared-memory logical partitions"
	depends on PPC_PSERIES
	select LPARCFG
	default n
	help
	  Select this option to enable shared memory partition support.
	  With this option a system running in an LPAR can be given more
	  memory than physically available and will allow firmware to
	  balance memory across many LPARs.

config CMM
	tristate "Collaborative memory management"
	depends on PPC_SMLPAR
	default y
	help
	  Select this option, if you want to enable the kernel interface
	  to reduce the memory size of the system. This is accomplished
	  by allocating pages of memory and put them "on hold". This only
	  makes sense for a system running in an LPAR where the unused pages
	  will be reused for other LPARs. The interface allows firmware to
	  balance memory across many LPARs.

config DTL
	bool "Dispatch Trace Log"
	depends on PPC_SPLPAR && DEBUG_FS
	help
	  SPLPAR machines can log hypervisor preempt & dispatch events to a
	  kernel buffer. Saying Y here will enable logging these events,
	  which are accessible through a debugfs file.

	  Say N if you are unsure.
