| From 63e5b7bb4d322febc0c25d98690c0696496ce7c3 Mon Sep 17 00:00:00 2001 |
| From: Sibi Sankar <sibis@codeaurora.org> |
| Date: Wed, 12 Aug 2020 00:32:51 +0530 |
| Subject: [PATCH] FROMLIST: PM / Domains: Add GENPD_FLAG_SUSPEND_ON flag |
| |
| This is for power domains which needs to stay powered on for suspend |
| but can be powered on/off as part of runtime PM. This flag is aimed at |
| power domains coupled to remote processors which enter suspend states |
| independent to that of the application processor. Such power domains |
| are turned off only on remote processor crash/shutdown. |
| |
| Signed-off-by: Sibi Sankar <sibis@codeaurora.org> |
| (am from https://patchwork.kernel.org/patch/11709507/) |
| (also found at https://lore.kernel.org/r/20200811190252.10559-1-sibis@codeaurora.org) |
| |
| BUG=b:162939598 |
| TEST=suspend/resume is faster |
| |
| Signed-off-by: Douglas Anderson <dianders@chromium.org> |
| Change-Id: Ic63337a0e97796d9c061981d66d9eb12f1271e20 |
| Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2350386 |
| Reviewed-by: Sean Paul <seanpaul@chromium.org> |
| Reviewed-by: Stephen Boyd <swboyd@chromium.org> |
| Commit-Queue: Stephen Boyd <swboyd@chromium.org> |
| --- |
| drivers/base/power/domain.c | 3 ++- |
| include/linux/pm_domain.h | 5 +++++ |
| 2 files changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c |
| index 78c310d3179d..78dc6b8faf57 100644 |
| --- a/drivers/base/power/domain.c |
| +++ b/drivers/base/power/domain.c |
| @@ -130,6 +130,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { |
| #define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP) |
| #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN) |
| #define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON) |
| +#define genpd_is_suspend_on(genpd) (genpd->flags & GENPD_FLAG_SUSPEND_ON) |
| |
| static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev, |
| const struct generic_pm_domain *genpd) |
| @@ -1026,7 +1027,7 @@ static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock, |
| { |
| struct gpd_link *link; |
| |
| - if (!genpd_status_on(genpd) || genpd_is_always_on(genpd)) |
| + if (!genpd_status_on(genpd) || genpd_is_always_on(genpd) || genpd_is_suspend_on(genpd)) |
| return; |
| |
| if (genpd->suspended_count != genpd->device_count |
| diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h |
| index dfcfbcecc34b..59661c3dcb19 100644 |
| --- a/include/linux/pm_domain.h |
| +++ b/include/linux/pm_domain.h |
| @@ -60,6 +60,10 @@ |
| * GENPD_FLAG_MIN_RESIDENCY: Enable the genpd governor to consider its |
| * components' next wakeup when determining the |
| * optimal idle state. |
| + * |
| + * GENPD_FLAG_SUSPEND_ON: Instructs genpd to keep the PM domain powered |
| + * on during suspend and runtime PM controlled |
| + * otherwise. |
| */ |
| #define GENPD_FLAG_PM_CLK (1U << 0) |
| #define GENPD_FLAG_IRQ_SAFE (1U << 1) |
| @@ -68,6 +72,7 @@ |
| #define GENPD_FLAG_CPU_DOMAIN (1U << 4) |
| #define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5) |
| #define GENPD_FLAG_MIN_RESIDENCY (1U << 6) |
| +#define GENPD_FLAG_SUSPEND_ON (1U << 7) |
| |
| enum gpd_status { |
| GENPD_STATE_ON = 0, /* PM domain is on */ |
| -- |
| 2.17.1 |
| |