# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menu "Power Management"

menuconfig PM
	bool "System Power Management"
	depends on SYS_CLOCK_EXISTS && !HAS_NO_PM
	help
	  This option enables the board to implement extra power management
	  policies whenever the kernel becomes idle. The kernel informs the
	  power management subsystem of the number of ticks until the next kernel
	  timer is due to expire.

if PM

module = PM
module-str = System Power Management
source "subsys/logging/Kconfig.template.log_config"

config PM_STATS
	bool "System Power Management Stats"
	depends on STATS
	help
	  Enable System Power Management Stats.

config PM_S2RAM
	bool "Suspend-to-RAM (S2RAM)"
	depends on ARCH_HAS_SUSPEND_TO_RAM
	help
	  This option enables suspend-to-RAM (S2RAM).

choice PM_POLICY
	prompt "Idle State Power Management Policy"
	default PM_POLICY_DEFAULT
	help
	  Select the idle state power management policy.

config PM_POLICY_DEFAULT
	bool "Default PM policy"
	help
	  This option selects the default PM policy. Default policy is based
	  on CPU residency times and other constraints imposed by the drivers or
	  application.

config PM_POLICY_CUSTOM
	bool "Custom PM Policy"
	help
	  This options allows applications to override the default policy with
	  a custom implementation.

endchoice

endif # PM

config HAS_NO_PM
	bool
	help
	  This option blocks selection of PM.  It can be selected in SOC
	  targets where system power management is not supported, for example
	  on support core of a multi-core device where SoC power management is
	  the responsibility of a different core.

config PM_DEVICE
	bool "Device Power Management"
	help
	  This option enables the device power management interface.  The
	  interface consists of hook functions implemented by device drivers
	  that get called by the power manager application when the system
	  is going to suspend state or resuming from suspend state. This allows
	  device drivers to do any necessary power management operations
	  like turning off device clocks and peripherals. The device drivers
	  may also save and restore states in these hook functions.

if PM_DEVICE

module = PM_DEVICE
module-str = Device Power Management
source "subsys/logging/Kconfig.template.log_config"

config PM_DEVICE_POWER_DOMAIN
	bool "Power domain"
	depends on PM_DEVICE
	default y
	help
	  Enable support for Power Domain. With power domain enabled,
	  devices that depend on a domain will be notified when this
	  domain is suspended or resumed.

config PM_DEVICE_POWER_DOMAIN_DYNAMIC
	bool "Dynamically bind devices to a Power Pomain"
	depends on PM_DEVICE_POWER_DOMAIN
	select HAS_DYNAMIC_DEVICE_HANDLES
	help
	  Enable support for dynamically bind devices to a Power Domain.

config PM_DEVICE_POWER_DOMAIN_DYNAMIC_NUM
	int "Number of devices that can dynamically be bind to a Power Domain"
	depends on PM_DEVICE_POWER_DOMAIN_DYNAMIC
	default 1
	help
	  The number of devices that can dynamically be bind to a Power Domain.

config PM_DEVICE_RUNTIME
	bool "Runtime Device Power Management"
	help
	  Enable Runtime Power Management to save power. With device runtime PM
	  enabled, devices can be suspended or resumed based on the device
	  usage even while the CPU or system is running.

config PM_DEVICE_RUNTIME_EXCLUSIVE
	depends on PM_DEVICE_RUNTIME
	bool "Use only on Runtime Power Management on system suspend / resume"
	default y
	help
	  On system suspend / resume do not trigger the Device PM hooks but
	  only rely on Runtime PM to manage the devices power states.

endif # PM_DEVICE

endmenu
