# 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.

rsource "policy/Kconfig"

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 handle 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.

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 Domain"
	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"
	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 && !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
