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

menuconfig SYS_POWER_MANAGEMENT
	bool
	prompt "Power management"
	default n
	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
config SYS_POWER_LOW_POWER_STATE
	bool
	prompt "Low power state"
	default n
	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
	prompt "Deep sleep state"
	default n
	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
	prompt "Device power management"
	default n
	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
	prompt "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
	prompt "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
	prompt "Tickless kernel"
	default n
	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
	prompt "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
	prompt "Busy wait uses alternate clock in tickless kernel mode"
	default n
	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
