power_mgmt: APIs for devices to signal busy
Certain Low power SOC states (e.g. deep sleep) will result in device IP blocks losing state. In such a scenario it can be useful to have a mechanism for devices (driver code) to signal the power manager / policy that they are in the middle of a transaction. We expect the device driver code to make a call to device_busy_set(device *) before initiating a transaction and device_busy_clear(device *) on completion. It is expected that device driver developers will add this as necessary in their drivers. Further an API is provided for power manager application / policy to check this. Based on this the power manager / policy can decide whether or not to go into a particular power state. Change-Id: I0fedd90b98e182cd41b53c7f9e08655532822faa Signed-off-by: Jithu Joseph <jithu.joseph@intel.com>
This commit is contained in:
parent
35360df9be
commit
592882e5f4
4 changed files with 110 additions and 1 deletions
|
@ -45,6 +45,24 @@
|
|||
|
||||
#ifdef _LINKER
|
||||
|
||||
|
||||
/*
|
||||
* Space for storing per device busy bitmap. Since we do not know beforehand
|
||||
* the number of devices, we go through the below mechanism to allocate the
|
||||
* required space.
|
||||
*/
|
||||
#ifdef CONFIG_DEVICE_POWER_MANAGEMENT
|
||||
#define DEVICE_COUNT ((__device_init_end - __device_init_start) / __DEVICE_STR_SIZEOF)
|
||||
#define DEV_BUSY_SZ (((DEVICE_COUNT + 31) / 32) * 4)
|
||||
#define DEVICE_BUSY_BITFIELD() \
|
||||
FILL(0x00) ; \
|
||||
__device_busy_start = .; \
|
||||
. = . + DEV_BUSY_SZ; \
|
||||
__device_busy_end = .;
|
||||
#else
|
||||
#define DEVICE_BUSY_BITFIELD()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* generate a symbol to mark the start of the device initialization objects for
|
||||
* the specified level, then link all of those objects (sorted by priority);
|
||||
|
@ -69,7 +87,8 @@
|
|||
DEVICE_INIT_LEVEL(NANOKERNEL) \
|
||||
DEVICE_INIT_LEVEL(MICROKERNEL) \
|
||||
DEVICE_INIT_LEVEL(APPLICATION) \
|
||||
__device_init_end = .; \
|
||||
__device_init_end = .; \
|
||||
DEVICE_BUSY_BITFIELD() \
|
||||
|
||||
|
||||
/* define a section for undefined device initialization levels */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue