# SPDX-License-Identifier: GPL-2.0-only
#
# Generic power capping sysfs interface configuration
#

menuconfig POWERCAP
	bool "Generic powercap sysfs driver"
	help
	  The power capping sysfs interface allows kernel subsystems to expose power
	  capping settings to user space in a consistent way.  Usually, it consists
	  of multiple control types that determine which settings may be exposed and
	  power zones representing parts of the system that can be subject to power
	  capping.

	  If you want this code to be compiled in, say Y here.

if POWERCAP
# Client driver configurations go here.
config INTEL_RAPL_CORE
	tristate
	depends on PCI
	select IOSF_MBI

config INTEL_RAPL
	tristate "Intel RAPL Support via MSR Interface"
	depends on X86 && PCI
	select INTEL_RAPL_CORE
	help
	  This enables support for the Intel Running Average Power Limit (RAPL)
	  technology via MSR interface, which allows power limits to be enforced
	  and monitored on modern Intel processors (Sandy Bridge and later).

	  In RAPL, the platform level settings are divided into domains for
	  fine grained control. These domains include processor package, DRAM
	  controller, CPU core (Power Plane 0), graphics uncore (Power Plane
	  1), etc.

config INTEL_RAPL_TPMI
	tristate "Intel RAPL Support via TPMI Interface"
	depends on X86
	depends on INTEL_TPMI
	select INTEL_RAPL_CORE
	help
	  This enables support for the Intel Running Average Power Limit (RAPL)
	  technology via TPMI interface, which allows power limits to be enforced
	  and monitored.

	  In RAPL, the platform level settings are divided into domains for
	  fine grained control. These domains include processor package, DRAM
	  controller, platform, etc.

config IDLE_INJECT
	bool "Idle injection framework"
	depends on CPU_IDLE
	default n
	help
	  This enables support for the idle injection framework. It
	  provides a way to force idle periods on a set of specified
	  CPUs for power capping. Idle period can be injected
	  synchronously on a set of specified CPUs or alternatively
	  on a per CPU basis.

config ARM_SCMI_POWERCAP
	tristate "ARM SCMI Powercap driver"
	depends on ARM_SCMI_PROTOCOL
	help
	  This enables support for the ARM Powercap based on ARM SCMI
	  Powercap protocol.

	  ARM SCMI Powercap protocol allows power limits to be enforced
	  and monitored against the SCMI Powercap domains advertised as
	  available by the SCMI platform firmware.

	  When compiled as module it will be called arm_scmi_powercap.ko.

config DTPM
	bool "Power capping for Dynamic Thermal Power Management (EXPERIMENTAL)"
	depends on OF
	help
	  This enables support for the power capping for the dynamic
	  thermal power management userspace engine.

config DTPM_CPU
	bool "Add CPU power capping based on the energy model"
	depends on DTPM && ENERGY_MODEL
	help
	  This enables support for CPU power limitation based on
	  energy model.

config DTPM_DEVFREQ
	bool "Add device power capping based on the energy model"
	depends on DTPM && ENERGY_MODEL
	help
	  This enables support for device power limitation based on
	  energy model.
endif
