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