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

menuconfig SYS_POWER_MANAGEMENT
	bool "Power management"
	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 SYS_POWER_MANAGEMENT
choice POWER_MANAGEMENT_CONTROL
	prompt "Power Management Control"
	default PM_CONTROL_APP
	help
	  Select the Application managed or OS managed power saving
	  mechanism.

config PM_CONTROL_APP
	bool
	prompt "Handled at Application level"
	help
	  This option enables the Application to handle all the Power
	  Management flows for the platform.

config PM_CONTROL_OS
	bool
	prompt "Handle at OS level"
	help
	  This option allows the OS to handle all the Power
	  Management flows for the platform.

endchoice # POWER_MANAGEMENT_CONTROL

config SYS_POWER_LOW_POWER_STATE
	bool "Low power state"
	depends on SYS_POWER_LOW_POWER_STATE_SUPPORTED
	help
	  This option enables the kernel to interface with a power manager
	  application.  This permits the system to enter a custom CPU low power
	  state when the kernel becomes idle. The low power state could be any of
	  the CPU low power states supported by the processor.  Generally the one
	  saving most power.

config SYS_POWER_DEEP_SLEEP
	bool "Deep sleep state"
	depends on SYS_POWER_DEEP_SLEEP_SUPPORTED
	help
	  This option enables the kernel to interface with a power manager
	  application. This permits the system to enter a Deep sleep state
	  supported by the SOC where the system clock is turned off while RAM is
	  retained. This state would be entered when the kernel becomes idle for
	  extended periods and would have a high wake latency.  Resume would be
	  from the reset vector same as cold boot. The interface allows
	  restoration of states that were saved at the time of suspend.

config DEVICE_POWER_MANAGEMENT
	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.

config TICKLESS_IDLE
	bool "Tickless idle"
	default y
	help
	  This option suppresses periodic system clock interrupts whenever the
	  kernel becomes idle. This permits the system to remain in a power
	  saving state for extended periods without having to wake up to
	  service each tick as it occurs.

config TICKLESS_IDLE_THRESH
	int "Tickless idle threshold"
	default 3
	depends on TICKLESS_IDLE
	help
	  This option enables clock interrupt suppression when the kernel idles
	  for only a short period of time. It specifies the minimum number of
	  ticks that must occur before the next kernel timer expires in order
	  for suppression to happen.

config TICKLESS_KERNEL
	bool "Tickless kernel"
	depends on TICKLESS_IDLE
	help
	  This option enables a fully event driven kernel. Periodic system
	  clock interrupt generation would be stopped at all times. This option
	  requires Tickless Idle option to be enabled.

config TICKLESS_KERNEL_TIME_UNIT_IN_MICRO_SECS
	int "Tickless kernel time unit in micro seconds"
	default 1000
	depends on TICKLESS_KERNEL
	help
	  This option makes the system clock and scheduling granularity.
	  The default will be one millisecond. This option also determines
	  the time unit passed in functions like _sys_soc_suspend. The
	  value should be determined based what the timer hardware and driver
	  can support. Specifying too small a time unit than what the overall
	  system speed can support would cause scheduling errors.

config BUSY_WAIT_USES_ALTERNATE_CLOCK
	bool "Busy wait uses alternate clock in tickless kernel mode"
	help
	  In tickless kernel mode, the system clock will be stopped when
	  there are no timer events programmed. If the system clock is to
	  be used to keep time e.g. to get a delta of time cycles then it
	  needs to be turned on using provided APIs. Some platforms have
	  alternate clocks which can be used instead. In that case this flag
	  would be set to true. This flag would be checked before turning
	  on the system clock in APIs that do busy wait reading clock
	  cycles.
endif
