Messages in this thread | | | Date | Wed, 12 Aug 2020 22:32:54 +0530 | From | Sibi Sankar <> | Subject | Re: [PATCH 1/2] PM / Domains: Add GENPD_FLAG_SUSPEND_ON flag |
| |
Uffe, Thanks for taking time to review the series!
On 2020-08-12 15:15, Ulf Hansson wrote: > On Tue, 11 Aug 2020 at 21:03, Sibi Sankar <sibis@codeaurora.org> wrote: >> >> 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. > > As Kevin also requested, please elaborate more on the use case. > > Why exactly must the PM domain stay powered on during system suspend? > Is there a wakeup configured that needs to be managed - or is there a > co-processor/FW behaviour that needs to be obeyed to?
Yes this is a co-processor behavior that needs to be obeyed. Specifically application processor notifies the Always on Subsystem (AOSS) that a particular co-processor is up using the power domains exposed by AOSS QMP driver. AOSS uses this information to wait for the co-processors to suspend before starting its sleep sequence. The application processor powers off these power domains only if the co-processor has crashed or powered off.
> > Kind regards > Uffe > >> >> Signed-off-by: Sibi Sankar <sibis@codeaurora.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 2cb5e04cf86cd..ba78ac4a450d4 100644 >> --- a/drivers/base/power/domain.c >> +++ b/drivers/base/power/domain.c >> @@ -129,6 +129,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) >> @@ -949,7 +950,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 ee11502a575b0..3002a2d68936a 100644 >> --- a/include/linux/pm_domain.h >> +++ b/include/linux/pm_domain.h >> @@ -55,6 +55,10 @@ >> * >> * GENPD_FLAG_RPM_ALWAYS_ON: Instructs genpd to always keep the PM >> domain >> * powered on except for system suspend. >> + * >> + * 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) >> @@ -62,6 +66,7 @@ >> #define GENPD_FLAG_ACTIVE_WAKEUP (1U << 3) >> #define GENPD_FLAG_CPU_DOMAIN (1U << 4) >> #define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5) >> +#define GENPD_FLAG_SUSPEND_ON (1U << 6) >> >> enum gpd_status { >> GPD_STATE_ACTIVE = 0, /* PM domain is active */ >> -- >> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora >> Forum, >> a Linux Foundation Collaborative Project >>
-- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
| |