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
130#define genpd_is_always_on(genpd) (genpd->flags & GENPD_FLAG_ALWAYS_ON)130#define genpd_is_always_on(genpd) (genpd->flags & GENPD_FLAG_ALWAYS_ON)
131#define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP)131#define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP)
132#define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN)132#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)
133 134
134static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev,135static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev,
135 const struct generic_pm_domain *genpd)136 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
517 * (1) The domain is configured as always on.518 * (1) The domain is configured as always on.
518 * (2) When the domain has a subdomain being powered on.519 * (2) When the domain has a subdomain being powered on.
519 */520 */
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)
521 return -EBUSY;524 return -EBUSY;
522 525
523 list_for_each_entry(pdd, &genpd->dev_list, list_node) {526 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
1814 }1817 }
1815 1818
1816 /* Always-on domains must be powered on at initialization. */1819 /* 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))
1818 return -EINVAL;1822 return -EINVAL;
1819 1823
1820 if (genpd_is_cpu_domain(genpd) &&1824 if (genpd_is_cpu_domain(genpd) &&
include/linux/pm_domain.h+4−0
@@ -53,12 +53,16 @@ · 52 unmodified lines
53 * driver must then comply with the so called,53 * driver must then comply with the so called,
54 * last-man-standing algorithm, for the CPUs in the54 * last-man-standing algorithm, for the CPUs in the
55 * PM domain.55 * PM domain.
56 *
57 * GENPD_FLAG_RPM_ALWAYS_ON: Instructs genpd to always keep the PM domain
58 * powered on except for system suspend.
56 */59 */
57#define GENPD_FLAG_PM_CLK (1U << 0)60#define GENPD_FLAG_PM_CLK (1U << 0)
58#define GENPD_FLAG_IRQ_SAFE (1U << 1)61#define GENPD_FLAG_IRQ_SAFE (1U << 1)
59#define GENPD_FLAG_ALWAYS_ON (1U << 2)62#define GENPD_FLAG_ALWAYS_ON (1U << 2)
60#define GENPD_FLAG_ACTIVE_WAKEUP (1U << 3)63#define GENPD_FLAG_ACTIVE_WAKEUP (1U << 3)
61#define GENPD_FLAG_CPU_DOMAIN (1U << 4)64#define GENPD_FLAG_CPU_DOMAIN (1U << 4)
65#define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5)
62 66
63enum gpd_status {67enum gpd_status {
64 GPD_STATE_ACTIVE = 0, /* PM domain is active */68 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