pm: define PM_STATE_COUNT to obtain number of states

Replace PM_STATE_LEN with PM_STATE_COUNT, so that number of states is
automatically computed.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
This commit is contained in:
Gerard Marull-Paretas 2021-11-22 18:48:01 +01:00 committed by Carles Cufí
commit cd7ae8ea62
3 changed files with 11 additions and 12 deletions

View file

@ -103,7 +103,9 @@ enum pm_state {
* *
* @note This state is correlated with ACPI G2/S5 state * @note This state is correlated with ACPI G2/S5 state
*/ */
PM_STATE_SOFT_OFF PM_STATE_SOFT_OFF,
/** Number of power management states (internal use) */
PM_STATE_COUNT,
}; };
/** /**

View file

@ -13,15 +13,13 @@
#include <logging/log.h> #include <logging/log.h>
LOG_MODULE_DECLARE(pm, CONFIG_PM_LOG_LEVEL); LOG_MODULE_DECLARE(pm, CONFIG_PM_LOG_LEVEL);
#define PM_STATES_LEN (1 + PM_STATE_SOFT_OFF - PM_STATE_ACTIVE) static atomic_t power_state_disable_count[PM_STATE_COUNT];
static atomic_t power_state_disable_count[PM_STATES_LEN];
__weak void pm_constraint_set(enum pm_state state) __weak void pm_constraint_set(enum pm_state state)
{ {
atomic_val_t v; atomic_val_t v;
__ASSERT(state < PM_STATES_LEN, "Invalid power state!"); __ASSERT(state < PM_STATE_COUNT, "Invalid power state!");
v = atomic_inc(&power_state_disable_count[state]); v = atomic_inc(&power_state_disable_count[state]);
__ASSERT(v < UINT_MAX, "Power state disable count overflowed!"); __ASSERT(v < UINT_MAX, "Power state disable count overflowed!");
@ -33,7 +31,7 @@ __weak void pm_constraint_release(enum pm_state state)
{ {
atomic_val_t v; atomic_val_t v;
__ASSERT(state < PM_STATES_LEN, "Invalid power state!"); __ASSERT(state < PM_STATE_COUNT, "Invalid power state!");
v = atomic_dec(&power_state_disable_count[state]); v = atomic_dec(&power_state_disable_count[state]);
__ASSERT(v > 0, "Power state disable count underflowed!"); __ASSERT(v > 0, "Power state disable count underflowed!");
@ -43,7 +41,7 @@ __weak void pm_constraint_release(enum pm_state state)
__weak bool pm_constraint_get(enum pm_state state) __weak bool pm_constraint_get(enum pm_state state)
{ {
__ASSERT(state < PM_STATES_LEN, "Invalid power state!"); __ASSERT(state < PM_STATE_COUNT, "Invalid power state!");
return (atomic_get(&power_state_disable_count[state]) == 0); return (atomic_get(&power_state_disable_count[state]) == 0);
} }

View file

@ -17,7 +17,6 @@
#include <pm/policy.h> #include <pm/policy.h>
#include <tracing/tracing.h> #include <tracing/tracing.h>
#define PM_STATES_LEN (1 + PM_STATE_SOFT_OFF - PM_STATE_ACTIVE)
#include <logging/log.h> #include <logging/log.h>
LOG_MODULE_REGISTER(pm, CONFIG_PM_LOG_LEVEL); LOG_MODULE_REGISTER(pm, CONFIG_PM_LOG_LEVEL);
@ -67,13 +66,13 @@ STATS_NAME(pm_cpu_stats, state_total_cycles)
STATS_NAME_END(pm_cpu_stats); STATS_NAME_END(pm_cpu_stats);
#define PM_STAT_NAME_LEN sizeof("pm_cpu_XXX_state_X_stats") #define PM_STAT_NAME_LEN sizeof("pm_cpu_XXX_state_X_stats")
static char pm_cpu_stat_names[CONFIG_MP_NUM_CPUS][PM_STATES_LEN][PM_STAT_NAME_LEN]; static char pm_cpu_stat_names[CONFIG_MP_NUM_CPUS][PM_STATE_COUNT][PM_STAT_NAME_LEN];
static struct stats_pm_cpu_stats pm_cpu_stats[CONFIG_MP_NUM_CPUS][PM_STATES_LEN]; static struct stats_pm_cpu_stats pm_cpu_stats[CONFIG_MP_NUM_CPUS][PM_STATE_COUNT];
static int pm_stats_init(const struct device *unused) static int pm_stats_init(const struct device *unused)
{ {
for (int i = 0; i < CONFIG_MP_NUM_CPUS; i++) { for (int i = 0; i < CONFIG_MP_NUM_CPUS; i++) {
for (int j = 0; j < PM_STATES_LEN; j++) { for (int j = 0; j < PM_STATE_COUNT; j++) {
snprintk(pm_cpu_stat_names[i][j], PM_STAT_NAME_LEN, snprintk(pm_cpu_stat_names[i][j], PM_STAT_NAME_LEN,
"pm_cpu_%03d_state_%1d_stats", i, j); "pm_cpu_%03d_state_%1d_stats", i, j);
stats_init(&(pm_cpu_stats[i][j].s_hdr), STATS_SIZE_32, 3, stats_init(&(pm_cpu_stats[i][j].s_hdr), STATS_SIZE_32, 3,
@ -249,7 +248,7 @@ bool pm_power_state_force(uint8_t cpu, struct pm_state_info info)
{ {
bool ret = false; bool ret = false;
__ASSERT(info.state < PM_STATES_LEN, __ASSERT(info.state < PM_STATE_COUNT,
"Invalid power state %d!", info.state); "Invalid power state %d!", info.state);