When core is suspended and power mode has non zero exit_latency_us a system timeout will be rescheduled to a point in time that is earlier by exit_latency_us than request. It is to accommodate for lengthy resuming procedure which would cause requested timeout to be significantly late. However, setting additional wake up point has cost, it is one more redundant core wake up and that impacts performance and power consumption. Add Kconfig option to chose what conversion method is used. It has the biggest impact on small exit_latency_us where conversion may result in 0 ticks (no pre-wake up) or 1 tick (wake up). Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
145 lines
4.2 KiB
Plaintext
145 lines
4.2 KiB
Plaintext
# 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.
|
|
|
|
choice PM_PREWAKEUP_CONV_MODE
|
|
prompt "Pre-wakeup microseconds to ticks conversion method"
|
|
default PM_PREWAKEUP_CONV_MODE_NEAR
|
|
help
|
|
Exit latency for each power state is given in microseconds. It is converted
|
|
to ticks and system clock is set to wake up the core earlier before scheduled
|
|
wake up. This option specifies rounding that is used when converting exit
|
|
latency from microseconds to system ticks.
|
|
|
|
config PM_PREWAKEUP_CONV_MODE_NEAR
|
|
bool "Nearest"
|
|
|
|
config PM_PREWAKEUP_CONV_MODE_CEIL
|
|
bool "Round up"
|
|
|
|
config PM_PREWAKEUP_CONV_MODE_FLOOR
|
|
bool "Round down"
|
|
|
|
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 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_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
|
|
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
|