@@ -147,11 +147,7 @@ static void genpd_recalc_cpu_exit_latency(struct generic_pm_domain *genpd)
if (!genpd->cpuidle_data)
return;
- if (genpd->state_count == 0)
- usecs64 = genpd->power_on_latency_ns;
- else
- usecs64 = genpd->states[state_idx].power_on_latency_ns;
-
+ usecs64 = genpd->states[state_idx].power_on_latency_ns;
do_div(usecs64, NSEC_PER_USEC);
usecs64 += genpd->cpuidle_data->saved_exit_latency;
genpd->cpuidle_data->idle_state->exit_latency = usecs64;
@@ -173,15 +169,9 @@ static int genpd_power_on(struct generic_pm_domain *genpd)
return ret;
elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
- if (genpd->state_count == 0) {
- if (elapsed_ns <= genpd->power_on_latency_ns)
- return ret;
- genpd->power_on_latency_ns = elapsed_ns;
- } else {
- if (elapsed_ns <= genpd->states[state_idx].power_on_latency_ns)
- return ret;
- genpd->states[state_idx].power_on_latency_ns = elapsed_ns;
- }
+ if (elapsed_ns <= genpd->states[state_idx].power_on_latency_ns)
+ return ret;
+ genpd->states[state_idx].power_on_latency_ns = elapsed_ns;
genpd->max_off_time_changed = true;
genpd_recalc_cpu_exit_latency(genpd);
@@ -207,15 +197,11 @@ static int genpd_power_off(struct generic_pm_domain *genpd)
return ret;
elapsed_ns = ktime_to_ns(ktime_sub(ktime_get(), time_start));
- if (genpd->state_count == 0) {
- if (elapsed_ns <= genpd->power_off_latency_ns)
- return ret;
- genpd->power_off_latency_ns = elapsed_ns;
- } else {
- if (elapsed_ns <= genpd->states[state_idx].power_off_latency_ns)
- return ret;
- genpd->states[state_idx].power_off_latency_ns = elapsed_ns;
- }
+ if (elapsed_ns <= genpd->states[state_idx].power_off_latency_ns)
+ return ret;
+
+ genpd->states[state_idx].power_off_latency_ns = elapsed_ns;
+
genpd->max_off_time_changed = true;
pr_warn("%s: Power-%s latency exceeded, new value %lld ns\n",
genpd->name, "off", elapsed_ns);
@@ -1931,12 +1917,10 @@ void pm_genpd_init(struct generic_pm_domain *genpd,
if (IS_ERR_OR_NULL(genpd))
return;
- if (genpd->state_count > 0) {
- /* Copy the state data to allocated memory */
- genpd->states = genpd_alloc_states_data(genpd);
- if (!genpd->states)
- return;
- }
+ /* Point the state data to allocated memory */
+ genpd->states = genpd_alloc_states_data(genpd);
+ if (!genpd->states)
+ return;
INIT_LIST_HEAD(&genpd->master_links);
INIT_LIST_HEAD(&genpd->slave_links);
@@ -2338,15 +2322,10 @@ static int pm_genpd_summary_one(struct seq_file *s,
if (WARN_ON(genpd->status >= ARRAY_SIZE(status_lookup)))
goto exit;
-
- if (genpd->state_count == 0)
- seq_printf(s, "%-30s %-15s ",
- genpd->name, status_lookup[genpd->status]);
- else
- seq_printf(s, "%-30s %-15s ", genpd->name,
- (genpd->status == GPD_STATE_POWER_OFF) ?
- genpd->states[state_idx].name :
- status_lookup[genpd->status]);
+ seq_printf(s, "%-30s %-15s ", genpd->name,
+ (genpd->status == GPD_STATE_POWER_OFF) ?
+ genpd->states[state_idx].name :
+ status_lookup[genpd->status]);
/*
* Modifications on the list require holding locks on both
@@ -104,13 +104,8 @@ static bool power_down_ok_for_state(struct dev_pm_domain *pd, int state)
struct pm_domain_data *pdd;
s64 min_off_time_ns;
s64 off_on_time_ns;
-
- if (genpd->state_count == 0)
- off_on_time_ns = genpd->power_off_latency_ns +
- genpd->power_on_latency_ns;
- else
- off_on_time_ns = genpd->states[state].power_off_latency_ns +
- genpd->states[state].power_on_latency_ns;
+ off_on_time_ns = genpd->states[state].power_off_latency_ns +
+ genpd->states[state].power_on_latency_ns;
/*
* It doesn't make sense to remove power from the domain if saving
* the state of all devices in it and the power off/power on operations
@@ -199,12 +194,8 @@ static bool power_down_ok_for_state(struct dev_pm_domain *pd, int state)
* time and the time needed to turn the domain on is the maximum
* theoretical time this domain can spend in the "off" state.
*/
- if (genpd->state_count == 0)
- genpd->max_off_time_ns =
- min_off_time_ns - genpd->power_on_latency_ns;
- else
- genpd->max_off_time_ns = min_off_time_ns -
- genpd->states[state].power_on_latency_ns;
+ genpd->max_off_time_ns = min_off_time_ns -
+ genpd->states[state].power_on_latency_ns;
return true;
}
@@ -236,19 +227,11 @@ static bool default_power_down_ok(struct dev_pm_domain *pd)
genpd->max_off_time_changed = false;
/* find a state to power down to, starting from the deepest */
- if (genpd->state_count == 0) {
- /*
- * there are no states. power_down_ok_for_state will use
- * the stateless values, and ignore the state argument.
- */
- retval = power_down_ok_for_state(pd, 0);
- } else {
- for (i = 0; i < genpd->state_count; i++) {
- if (power_down_ok_for_state(pd, last_state_idx - i)) {
- genpd->state_idx = last_state_idx - i;
- retval = true;
- break;
- }
+ for (i = 0; i < genpd->state_count; i++) {
+ if (power_down_ok_for_state(pd, last_state_idx - i)) {
+ genpd->state_idx = last_state_idx - i;
+ retval = true;
+ break;
}
}
@@ -73,9 +73,7 @@ struct generic_pm_domain {
unsigned int prepared_count; /* Suspend counter of prepared devices */
bool suspend_power_off; /* Power status before system suspend */
int (*power_off)(struct generic_pm_domain *domain);
- s64 power_off_latency_ns;
int (*power_on)(struct generic_pm_domain *domain);
- s64 power_on_latency_ns;
struct gpd_dev_ops dev_ops;
s64 max_off_time_ns; /* Maximum allowed "suspended" time. */
bool max_off_time_changed;