linux/drivers/base/power/domain_governor.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * drivers/base/power/domain_governor.c - Governors for device PM domains.
   4 *
   5 * Copyright (C) 2011 Rafael J. Wysocki <rjw@sisk.pl>, Renesas Electronics Corp.
   6 */
   7#include <linux/kernel.h>
   8#include <linux/pm_domain.h>
   9#include <linux/pm_qos.h>
  10#include <linux/hrtimer.h>
  11#include <linux/cpuidle.h>
  12#include <linux/cpumask.h>
  13#include <linux/ktime.h>
  14
  15static int dev_update_qos_constraint(struct device *dev, void *data)
  16{
  17        s64 *constraint_ns_p = data;
  18        s64 constraint_ns;
  19
  20        if (dev->power.subsys_data && dev->power.subsys_data->domain_data) {
  21                /*
  22                 * Only take suspend-time QoS constraints of devices into
  23                 * account, because constraints updated after the device has
  24                 * been suspended are not guaranteed to be taken into account
  25                 * anyway.  In order for them to take effect, the device has to
  26                 * be resumed and suspended again.
  27                 */
  28                constraint_ns = dev_gpd_data(dev)->td.effective_constraint_ns;
  29        } else {
  30                /*
  31                 * The child is not in a domain and there's no info on its
  32                 * suspend/resume latencies, so assume them to be negligible and
  33                 * take its current PM QoS constraint (that's the only thing
  34                 * known at this point anyway).
  35                 */
  36                constraint_ns = dev_pm_qos_read_value(dev, DEV_PM_QOS_RESUME_LATENCY);
  37                constraint_ns *= NSEC_PER_USEC;
  38        }
  39
  40        if (constraint_ns < *constraint_ns_p)
  41                *constraint_ns_p = constraint_ns;
  42
  43        return 0;
  44}
  45
  46/**
  47 * default_suspend_ok - Default PM domain governor routine to suspend devices.
  48 * @dev: Device to check.
  49 */
  50static bool default_suspend_ok(struct device *dev)
  51{
  52        struct gpd_timing_data *td = &dev_gpd_data(dev)->td;
  53        unsigned long flags;
  54        s64 constraint_ns;
  55
  56        dev_dbg(dev, "%s()\n", __func__);
  57
  58        spin_lock_irqsave(&dev->power.lock, flags);
  59
  60        if (!td->constraint_changed) {
  61                bool ret = td->cached_suspend_ok;
  62
  63                spin_unlock_irqrestore(&dev->power.lock, flags);
  64                return ret;
  65        }
  66        td->constraint_changed = false;
  67        td->cached_suspend_ok = false;
  68        td->effective_constraint_ns = 0;
  69        constraint_ns = __dev_pm_qos_resume_latency(dev);
  70
  71        spin_unlock_irqrestore(&dev->power.lock, flags);
  72
  73        if (constraint_ns == 0)
  74                return false;
  75
  76        constraint_ns *= NSEC_PER_USEC;
  77        /*
  78         * We can walk the children without any additional locking, because
  79         * they all have been suspended at this point and their
  80         * effective_constraint_ns fields won't be modified in parallel with us.
  81         */
  82        if (!dev->power.ignore_children)
  83                device_for_each_child(dev, &constraint_ns,
  84                                      dev_update_qos_constraint);
  85
  86        if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS) {
  87                /* "No restriction", so the device is allowed to suspend. */
  88                td->effective_constraint_ns = PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS;
  89                td->cached_suspend_ok = true;
  90        } else if (constraint_ns == 0) {
  91                /*
  92                 * This triggers if one of the children that don't belong to a
  93                 * domain has a zero PM QoS constraint and it's better not to
  94                 * suspend then.  effective_constraint_ns is zero already and
  95                 * cached_suspend_ok is false, so bail out.
  96                 */
  97                return false;
  98        } else {
  99                constraint_ns -= td->suspend_latency_ns +
 100                                td->resume_latency_ns;
 101                /*
 102                 * effective_constraint_ns is zero already and cached_suspend_ok
 103                 * is false, so if the computed value is not positive, return
 104                 * right away.
 105                 */
 106                if (constraint_ns <= 0)
 107                        return false;
 108
 109                td->effective_constraint_ns = constraint_ns;
 110                td->cached_suspend_ok = true;
 111        }
 112
 113        /*
 114         * The children have been suspended already, so we don't need to take
 115         * their suspend latencies into account here.
 116         */
 117        return td->cached_suspend_ok;
 118}
 119
 120static void update_domain_next_wakeup(struct generic_pm_domain *genpd, ktime_t now)
 121{
 122        ktime_t domain_wakeup = KTIME_MAX;
 123        ktime_t next_wakeup;
 124        struct pm_domain_data *pdd;
 125        struct gpd_link *link;
 126
 127        if (!(genpd->flags & GENPD_FLAG_MIN_RESIDENCY))
 128                return;
 129
 130        /*
 131         * Devices that have a predictable wakeup pattern, may specify
 132         * their next wakeup. Let's find the next wakeup from all the
 133         * devices attached to this domain and from all the sub-domains.
 134         * It is possible that component's a next wakeup may have become
 135         * stale when we read that here. We will ignore to ensure the domain
 136         * is able to enter its optimal idle state.
 137         */
 138        list_for_each_entry(pdd, &genpd->dev_list, list_node) {
 139                next_wakeup = to_gpd_data(pdd)->next_wakeup;
 140                if (next_wakeup != KTIME_MAX && !ktime_before(next_wakeup, now))
 141                        if (ktime_before(next_wakeup, domain_wakeup))
 142                                domain_wakeup = next_wakeup;
 143        }
 144
 145        list_for_each_entry(link, &genpd->parent_links, parent_node) {
 146                next_wakeup = link->child->next_wakeup;
 147                if (next_wakeup != KTIME_MAX && !ktime_before(next_wakeup, now))
 148                        if (ktime_before(next_wakeup, domain_wakeup))
 149                                domain_wakeup = next_wakeup;
 150        }
 151
 152        genpd->next_wakeup = domain_wakeup;
 153}
 154
 155static bool next_wakeup_allows_state(struct generic_pm_domain *genpd,
 156                                     unsigned int state, ktime_t now)
 157{
 158        ktime_t domain_wakeup = genpd->next_wakeup;
 159        s64 idle_time_ns, min_sleep_ns;
 160
 161        min_sleep_ns = genpd->states[state].power_off_latency_ns +
 162                       genpd->states[state].residency_ns;
 163
 164        idle_time_ns = ktime_to_ns(ktime_sub(domain_wakeup, now));
 165
 166        return idle_time_ns >= min_sleep_ns;
 167}
 168
 169static bool __default_power_down_ok(struct dev_pm_domain *pd,
 170                                     unsigned int state)
 171{
 172        struct generic_pm_domain *genpd = pd_to_genpd(pd);
 173        struct gpd_link *link;
 174        struct pm_domain_data *pdd;
 175        s64 min_off_time_ns;
 176        s64 off_on_time_ns;
 177
 178        off_on_time_ns = genpd->states[state].power_off_latency_ns +
 179                genpd->states[state].power_on_latency_ns;
 180
 181        min_off_time_ns = -1;
 182        /*
 183         * Check if subdomains can be off for enough time.
 184         *
 185         * All subdomains have been powered off already at this point.
 186         */
 187        list_for_each_entry(link, &genpd->parent_links, parent_node) {
 188                struct generic_pm_domain *sd = link->child;
 189                s64 sd_max_off_ns = sd->max_off_time_ns;
 190
 191                if (sd_max_off_ns < 0)
 192                        continue;
 193
 194                /*
 195                 * Check if the subdomain is allowed to be off long enough for
 196                 * the current domain to turn off and on (that's how much time
 197                 * it will have to wait worst case).
 198                 */
 199                if (sd_max_off_ns <= off_on_time_ns)
 200                        return false;
 201
 202                if (min_off_time_ns > sd_max_off_ns || min_off_time_ns < 0)
 203                        min_off_time_ns = sd_max_off_ns;
 204        }
 205
 206        /*
 207         * Check if the devices in the domain can be off enough time.
 208         */
 209        list_for_each_entry(pdd, &genpd->dev_list, list_node) {
 210                struct gpd_timing_data *td;
 211                s64 constraint_ns;
 212
 213                /*
 214                 * Check if the device is allowed to be off long enough for the
 215                 * domain to turn off and on (that's how much time it will
 216                 * have to wait worst case).
 217                 */
 218                td = &to_gpd_data(pdd)->td;
 219                constraint_ns = td->effective_constraint_ns;
 220                /*
 221                 * Zero means "no suspend at all" and this runs only when all
 222                 * devices in the domain are suspended, so it must be positive.
 223                 */
 224                if (constraint_ns == PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS)
 225                        continue;
 226
 227                if (constraint_ns <= off_on_time_ns)
 228                        return false;
 229
 230                if (min_off_time_ns > constraint_ns || min_off_time_ns < 0)
 231                        min_off_time_ns = constraint_ns;
 232        }
 233
 234        /*
 235         * If the computed minimum device off time is negative, there are no
 236         * latency constraints, so the domain can spend arbitrary time in the
 237         * "off" state.
 238         */
 239        if (min_off_time_ns < 0)
 240                return true;
 241
 242        /*
 243         * The difference between the computed minimum subdomain or device off
 244         * time and the time needed to turn the domain on is the maximum
 245         * theoretical time this domain can spend in the "off" state.
 246         */
 247        genpd->max_off_time_ns = min_off_time_ns -
 248                genpd->states[state].power_on_latency_ns;
 249        return true;
 250}
 251
 252/**
 253 * _default_power_down_ok - Default generic PM domain power off governor routine.
 254 * @pd: PM domain to check.
 255 * @now: current ktime.
 256 *
 257 * This routine must be executed under the PM domain's lock.
 258 */
 259static bool _default_power_down_ok(struct dev_pm_domain *pd, ktime_t now)
 260{
 261        struct generic_pm_domain *genpd = pd_to_genpd(pd);
 262        int state_idx = genpd->state_count - 1;
 263        struct gpd_link *link;
 264
 265        /*
 266         * Find the next wakeup from devices that can determine their own wakeup
 267         * to find when the domain would wakeup and do it for every device down
 268         * the hierarchy. It is not worth while to sleep if the state's residency
 269         * cannot be met.
 270         */
 271        update_domain_next_wakeup(genpd, now);
 272        if ((genpd->flags & GENPD_FLAG_MIN_RESIDENCY) && (genpd->next_wakeup != KTIME_MAX)) {
 273                /* Let's find out the deepest domain idle state, the devices prefer */
 274                while (state_idx >= 0) {
 275                        if (next_wakeup_allows_state(genpd, state_idx, now)) {
 276                                genpd->max_off_time_changed = true;
 277                                break;
 278                        }
 279                        state_idx--;
 280                }
 281
 282                if (state_idx < 0) {
 283                        state_idx = 0;
 284                        genpd->cached_power_down_ok = false;
 285                        goto done;
 286                }
 287        }
 288
 289        if (!genpd->max_off_time_changed) {
 290                genpd->state_idx = genpd->cached_power_down_state_idx;
 291                return genpd->cached_power_down_ok;
 292        }
 293
 294        /*
 295         * We have to invalidate the cached results for the parents, so
 296         * use the observation that default_power_down_ok() is not
 297         * going to be called for any parent until this instance
 298         * returns.
 299         */
 300        list_for_each_entry(link, &genpd->child_links, child_node)
 301                link->parent->max_off_time_changed = true;
 302
 303        genpd->max_off_time_ns = -1;
 304        genpd->max_off_time_changed = false;
 305        genpd->cached_power_down_ok = true;
 306
 307        /*
 308         * Find a state to power down to, starting from the state
 309         * determined by the next wakeup.
 310         */
 311        while (!__default_power_down_ok(pd, state_idx)) {
 312                if (state_idx == 0) {
 313                        genpd->cached_power_down_ok = false;
 314                        break;
 315                }
 316                state_idx--;
 317        }
 318
 319done:
 320        genpd->state_idx = state_idx;
 321        genpd->cached_power_down_state_idx = genpd->state_idx;
 322        return genpd->cached_power_down_ok;
 323}
 324
 325static bool default_power_down_ok(struct dev_pm_domain *pd)
 326{
 327        return _default_power_down_ok(pd, ktime_get());
 328}
 329
 330static bool always_on_power_down_ok(struct dev_pm_domain *domain)
 331{
 332        return false;
 333}
 334
 335#ifdef CONFIG_CPU_IDLE
 336static bool cpu_power_down_ok(struct dev_pm_domain *pd)
 337{
 338        struct generic_pm_domain *genpd = pd_to_genpd(pd);
 339        struct cpuidle_device *dev;
 340        ktime_t domain_wakeup, next_hrtimer;
 341        ktime_t now = ktime_get();
 342        s64 idle_duration_ns;
 343        int cpu, i;
 344
 345        /* Validate dev PM QoS constraints. */
 346        if (!_default_power_down_ok(pd, now))
 347                return false;
 348
 349        if (!(genpd->flags & GENPD_FLAG_CPU_DOMAIN))
 350                return true;
 351
 352        /*
 353         * Find the next wakeup for any of the online CPUs within the PM domain
 354         * and its subdomains. Note, we only need the genpd->cpus, as it already
 355         * contains a mask of all CPUs from subdomains.
 356         */
 357        domain_wakeup = ktime_set(KTIME_SEC_MAX, 0);
 358        for_each_cpu_and(cpu, genpd->cpus, cpu_online_mask) {
 359                dev = per_cpu(cpuidle_devices, cpu);
 360                if (dev) {
 361                        next_hrtimer = READ_ONCE(dev->next_hrtimer);
 362                        if (ktime_before(next_hrtimer, domain_wakeup))
 363                                domain_wakeup = next_hrtimer;
 364                }
 365        }
 366
 367        /* The minimum idle duration is from now - until the next wakeup. */
 368        idle_duration_ns = ktime_to_ns(ktime_sub(domain_wakeup, now));
 369        if (idle_duration_ns <= 0)
 370                return false;
 371
 372        /*
 373         * Find the deepest idle state that has its residency value satisfied
 374         * and by also taking into account the power off latency for the state.
 375         * Start at the state picked by the dev PM QoS constraint validation.
 376         */
 377        i = genpd->state_idx;
 378        do {
 379                if (idle_duration_ns >= (genpd->states[i].residency_ns +
 380                    genpd->states[i].power_off_latency_ns)) {
 381                        genpd->state_idx = i;
 382                        return true;
 383                }
 384        } while (--i >= 0);
 385
 386        return false;
 387}
 388
 389struct dev_power_governor pm_domain_cpu_gov = {
 390        .suspend_ok = default_suspend_ok,
 391        .power_down_ok = cpu_power_down_ok,
 392};
 393#endif
 394
 395struct dev_power_governor simple_qos_governor = {
 396        .suspend_ok = default_suspend_ok,
 397        .power_down_ok = default_power_down_ok,
 398};
 399
 400/**
 401 * pm_genpd_gov_always_on - A governor implementing an always-on policy
 402 */
 403struct dev_power_governor pm_domain_always_on_gov = {
 404        .power_down_ok = always_on_power_down_ok,
 405        .suspend_ok = default_suspend_ok,
 406};
 407