Power Manager Device Interface Functions More...
#include <stdint.h>
#include "sw/device/lib/base/mmio.h"
#include "sw/device/lib/dif/dif_warn_unused_result.h"
Go to the source code of this file.
Data Structures | |
struct | dif_pwrmgr_params |
Hardware instantiation parameters for power manager. More... | |
struct | dif_pwrmgr |
A handle to power manager. More... | |
struct | dif_pwrmgr_wakeup_reason |
Wakeup types and requests from sources since the last time recording started. More... | |
Typedefs | |
typedef enum dif_pwrmgr_toggle | dif_pwrmgr_toggle_t |
Enumeration for enabling/disabling various functionality. | |
typedef struct dif_pwrmgr_params | dif_pwrmgr_params_t |
Hardware instantiation parameters for power manager. More... | |
typedef struct dif_pwrmgr | dif_pwrmgr_t |
A handle to power manager. More... | |
typedef enum dif_pwrmgr_req_type | dif_pwrmgr_req_type_t |
A request type, i.e. More... | |
typedef enum dif_pwrmgr_domain_option | dif_pwrmgr_domain_option_t |
Options for enabling/disabling various clock and power domains in low and active power states. More... | |
typedef uint8_t | dif_pwrmgr_domain_config_t |
A set of domain options. More... | |
typedef enum dif_pwrmgr_wakeup_request_source | dif_pwrmgr_wakeup_request_source_t |
A wakeup request source. More... | |
typedef enum dif_pwrmgr_reset_request_source | dif_pwrmgr_reset_request_source_t |
A reset request source. More... | |
typedef uint32_t | dif_pwrmgr_request_sources_t |
A set of request sources. More... | |
typedef enum dif_pwrmgr_wakeup_type | dif_pwrmgr_wakeup_type_t |
A wakeup type. More... | |
typedef uint8_t | dif_pwrmgr_wakeup_types_t |
A set of wakeup types. More... | |
typedef struct dif_pwrmgr_wakeup_reason | dif_pwrmgr_wakeup_reason_t |
Wakeup types and requests from sources since the last time recording started. | |
typedef enum dif_pwrmgr_result | dif_pwrmgr_result_t |
Result of a power manager operation. | |
typedef enum dif_pwrmgr_config_result | dif_pwrmgr_config_result_t |
Result of a power manager operation that writes to lockable configuration registers. | |
typedef enum dif_pwrmgr_irq | dif_pwrmgr_irq_t |
Power manager interrupts. | |
typedef uint32_t | dif_pwrmgr_irq_snapshot_t |
A snapshot of the enablement state of power manager interrupts. More... | |
Enumerations | |
enum | dif_pwrmgr_toggle { kDifPwrmgrToggleEnabled, kDifPwrmgrToggleDisabled } |
Enumeration for enabling/disabling various functionality. More... | |
enum | dif_pwrmgr_req_type { kDifPwrmgrReqTypeWakeup, kDifPwrmgrReqTypeReset } |
A request type, i.e. More... | |
enum | dif_pwrmgr_domain_option { kDifPwrmgrDomainOptionCoreClockInLowPower = (1u << 0), kDifPwrmgrDomainOptionIoClockInLowPower = (1u << 1), kDifPwrmgrDomainOptionUsbClockInLowPower = (1u << 2), kDifPwrmgrDomainOptionUsbClockInActivePower = (1u << 3), kDifPwrmgrDomainOptionMainPowerInLowPower = (1u << 4) } |
Options for enabling/disabling various clock and power domains in low and active power states. More... | |
enum | dif_pwrmgr_wakeup_request_source { kDifPwrmgrWakeupRequestSourceOne = (1u << 0), kDifPwrmgrWakeupRequestSourceTwo = (1u << 1), kDifPwrmgrWakeupRequestSourceThree = (1u << 2), kDifPwrmgrWakeupRequestSourceFour = (1u << 3) } |
A wakeup request source. More... | |
enum | dif_pwrmgr_reset_request_source { kDifPwrmgrResetRequestSourceOne = (1u << 0) } |
A reset request source. More... | |
enum | dif_pwrmgr_wakeup_type { kDifPwrmgrWakeupTypeRequest = (1u << 0), kDifPwrmgrWakeupTypeFallThrough = (1u << 1), kDifPwrmgrWakeupTypeAbort = (1u << 2) } |
A wakeup type. More... | |
enum | dif_pwrmgr_result { kDifPwrmgrOk = 0, kDifPwrmgrError = 1, kDifPwrmgrBadArg = 2 } |
Result of a power manager operation. More... | |
enum | dif_pwrmgr_config_result { kDifPwrmgrConfigOk = kDifPwrmgrOk, kDifPwrmgrConfigError = kDifPwrmgrError, kDifPwrmgrConfigBadArg = kDifPwrmgrBadArg, kDifPwrMgrConfigLocked } |
Result of a power manager operation that writes to lockable configuration registers. More... | |
enum | dif_pwrmgr_irq { kDifPwrmgrIrqWakeup = 0, kDifPwrmgrIrqLast = kDifPwrmgrIrqWakeup } |
Power manager interrupts. More... | |
Power Manager Device Interface Functions
Definition in file dif_pwrmgr.h.
struct dif_pwrmgr_params |
Hardware instantiation parameters for power manager.
This struct describes information about the underlying hardware that is not determined until the hardware design is used as part of a top-level design.
Definition at line 44 of file dif_pwrmgr.h.
Data Fields | ||
---|---|---|
mmio_region_t | base_addr | Base address of power manager registers. |
struct dif_pwrmgr |
A handle to power manager.
This type should be treated as opaque by users.
Definition at line 56 of file dif_pwrmgr.h.
Data Fields | ||
---|---|---|
dif_pwrmgr_params_t | params | Hardware instantiation parameters. |
struct dif_pwrmgr_wakeup_reason |
Wakeup types and requests from sources since the last time recording started.
Definition at line 198 of file dif_pwrmgr.h.
Data Fields | ||
---|---|---|
dif_pwrmgr_request_sources_t | request_sources | Sources that requested wakeup since the last time recording started. |
dif_pwrmgr_wakeup_types_t | types | Wakeup types since the last time recording started. |
typedef uint8_t dif_pwrmgr_domain_config_t |
A set of domain options.
This type is used for specifying and querying which clock and power domains are enabled in low and active power states.
See also: dif_pwrmgr_domain_option_t
.
Definition at line 116 of file dif_pwrmgr.h.
typedef enum dif_pwrmgr_domain_option dif_pwrmgr_domain_option_t |
Options for enabling/disabling various clock and power domains in low and active power states.
Constants below are bitmasks that can be combined to define configurations.
See also: dif_pwrmgr_domain_config_t
.
typedef uint32_t dif_pwrmgr_irq_snapshot_t |
A snapshot of the enablement state of power manager interrupts.
This is an opaque type, to be used with the dif_pwrmgr_irq_disable_all()
and dif_pwrmgr_irq_restore_all()
functions.
Definition at line 276 of file dif_pwrmgr.h.
typedef struct dif_pwrmgr_params dif_pwrmgr_params_t |
Hardware instantiation parameters for power manager.
This struct describes information about the underlying hardware that is not determined until the hardware design is used as part of a top-level design.
typedef enum dif_pwrmgr_req_type dif_pwrmgr_req_type_t |
A request type, i.e.
wakeup or reset.
typedef uint32_t dif_pwrmgr_request_sources_t |
A set of request sources.
This type is used for specifying which request sources are enabled for a particular request type, i.e. wakeup or reset, as well querying wakeup reasons.
See also: dif_pwrmgr_wakeup_request_source_t
, dif_pwrmgr_reset_request_source_t
.
Definition at line 159 of file dif_pwrmgr.h.
A reset request source.
Constants below are bitmasks that can be used to define sets of reset request sources.
See also: dif_pwrmgr_request_sources_t
.
Note: This needs to be updated once the HW is finalized.
typedef struct dif_pwrmgr dif_pwrmgr_t |
A handle to power manager.
This type should be treated as opaque by users.
A wakeup request source.
Constants below are bitmasks that can be used to define sets of wakeup request sources.
See also: dif_pwrmgr_request_sources_t
.
Note: This needs to be updated once the HW is finalized.
typedef enum dif_pwrmgr_wakeup_type dif_pwrmgr_wakeup_type_t |
A wakeup type.
Constants below are bitmasks that can be used to define sets of wakeup types.
See also: dif_pwrmgr_wakeup_types_t
.
typedef uint8_t dif_pwrmgr_wakeup_types_t |
A set of wakeup types.
See also: dif_pwrmgr_wakeup_type_t
.
Definition at line 193 of file dif_pwrmgr.h.
Result of a power manager operation that writes to lockable configuration registers.
Definition at line 233 of file dif_pwrmgr.h.
Options for enabling/disabling various clock and power domains in low and active power states.
Constants below are bitmasks that can be combined to define configurations.
See also: dif_pwrmgr_domain_config_t
.
Definition at line 85 of file dif_pwrmgr.h.
enum dif_pwrmgr_irq |
Power manager interrupts.
Enumerator | |
---|---|
kDifPwrmgrIrqWakeup | The device woke up from low power state. Note: This interrupt is not triggered during power-on reset. |
Definition at line 257 of file dif_pwrmgr.h.
enum dif_pwrmgr_req_type |
A request type, i.e.
wakeup or reset.
Enumerator | |
---|---|
kDifPwrmgrReqTypeWakeup | A wakeup request. |
kDifPwrmgrReqTypeReset | A reset request. |
Definition at line 66 of file dif_pwrmgr.h.
A reset request source.
Constants below are bitmasks that can be used to define sets of reset request sources.
See also: dif_pwrmgr_request_sources_t
.
Note: This needs to be updated once the HW is finalized.
Definition at line 145 of file dif_pwrmgr.h.
enum dif_pwrmgr_result |
Result of a power manager operation.
Definition at line 212 of file dif_pwrmgr.h.
enum dif_pwrmgr_toggle |
Enumeration for enabling/disabling various functionality.
Enumerator | |
---|---|
kDifPwrmgrToggleEnabled | Enabled state. |
kDifPwrmgrToggleDisabled | Disabled state. |
Definition at line 26 of file dif_pwrmgr.h.
A wakeup request source.
Constants below are bitmasks that can be used to define sets of wakeup request sources.
See also: dif_pwrmgr_request_sources_t
.
Note: This needs to be updated once the HW is finalized.
Definition at line 128 of file dif_pwrmgr.h.
A wakeup type.
Constants below are bitmasks that can be used to define sets of wakeup types.
See also: dif_pwrmgr_wakeup_types_t
.
Definition at line 168 of file dif_pwrmgr.h.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_get_current_request_sources | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_req_type_t | req_type, | ||
dif_pwrmgr_request_sources_t * | sources | ||
) |
Gets request sources that are currently active for a request type.
pwrmgr | A power manager handle. | |
req_type | A request type. | |
[out] | sources | Request sources that are currently active for the given request type. |
Definition at line 370 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_get_domain_config | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_domain_config_t * | config | ||
) |
Gets current power manager configuration.
pwrmgr | A power manager handle. | |
[out] | config | Current configuration. |
Definition at line 314 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_get_request_sources | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_req_type_t | req_type, | ||
dif_pwrmgr_request_sources_t * | sources | ||
) |
Gets sources enabled for a request type.
A wakeup or reset request can be triggered by multiple sources, e.g. GPIO, watchdog timer, USB, etc. This function gets which sources are enabled for a particular request type.
pwrmgr | A power manager handle. | |
req_type | A request type. | |
[out] | sources | Sources enabled for the given request type. |
Definition at line 355 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_init | ( | dif_pwrmgr_params_t | params, |
dif_pwrmgr_t * | pwrmgr | ||
) |
Creates a new handle for power manager.
This function does not actuate the hardware.
params | Hardware instantiation parameters. | |
[out] | pwrmgr | Out-param for the initialized handle. |
Definition at line 239 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_acknowledge | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_t | irq | ||
) |
Acknowledges a particular interrupt, indicating to the hardware that it has been successfully serviced.
pwrmgr | A power manager handle. |
irq | An interrupt type. |
Definition at line 504 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_disable_all | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_snapshot_t * | snapshot | ||
) |
Disables all interrupts, optionally snapshotting all toggle state for later restoration.
pwrmgr | A power manager handle. | |
[out] | snapshot | Out-param for the snapshot; may be NULL . |
Definition at line 565 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_force | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_t | irq | ||
) |
Forces a particular interrupt, causing it to be serviced as if hardware had asserted it.
pwrmgr | A power manager handle. |
irq | An interrupt type. |
Definition at line 552 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_get_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_t | irq, | ||
dif_pwrmgr_toggle_t * | state | ||
) |
Checks whether a particular interrupt is currently enabled or disabled.
pwrmgr | A power manager handle. | |
irq | An interrupt type. | |
[out] | state | Out-param toggle state of the interrupt. |
Definition at line 517 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_is_pending | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_t | irq, | ||
bool * | is_pending | ||
) |
Returns whether a particular interrupt is currently pending.
pwrmgr | A power manager handle. | |
irq | An interrupt type. | |
[out] | is_pending | Out-param for whether the interrupt is pending. |
Definition at line 490 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_restore_all | ( | const dif_pwrmgr_t * | pwrmgr, |
const dif_pwrmgr_irq_snapshot_t * | snapshot | ||
) |
Restores interrupts from the given snapshot.
This function can be used with dif_pwrmgr_irq_disable_all()
to temporary interrupt save-and-restore.
pwrmgr | A power manager handle. |
snapshot | A snapshot to restore from. |
Definition at line 581 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_irq_set_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_irq_t | irq, | ||
dif_pwrmgr_toggle_t | state | ||
) |
Sets whether a particular interrupt is currently enabled or disabled.
pwrmgr | A power manager handle. |
irq | An interrupt type. |
state | The new toggle state for the interrupt. |
Definition at line 531 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_low_power_get_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_toggle_t * | cur_state | ||
) |
Checks whether low power state is enabled.
pwrmgr | A power manager handle. | |
[out] | cur_state | Whether low power state is enabled. |
Definition at line 278 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_config_result_t dif_pwrmgr_low_power_set_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_toggle_t | new_state | ||
) |
Enables or disables low power state.
When enabled, the power manager transitions to low power state on the next wait for interrupt (WFI) instruction. Since the hardware clears the corresponding bit automatically, this function must be called before each transition to low power state.
Note: This function also syncs changes to the slow clock domain for them to take effect.
pwrmgr | A power manager handle. |
new_state | Whether low power state is enabled. |
Definition at line 250 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_request_sources_is_locked | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_req_type_t | req_type, | ||
bool * | is_locked | ||
) |
Checks whether sources of a request type is locked.
pwrmgr | A power manager handle. | |
req_type | A request type. | |
[out] | is_locked | Whether sources of the given request type is locked. |
Definition at line 399 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_request_sources_lock | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_req_type_t | req_type | ||
) |
Locks sources of a request type.
Once the sources of a particular request type is locked, they cannot be changed until the hardware is reset.
pwrmgr | A power manager handle. |
req_type | A request type. |
Definition at line 385 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_config_result_t dif_pwrmgr_set_domain_config | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_domain_config_t | config | ||
) |
Configures power manager to enable/disable various clock and power domains in low and active power states.
Note: This function also syncs changes to the slow clock domain for them to take effect.
pwrmgr | A power manager handle. |
config | A domain configuration. |
Definition at line 292 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_config_result_t dif_pwrmgr_set_request_sources | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_req_type_t | req_type, | ||
dif_pwrmgr_request_sources_t | sources | ||
) |
Sets sources enabled for a request type.
A wakeup or reset request can be triggered by multiple sources, e.g. GPIO, watchdog timer, USB, etc. This function sets which sources are enabled for a particular request type.
Note: This function also syncs changes to the slow clock domain for them to take effect.
pwrmgr | A power manager handle. |
req_type | A request type. |
sources | Sources enabled for the given request type. |
Definition at line 327 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_wakeup_reason_clear | ( | const dif_pwrmgr_t * | pwrmgr | ) |
Clears wakeup reason(s) recorded since the last time recording started.
pwrmgr | A power manager handle. |
Definition at line 479 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_wakeup_reason_get | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_wakeup_reason_t * | reason | ||
) |
Gets wakeup reason and source requests since the last time recording started.
Power manager automatically starts recording wakeup requests when it begins a valid low power entry. Recording continues until it is explicitly disabled by calling dif_pwrmgr_wakeup_request_recording_set_enabled
. Thus, it is possible to record wakeup requests from multiple sources as well as multiple wakeup types.
pwrmgr | A power manager handle. | |
[out] | reason | Wakeup reasons. |
Definition at line 448 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_wakeup_request_recording_get_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_toggle_t * | cur_state | ||
) |
Checks whether wakeup requests are being recorded.
pwrmgr | A power manager handle. | |
[out] | cur_state | Whether wakeup requests are being recorded. |
Definition at line 433 of file dif_pwrmgr.c.
DIF_WARN_UNUSED_RESULT dif_pwrmgr_result_t dif_pwrmgr_wakeup_request_recording_set_enabled | ( | const dif_pwrmgr_t * | pwrmgr, |
dif_pwrmgr_toggle_t | new_state | ||
) |
Enables or disables recording of wakeup requests.
Power manager automatically starts recording wakeup requests when it begins a valid low power entry. Recording continues until it is explicitly disabled by calling this function.
pwrmgr | A power manager handle. |
new_state | Whether wakeup requests should be recorded. |
Definition at line 411 of file dif_pwrmgr.c.