# SPDX-License-Identifier: GPL-2.0
config PPC_PSERIES
	depends on PPC64 && PPC_BOOK3S
	bool "IBM pSeries & new (POWER5-based) iSeries"
	select HAVE_PCSPKR_PLATFORM
	select MPIC
	select OF_DYNAMIC
	select PCI
	select PCI_MSI
	select PPC_XICS
	select PPC_XIVE_SPAPR
	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_DOORBELL
	select HOTPLUG_CPU
	select ARCH_RANDOM
	select PPC_DOORBELL
	select FORCE_SMP
	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 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.

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 infrastructure to handle IO event interrupts.

	  Say Y if you are unsure.

config LPARCFG
	bool "LPAR Configuration Data"
	depends on PPC_PSERIES
	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 HV_PERF_CTRS
       bool "Hypervisor supplied PMU events (24x7 & GPCI)"
       default y
       depends on PERF_EVENTS && PPC_PSERIES
       help
	  Enable access to hypervisor supplied counters in perf. Currently,
	  this enables code that uses the hcall GetPerfCounterInfo and 24x7
	  interfaces to retrieve counters. GPCI exists on Power 6 and later
	  systems. 24x7 is available on Power 8 and later systems.

          If unsure, select Y.

config IBMVIO
	depends on PPC_PSERIES
	bool
	default y

config IBMEBUS
	depends on PPC_PSERIES && !CPU_LITTLE_ENDIAN
	bool "Support for GX bus based adapters"
	help
	  Bus device driver for GX bus based adapters.
