# 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

config INTEL_RAPL
	tristate "Intel RAPL Support via MSR Interface"
	depends on X86 && IOSF_MBI
	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 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
