From 80c1460f9b82f9e16d7bc17d36b3892f41287812 Mon Sep 17 00:00:00 2001 From: Marcin Maka Date: Wed, 4 Sep 2019 13:15:17 +0200 Subject: [PATCH] pm-runtime: add pm runtime active, enable, disable interfaces PM enable and disable is an interface to control the power management of a resource. PM is_active is an interface to query the pm management status of the resource. Signed-off-by: Marcin Maka --- src/include/sof/lib/pm_runtime.h | 26 +++++++++++++++ src/lib/pm_runtime.c | 32 +++++++++++++++++++ .../include/platform/lib/pm_runtime.h | 5 +++ .../include/platform/lib/pm_runtime.h | 12 +++++++ .../include/platform/lib/pm_runtime.h | 6 ++++ .../haswell/include/platform/lib/pm_runtime.h | 12 +++++++ .../icelake/include/platform/lib/pm_runtime.h | 6 ++++ .../imx8/include/platform/lib/pm_runtime.h | 12 +++++++ src/platform/intel/cavs/lib/pm_runtime.c | 21 ++++++++++++ .../include/platform/lib/pm_runtime.h | 6 ++++ .../include/platform/lib/pm_runtime.h | 6 ++++ 11 files changed, 144 insertions(+) diff --git a/src/include/sof/lib/pm_runtime.h b/src/include/sof/lib/pm_runtime.h index 2b6dcb48a..6f80e955d 100644 --- a/src/include/sof/lib/pm_runtime.h +++ b/src/include/sof/lib/pm_runtime.h @@ -93,6 +93,32 @@ void pm_runtime_put(enum pm_runtime_context context, uint32_t index); */ void pm_runtime_put_sync(enum pm_runtime_context context, uint32_t index); +/** + * \brief Enables power management operations for the resource. + * + * \param[in] context Type of power management context. + * \param[in] index Index of the device. + */ +void pm_runtime_enable(enum pm_runtime_context context, uint32_t index); + +/** + * \brief Disables power management operations for the resource. + * + * \param[in] context Type of power management context. + * \param[in] index Index of the device. + */ +void pm_runtime_disable(enum pm_runtime_context context, uint32_t index); + +/** + * \brief Reports state of the power managed resource. + * + * @param context Type of power management context. + * @param index Index of the resource. + * + * @return true if the resource is active or pm disabled, false otherwise. + */ +bool pm_runtime_is_active(enum pm_runtime_context context, uint32_t index); + /** @}*/ #endif /* __SOF_LIB_PM_RUNTIME_H__ */ diff --git a/src/lib/pm_runtime.c b/src/lib/pm_runtime.c index b7ac1cc05..e716d0768 100644 --- a/src/lib/pm_runtime.c +++ b/src/lib/pm_runtime.c @@ -72,3 +72,35 @@ void pm_runtime_put_sync(enum pm_runtime_context context, uint32_t index) break; } } + +void pm_runtime_enable(enum pm_runtime_context context, uint32_t index) +{ + tracev_pm("pm_runtime_enable()"); + + switch (context) { + default: + platform_pm_runtime_enable(context, index); + break; + } +} + +void pm_runtime_disable(enum pm_runtime_context context, uint32_t index) +{ + tracev_pm("pm_runtime_disable()"); + + switch (context) { + default: + platform_pm_runtime_disable(context, index); + break; + } +} + +bool pm_runtime_is_active(enum pm_runtime_context context, uint32_t index) +{ + tracev_pm("pm_runtime_is_active()"); + + switch (context) { + default: + return platform_pm_runtime_is_active(context, index); + } +} diff --git a/src/platform/apollolake/include/platform/lib/pm_runtime.h b/src/platform/apollolake/include/platform/lib/pm_runtime.h index 95962289e..74670e099 100644 --- a/src/platform/apollolake/include/platform/lib/pm_runtime.h +++ b/src/platform/apollolake/include/platform/lib/pm_runtime.h @@ -44,6 +44,11 @@ void platform_pm_runtime_get(uint32_t context, uint32_t index, uint32_t flags); */ void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags); +void platform_pm_runtime_enable(uint32_t context, uint32_t index); + +void platform_pm_runtime_disable(uint32_t context, uint32_t index); + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index); /** * \brief Power gates platform specific hardware resources. diff --git a/src/platform/baytrail/include/platform/lib/pm_runtime.h b/src/platform/baytrail/include/platform/lib/pm_runtime.h index dad9b5be5..16deb3e91 100644 --- a/src/platform/baytrail/include/platform/lib/pm_runtime.h +++ b/src/platform/baytrail/include/platform/lib/pm_runtime.h @@ -46,6 +46,18 @@ static inline void platform_pm_runtime_get(uint32_t context, uint32_t index, static inline void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags) { } +static inline void platform_pm_runtime_enable(uint32_t context, + uint32_t index) {} + +static inline void platform_pm_runtime_disable(uint32_t context, + uint32_t index) {} + +static inline bool platform_pm_runtime_is_active(uint32_t context, + uint32_t index) +{ + return false; +} + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else diff --git a/src/platform/cannonlake/include/platform/lib/pm_runtime.h b/src/platform/cannonlake/include/platform/lib/pm_runtime.h index b93d1a521..edda6e691 100644 --- a/src/platform/cannonlake/include/platform/lib/pm_runtime.h +++ b/src/platform/cannonlake/include/platform/lib/pm_runtime.h @@ -43,6 +43,12 @@ void platform_pm_runtime_get(uint32_t context, uint32_t index, uint32_t flags); */ void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags); +void platform_pm_runtime_enable(uint32_t context, uint32_t index); + +void platform_pm_runtime_disable(uint32_t context, uint32_t index); + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index); + /** * \brief Power gates platform specific hardware resources. */ diff --git a/src/platform/haswell/include/platform/lib/pm_runtime.h b/src/platform/haswell/include/platform/lib/pm_runtime.h index a28e143ab..7ab3b8458 100644 --- a/src/platform/haswell/include/platform/lib/pm_runtime.h +++ b/src/platform/haswell/include/platform/lib/pm_runtime.h @@ -46,6 +46,18 @@ static inline void platform_pm_runtime_get(uint32_t context, uint32_t index, static inline void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags) { } +static inline void platform_pm_runtime_enable(uint32_t context, + uint32_t index) {} + +static inline void platform_pm_runtime_disable(uint32_t context, + uint32_t index) {} + +static inline bool platform_pm_runtime_is_active(uint32_t context, + uint32_t index) +{ + return false; +} + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else diff --git a/src/platform/icelake/include/platform/lib/pm_runtime.h b/src/platform/icelake/include/platform/lib/pm_runtime.h index cf4c4186b..5712097e9 100644 --- a/src/platform/icelake/include/platform/lib/pm_runtime.h +++ b/src/platform/icelake/include/platform/lib/pm_runtime.h @@ -43,6 +43,12 @@ void platform_pm_runtime_get(uint32_t context, uint32_t index, uint32_t flags); */ void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags); +void platform_pm_runtime_enable(uint32_t context, uint32_t index); + +void platform_pm_runtime_disable(uint32_t context, uint32_t index); + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index); + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else diff --git a/src/platform/imx8/include/platform/lib/pm_runtime.h b/src/platform/imx8/include/platform/lib/pm_runtime.h index 56335108f..f2b85b2e9 100644 --- a/src/platform/imx8/include/platform/lib/pm_runtime.h +++ b/src/platform/imx8/include/platform/lib/pm_runtime.h @@ -40,6 +40,18 @@ static inline void platform_pm_runtime_get(uint32_t context, uint32_t index, static inline void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags) { } +static inline void platform_pm_runtime_enable(uint32_t context, + uint32_t index) {} + +static inline void platform_pm_runtime_disable(uint32_t context, + uint32_t index) {} + +static inline bool platform_pm_runtime_is_active(uint32_t context, + uint32_t index) +{ + return false; +} + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else diff --git a/src/platform/intel/cavs/lib/pm_runtime.c b/src/platform/intel/cavs/lib/pm_runtime.c index 263ccb505..d577ff117 100644 --- a/src/platform/intel/cavs/lib/pm_runtime.c +++ b/src/platform/intel/cavs/lib/pm_runtime.c @@ -351,6 +351,27 @@ void platform_pm_runtime_put(enum pm_runtime_context context, uint32_t index, } } +void platform_pm_runtime_enable(uint32_t context, uint32_t index) +{ + switch (context) { + default: + break; + } +} + +void platform_pm_runtime_disable(uint32_t context, uint32_t index) +{ + switch (context) { + default: + break; + } +} + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index) +{ + return false; +} + #if CONFIG_APOLLOLAKE || CONFIG_CANNONLAKE void platform_pm_runtime_power_off(void) { diff --git a/src/platform/suecreek/include/platform/lib/pm_runtime.h b/src/platform/suecreek/include/platform/lib/pm_runtime.h index 2f59a3246..ba2c6f85c 100644 --- a/src/platform/suecreek/include/platform/lib/pm_runtime.h +++ b/src/platform/suecreek/include/platform/lib/pm_runtime.h @@ -43,6 +43,12 @@ void platform_pm_runtime_get(uint32_t context, uint32_t index, uint32_t flags); */ void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags); +void platform_pm_runtime_enable(uint32_t context, uint32_t index); + +void platform_pm_runtime_disable(uint32_t context, uint32_t index); + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index); + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else diff --git a/src/platform/tigerlake/include/platform/lib/pm_runtime.h b/src/platform/tigerlake/include/platform/lib/pm_runtime.h index 4fae2edef..7b4d83919 100644 --- a/src/platform/tigerlake/include/platform/lib/pm_runtime.h +++ b/src/platform/tigerlake/include/platform/lib/pm_runtime.h @@ -43,6 +43,12 @@ void platform_pm_runtime_get(uint32_t context, uint32_t index, uint32_t flags); */ void platform_pm_runtime_put(uint32_t context, uint32_t index, uint32_t flags); +void platform_pm_runtime_enable(uint32_t context, uint32_t index); + +void platform_pm_runtime_disable(uint32_t context, uint32_t index); + +bool platform_pm_runtime_is_active(uint32_t context, uint32_t index); + #endif /* __PLATFORM_LIB_PM_RUNTIME_H__ */ #else