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
*/
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>
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_STATES_LEN];
static atomic_t power_state_disable_count[PM_STATE_COUNT];
__weak void pm_constraint_set(enum pm_state state)
{
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]);
__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;
__ASSERT(state < PM_STATES_LEN, "Invalid power state!");
__ASSERT(state < PM_STATE_COUNT, "Invalid power state!");
v = atomic_dec(&power_state_disable_count[state]);
__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)
{
__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);
}

View file

@ -17,7 +17,6 @@
#include <pm/policy.h>
#include <tracing/tracing.h>
#define PM_STATES_LEN (1 + PM_STATE_SOFT_OFF - PM_STATE_ACTIVE)
#include <logging/log.h>
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);
#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 struct stats_pm_cpu_stats pm_cpu_stats[CONFIG_MP_NUM_CPUS][PM_STATES_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_STATE_COUNT];
static int pm_stats_init(const struct device *unused)
{
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,
"pm_cpu_%03d_state_%1d_stats", i, j);
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;
__ASSERT(info.state < PM_STATES_LEN,
__ASSERT(info.state < PM_STATE_COUNT,
"Invalid power state %d!", info.state);