From: Kevin Hilman <khilman@baylibre.com>
To: Lina Iyer <lina.iyer@linaro.org>
Cc: ulf.hansson@linaro.org, rjw@rjwysocki.net,
linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
geert@linux-m68k.org, k.kozlowski@samsung.com,
msivasub@codeaurora.org, agross@codeaurora.org,
sboyd@codeaurora.org, linux-arm-msm@vger.kernel.org,
lorenzo.pieralisi@arm.com, ahaslam@baylibre.com,
mtitinger@baylibre.com,
Daniel Lezcano <daniel.lezcano@linaro.org>
Subject: Re: [RFC v3 03/12] PM / cpu_domains: Setup PM domains for CPUs/clusters
Date: Wed, 02 Mar 2016 17:18:13 -0800 [thread overview]
Message-ID: <7hfuw8xstm.fsf@baylibre.com> (raw)
In-Reply-To: <1456866931-37851-5-git-send-email-lina.iyer@linaro.org> (Lina Iyer's message of "Tue, 1 Mar 2016 14:15:22 -0700")
Lina Iyer <lina.iyer@linaro.org> writes:
> Define and add Generic PM domains (genpd) for CPU clusters. Many new
Not sure this is "new". :)
> SoCs group CPUs as clusters. Clusters share common resources like power
> rails, caches, VFP, Coresight etc. When all CPUs in the cluster are
> idle, these shared resources may also be put in their idle state.
>
> CPUs may be associated with their domain providers in DT. The domains in
> turn may be associated with their providers.
Not sure what this sentence means.
> This is clean way to model
> the cluster hierarchy like that of ARM's big.little architecture.
... or any multi-cluster architecture with independent power rails.
> For each CPU in the DT, we identify the domain provider; initialize and
> register the PM domain if isn't already registered and attach all the
> CPU devices to the domain. Usually, when there are multiple clusters of
> CPUs, there is a top level coherency domain that is dependent on these
> individual domains. All domains thus created are marked IRQ safe
> automatically and therefore may be powered down when the CPUs in the
> domain are powered down by cpuidle.
s/by cpuidle/during the idle path/
A bit about why IRQ safe is needed during the idle path would be good also.
> Reading DT, initializing Generic PM domains, attaching CPUs to it
s/it/their/
> domains are common functionalities across ARM SoCs. Provide a common set
s/ARM/many/
> of APIs to setup PM domains for CPU clusters and its parents. The
> platform drivers may just call of_setup_cpu_pd() to do a single step
> setup of CPU domains.
>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Suggested-by: Kevin Hilman <khilman@linaro.org>
> Signed-off-by: Lina Iyer <lina.iyer@linaro.org>
> ---
> drivers/base/power/Makefile | 1 +
> drivers/base/power/cpu_domains.c | 267 +++++++++++++++++++++++++++++++++++++++
> include/linux/cpu_domains.h | 35 +++++
nit: cpu_pm_domains.[ch] ?
> 3 files changed, 303 insertions(+)
> create mode 100644 drivers/base/power/cpu_domains.c
> create mode 100644 include/linux/cpu_domains.h
>
[...]
> +/**
> + * of_init_cpu_pm_domain() - Initialize a CPU PM domain from a device node
> + *
> + * @dn: The domain provider's device node
> + * @ops: The power_on/_off callbacks for the domain
> + *
> + * Returns the generic_pm_domain (genpd) pointer to the domain on success
> + */
> +static struct generic_pm_domain *of_init_cpu_pm_domain(struct device_node *dn,
> + const struct cpu_pd_ops *ops)
> +{
> + struct cpu_pm_domain *pd = NULL;
> + struct generic_pm_domain *genpd = NULL;
> + int ret = -ENOMEM;
> +
> + if (!of_device_is_available(dn))
> + return ERR_PTR(-ENODEV);
> +
> + genpd = kzalloc(sizeof(*genpd), GFP_KERNEL);
> + if (!genpd)
> + goto fail;
> +
> + genpd->name = kstrndup(dn->full_name, CPU_PD_NAME_MAX, GFP_KERNEL);
> + if (!genpd->name)
> + goto fail;
> +
> + pd = kzalloc(sizeof(*pd), GFP_KERNEL);
> + if (!pd)
> + goto fail;
> +
> + pd->genpd = genpd;
> + pd->genpd->power_off = cpu_pd_power_off;
> + pd->genpd->power_on = cpu_pd_power_on;
> + pd->genpd->flags |= GENPD_FLAG_IRQ_SAFE;
Again, just to be thorough, maybe a comment here describing that CPU PM
domains must be IRQ safe because the callbacks happend during the idle
path when interrupts are disabled.
[...]
I ran out of time for the day here, but will continue looking at the
rest implementation later. Thought it best to send what I already
reviewed though.
Kevin
WARNING: multiple messages have this Message-ID (diff)
From: khilman@baylibre.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC v3 03/12] PM / cpu_domains: Setup PM domains for CPUs/clusters
Date: Wed, 02 Mar 2016 17:18:13 -0800 [thread overview]
Message-ID: <7hfuw8xstm.fsf@baylibre.com> (raw)
In-Reply-To: <1456866931-37851-5-git-send-email-lina.iyer@linaro.org> (Lina Iyer's message of "Tue, 1 Mar 2016 14:15:22 -0700")
Lina Iyer <lina.iyer@linaro.org> writes:
> Define and add Generic PM domains (genpd) for CPU clusters. Many new
Not sure this is "new". :)
> SoCs group CPUs as clusters. Clusters share common resources like power
> rails, caches, VFP, Coresight etc. When all CPUs in the cluster are
> idle, these shared resources may also be put in their idle state.
>
> CPUs may be associated with their domain providers in DT. The domains in
> turn may be associated with their providers.
Not sure what this sentence means.
> This is clean way to model
> the cluster hierarchy like that of ARM's big.little architecture.
... or any multi-cluster architecture with independent power rails.
> For each CPU in the DT, we identify the domain provider; initialize and
> register the PM domain if isn't already registered and attach all the
> CPU devices to the domain. Usually, when there are multiple clusters of
> CPUs, there is a top level coherency domain that is dependent on these
> individual domains. All domains thus created are marked IRQ safe
> automatically and therefore may be powered down when the CPUs in the
> domain are powered down by cpuidle.
s/by cpuidle/during the idle path/
A bit about why IRQ safe is needed during the idle path would be good also.
> Reading DT, initializing Generic PM domains, attaching CPUs to it
s/it/their/
> domains are common functionalities across ARM SoCs. Provide a common set
s/ARM/many/
> of APIs to setup PM domains for CPU clusters and its parents. The
> platform drivers may just call of_setup_cpu_pd() to do a single step
> setup of CPU domains.
>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> Suggested-by: Kevin Hilman <khilman@linaro.org>
> Signed-off-by: Lina Iyer <lina.iyer@linaro.org>
> ---
> drivers/base/power/Makefile | 1 +
> drivers/base/power/cpu_domains.c | 267 +++++++++++++++++++++++++++++++++++++++
> include/linux/cpu_domains.h | 35 +++++
nit: cpu_pm_domains.[ch] ?
> 3 files changed, 303 insertions(+)
> create mode 100644 drivers/base/power/cpu_domains.c
> create mode 100644 include/linux/cpu_domains.h
>
[...]
> +/**
> + * of_init_cpu_pm_domain() - Initialize a CPU PM domain from a device node
> + *
> + * @dn: The domain provider's device node
> + * @ops: The power_on/_off callbacks for the domain
> + *
> + * Returns the generic_pm_domain (genpd) pointer to the domain on success
> + */
> +static struct generic_pm_domain *of_init_cpu_pm_domain(struct device_node *dn,
> + const struct cpu_pd_ops *ops)
> +{
> + struct cpu_pm_domain *pd = NULL;
> + struct generic_pm_domain *genpd = NULL;
> + int ret = -ENOMEM;
> +
> + if (!of_device_is_available(dn))
> + return ERR_PTR(-ENODEV);
> +
> + genpd = kzalloc(sizeof(*genpd), GFP_KERNEL);
> + if (!genpd)
> + goto fail;
> +
> + genpd->name = kstrndup(dn->full_name, CPU_PD_NAME_MAX, GFP_KERNEL);
> + if (!genpd->name)
> + goto fail;
> +
> + pd = kzalloc(sizeof(*pd), GFP_KERNEL);
> + if (!pd)
> + goto fail;
> +
> + pd->genpd = genpd;
> + pd->genpd->power_off = cpu_pd_power_off;
> + pd->genpd->power_on = cpu_pd_power_on;
> + pd->genpd->flags |= GENPD_FLAG_IRQ_SAFE;
Again, just to be thorough, maybe a comment here describing that CPU PM
domains must be IRQ safe because the callbacks happend during the idle
path when interrupts are disabled.
[...]
I ran out of time for the day here, but will continue looking at the
rest implementation later. Thought it best to send what I already
reviewed though.
Kevin
next prev parent reply other threads:[~2016-03-03 1:18 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 21:15 [RFC v3 00/12] PM: SoC idle support using PM domains Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [BUG FIX] PM / cpu_domains: Check for NULL callbacks Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:17 ` Lina Iyer
2016-03-01 21:17 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 01/12] PM / Domains: Abstract genpd locking Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-04 10:09 ` Ulf Hansson
2016-03-04 10:09 ` Ulf Hansson
2016-03-01 21:15 ` [RFC v3 02/12] PM / Domains: Support IRQ safe PM domains Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-03 0:57 ` Kevin Hilman
2016-03-03 0:57 ` Kevin Hilman
2016-03-01 21:15 ` [RFC v3 03/12] PM / cpu_domains: Setup PM domains for CPUs/clusters Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-03 1:18 ` Kevin Hilman [this message]
2016-03-03 1:18 ` Kevin Hilman
2016-03-01 21:15 ` [RFC v3 04/12] ARM: cpuidle: Add runtime PM support for CPUs Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-04 18:03 ` Stephen Boyd
2016-03-04 18:03 ` Stephen Boyd
2016-03-01 21:15 ` [RFC v3 05/12] timer: Export next wake up of a CPU Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 06/12] PM / cpu_domains: Record CPUs that are part of the domain Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 07/12] PM / cpu_domains: Add PM Domain governor for CPUs Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 08/12] Documentation / cpu_domains: Describe CPU PM domains setup and governor Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 09/12] drivers: firmware: psci: Allow OS Initiated suspend mode Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 10/12] ARM64: psci: Support cluster idle states for OS-Initiated Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-01 21:15 ` [RFC v3 11/12] ARM64: dts: Add PSCI cpuidle support for MSM8916 Lina Iyer
2016-03-01 21:15 ` Lina Iyer
2016-03-21 3:50 ` Andy Gross
2016-03-21 3:50 ` Andy Gross
2016-03-01 21:15 ` [RFC v3 12/12] ARM64: dts: Define CPU power domain " Lina Iyer
2016-03-01 21:15 ` Lina Iyer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7hfuw8xstm.fsf@baylibre.com \
--to=khilman@baylibre.com \
--cc=agross@codeaurora.org \
--cc=ahaslam@baylibre.com \
--cc=daniel.lezcano@linaro.org \
--cc=geert@linux-m68k.org \
--cc=k.kozlowski@samsung.com \
--cc=lina.iyer@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=msivasub@codeaurora.org \
--cc=mtitinger@baylibre.com \
--cc=rjw@rjwysocki.net \
--cc=sboyd@codeaurora.org \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.