History

PM / Domains: Add GENPD_FLAG_RPM_ALWAYS_ON flag

This is for power domains which can only be powered off for suspend but not as part of runtime PM.

Leonard Crestez committed 7 years ago

Commit ed61e181 parent 8f5e8232 files · +10 −2Browse files

Unified · Split

2 files
  1. drivers/base/power/domain.c +6 −2
  2. include/linux/pm_domain.h +4 −0
drivers/base/power/domain.c+6−2
@@ -130,6 +130,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { · 129 unmodified lines
130130 #define genpd_is_always_on(genpd) (genpd->flags & GENPD_FLAG_ALWAYS_ON)
131131 #define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP)
132132 #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN)
133+#define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON)
133134
134135 static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev,
135136 const struct generic_pm_domain *genpd)
@@ -517,7 +518,9 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, · 381 unmodified lines
517518 * (1) The domain is configured as always on.
518519 * (2) When the domain has a subdomain being powered on.
519520 */
520− if (genpd_is_always_on(genpd) || atomic_read(&genpd->sd_count) > 0)
521+ if (genpd_is_always_on(genpd) ||
522+ genpd_is_rpm_always_on(genpd) ||
523+ atomic_read(&genpd->sd_count) > 0)
521524 return -EBUSY;
522525
523526 list_for_each_entry(pdd, &genpd->dev_list, list_node) {
@@ -1814,7 +1817,8 @@ int pm_genpd_init(struct generic_pm_domain *genpd, · 1290 unmodified lines
18141817 }
18151818
18161819 /* Always-on domains must be powered on at initialization. */
1817− if (genpd_is_always_on(genpd) && !genpd_status_on(genpd))
1820+ if ((genpd_is_always_on(genpd) || genpd_is_rpm_always_on(genpd)) &&
1821+ !genpd_status_on(genpd))
18181822 return -EINVAL;
18191823
18201824 if (genpd_is_cpu_domain(genpd) &&
include/linux/pm_domain.h+4−0
@@ -53,12 +53,16 @@ · 52 unmodified lines
5353 * driver must then comply with the so called,
5454 * last-man-standing algorithm, for the CPUs in the
5555 * PM domain.
56+ *
57+ * GENPD_FLAG_RPM_ALWAYS_ON: Instructs genpd to always keep the PM domain
58+ * powered on except for system suspend.
5659 */
5760 #define GENPD_FLAG_PM_CLK (1U << 0)
5861 #define GENPD_FLAG_IRQ_SAFE (1U << 1)
5962 #define GENPD_FLAG_ALWAYS_ON (1U << 2)
6063 #define GENPD_FLAG_ACTIVE_WAKEUP (1U << 3)
6164 #define GENPD_FLAG_CPU_DOMAIN (1U << 4)
65+#define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5)
6266
6367 enum gpd_status {
6468 GPD_STATE_ACTIVE = 0, /* PM domain is active */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t