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

menu "Power Management"

config HAS_PM
	bool
	help
	  This option must be selected by SoCs that provide PM hooks, that is,
	  calls to configure low-power states.

config PM
	bool "System Power Management"
	depends on SYS_CLOCK_EXISTS && HAS_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).

config PM_S2RAM_CUSTOM_MARKING
	bool "Use custom marking functions"
	depends on PM_S2RAM
	help
	  By default a magic word in RAM is used to mark entering suspend-to-RAM. Enabling
	  this option allows custom implementation of functions which handles the marking.

config PM_NEED_ALL_DEVICES_IDLE
	bool "System Low Power Mode Needs All Devices Idle"
	depends on PM_DEVICE && !SMP
	help
	  When this option is enabled, check that no devices are busy before
	  entering into system low power mode.

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 PM_DEVICE
	bool "Device Power Management"
	help
	  This option enables the device power management interface.  The
	  interface implemented by device drivers are called by the power
	  management subsystem. This allows device drivers to do any
	  necessary power management operations like turning off
	  device clocks and peripherals. 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 && DEVICE_DEPS_DYNAMIC
	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"
	select EVENTS
	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 "[DEPRECATED] Use only on Runtime Power Management on system suspend / resume"
	default y
	select DEPRECATED
	help
	  On system suspend / resume do not trigger the Device PM hooks but
	  only rely on Runtime PM to manage the devices power states.

config PM_DEVICE_SHELL
	bool "Device Power Management shell"
	depends on SHELL
	help
	  Enable the device power management shell, for triggering device power
	  management events through the shell interface.

config PM_DEVICE_SYSTEM_MANAGED
	bool "System-Managed Device Power Management"
	default y if !PM_DEVICE_RUNTIME_EXCLUSIVE
	default y if !PM_DEVICE_RUNTIME
	help
	  This option enables the system-managed device power
	  management.  The power management subsystem will suspend
	  devices before entering a low power state. Conversely, after
	  the core wakes up from low power mode all suspended devices
	  are resumed.


endif # PM_DEVICE

endmenu
