All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Capella <sebastian.capella@linaro.org>
To: linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org
Cc: devicetree@vger.kernel.org,
	Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Sudeep Holla <sudeep.holla@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Charles Garcia Tobin <Charles.Garcia-Tobin@arm.com>,
	Nicolas Pitre <nico@linaro.org>, Rob Herring <robh+dt@kernel.org>,
	Grant Likely <grant.likely@linaro.org>,
	Peter De Schrijver <pdeschrijver@nvidia.com>,
	Santosh Shilimkar <santosh.shilimkar@ti.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Amit Kucheria <amit.kucheria@linaro.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Antti Miettinen <ananaza@iki.fi>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Kevin Hilman <khilman@linaro.org>,
	Tomasz Figa <t.figa@samsung.com>,
	Sebastian Capella <capellas@broadcom.com>
Subject: Re: [PATCH RFC v3 3/6] drivers: cpuidle: implement OF based idle states infrastructure
Date: Thu, 08 May 2014 16:12:19 -0700	[thread overview]
Message-ID: <536c0f39.90ab420a.3da7.ffff86ca@mx.google.com> (raw)
In-Reply-To: <1399399483-17112-4-git-send-email-lorenzo.pieralisi@arm.com>

Quoting Lorenzo Pieralisi (2014-05-06 11:04:40)

> diff --git a/drivers/cpuidle/of_idle_states.c b/drivers/cpuidle/of_idle_states.c
> new file mode 100644
> index 0000000..360b7ad
> --- /dev/null
> +++ b/drivers/cpuidle/of_idle_states.c
> @@ -0,0 +1,293 @@
...
> +static int __init add_state_node(cpumask_t *cpumask,
> +                                struct device_node *state_node)
> +{
> +       struct state_elem *el;
> +       u32 tmp, val = 0;
> +
> +       pr_debug(" * %s...\n", state_node->full_name);
> +
> +       if (!state_cpus_valid(cpumask, state_node))
> +               return -EINVAL;
> +       /*
> +        * Parse just the properties required to sort the states.
> +        * Since we are missing a value defining the energy
> +        * efficiency of a state, for now the sorting code uses
> +        *
> +        * min-residency-us+exit-latency-us
> +        *
> +        * as sorting rank.
> +        */
> +       if (of_property_read_u32(state_node, "min-residency-us",
> +                                &tmp)) {
> +               pr_debug(" * %s missing min-residency-us property\n",
> +                        state_node->full_name);
> +               return -EINVAL;
> +       }
> +
> +       val += tmp;
> +
> +       if (of_property_read_u32(state_node, "exit-latency-us",
> +                                &tmp)) {
> +               pr_debug(" * %s missing exit-latency-us property\n",
> +                            state_node->full_name);
> +               return -EINVAL;
> +       }
> +
> +       val += tmp;

Sorry if i'm rehashing old stuff, but I prefer not to use the
min-residency + exit-latency to sort.  I saw Rob's comment suggesting it
and your reply.  I'm not sure when it was decided.

Would it be possible to sort instead based on the order in the
cpus->cpu-idle-states?  If not, my preference would be to either use
index like you had before, or specify another sort order / rank value.

I think there's potential for us to create lower power states that
have lower min-residencies (reduced power consumption in the state,
allowing us to more quickly recover the higher entrance cost)
with higher exit latencies in such a way that the formula would not
sort as we expect.  Having a separate value would allow us to control
the sorting in those cases.

> +
> +/*

For kernel-doc, I think you need a /** here, and a () after the
of_init_idle_driver below.  Also maybe Return: instead of Returns:
and I think the return paragraph goes at the end, but am not positive.

kernel-doc-nano-HOWTO.txt

> + * of_init_idle_driver - Parse the DT idle states and initialize the
> + *                      idle driver states array
> + *
> + * @drv:         Pointer to CPU idle driver to be initialized
> + * @state_nodes:  Array of struct device_nodes to be initialized if
> + *               init_nodes == true. Must be sized CPUIDLE_STATE_MAX
> + * @start_idx:    First idle state index to be initialized
> + * @init_nodes:   Boolean to request device nodes initialization
> + *
> + * Returns:
> + *     0 on success
> + *     <0 on failure
> + *
> + *     On success the states array in the cpuidle driver contains
> + *     initialized entries in the states array, starting from index start_idx.
> + *     If init_nodes == true, on success the state_nodes array is initialized
> + *     with idle state DT node pointers, starting from index start_idx,
> + *     in a 1:1 relation with the idle driver states array.
> + */
> +int __init of_init_idle_driver(struct cpuidle_driver *drv,
> +                              struct device_node *state_nodes[],
> +                              unsigned int start_idx, bool init_nodes)
> +{

Thanks!

Sebastian

WARNING: multiple messages have this Message-ID (diff)
From: sebastian.capella@linaro.org (Sebastian Capella)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC v3 3/6] drivers: cpuidle: implement OF based idle states infrastructure
Date: Thu, 08 May 2014 16:12:19 -0700	[thread overview]
Message-ID: <536c0f39.90ab420a.3da7.ffff86ca@mx.google.com> (raw)
In-Reply-To: <1399399483-17112-4-git-send-email-lorenzo.pieralisi@arm.com>

Quoting Lorenzo Pieralisi (2014-05-06 11:04:40)

> diff --git a/drivers/cpuidle/of_idle_states.c b/drivers/cpuidle/of_idle_states.c
> new file mode 100644
> index 0000000..360b7ad
> --- /dev/null
> +++ b/drivers/cpuidle/of_idle_states.c
> @@ -0,0 +1,293 @@
...
> +static int __init add_state_node(cpumask_t *cpumask,
> +                                struct device_node *state_node)
> +{
> +       struct state_elem *el;
> +       u32 tmp, val = 0;
> +
> +       pr_debug(" * %s...\n", state_node->full_name);
> +
> +       if (!state_cpus_valid(cpumask, state_node))
> +               return -EINVAL;
> +       /*
> +        * Parse just the properties required to sort the states.
> +        * Since we are missing a value defining the energy
> +        * efficiency of a state, for now the sorting code uses
> +        *
> +        * min-residency-us+exit-latency-us
> +        *
> +        * as sorting rank.
> +        */
> +       if (of_property_read_u32(state_node, "min-residency-us",
> +                                &tmp)) {
> +               pr_debug(" * %s missing min-residency-us property\n",
> +                        state_node->full_name);
> +               return -EINVAL;
> +       }
> +
> +       val += tmp;
> +
> +       if (of_property_read_u32(state_node, "exit-latency-us",
> +                                &tmp)) {
> +               pr_debug(" * %s missing exit-latency-us property\n",
> +                            state_node->full_name);
> +               return -EINVAL;
> +       }
> +
> +       val += tmp;

Sorry if i'm rehashing old stuff, but I prefer not to use the
min-residency + exit-latency to sort.  I saw Rob's comment suggesting it
and your reply.  I'm not sure when it was decided.

Would it be possible to sort instead based on the order in the
cpus->cpu-idle-states?  If not, my preference would be to either use
index like you had before, or specify another sort order / rank value.

I think there's potential for us to create lower power states that
have lower min-residencies (reduced power consumption in the state,
allowing us to more quickly recover the higher entrance cost)
with higher exit latencies in such a way that the formula would not
sort as we expect.  Having a separate value would allow us to control
the sorting in those cases.

> +
> +/*

For kernel-doc, I think you need a /** here, and a () after the
of_init_idle_driver below.  Also maybe Return: instead of Returns:
and I think the return paragraph goes at the end, but am not positive.

kernel-doc-nano-HOWTO.txt

> + * of_init_idle_driver - Parse the DT idle states and initialize the
> + *                      idle driver states array
> + *
> + * @drv:         Pointer to CPU idle driver to be initialized
> + * @state_nodes:  Array of struct device_nodes to be initialized if
> + *               init_nodes == true. Must be sized CPUIDLE_STATE_MAX
> + * @start_idx:    First idle state index to be initialized
> + * @init_nodes:   Boolean to request device nodes initialization
> + *
> + * Returns:
> + *     0 on success
> + *     <0 on failure
> + *
> + *     On success the states array in the cpuidle driver contains
> + *     initialized entries in the states array, starting from index start_idx.
> + *     If init_nodes == true, on success the state_nodes array is initialized
> + *     with idle state DT node pointers, starting from index start_idx,
> + *     in a 1:1 relation with the idle driver states array.
> + */
> +int __init of_init_idle_driver(struct cpuidle_driver *drv,
> +                              struct device_node *state_nodes[],
> +                              unsigned int start_idx, bool init_nodes)
> +{

Thanks!

Sebastian

  reply	other threads:[~2014-05-08 23:11 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-06 18:04 [PATCH RFC v3 0/6] ARM generic idle states Lorenzo Pieralisi
2014-05-06 18:04 ` Lorenzo Pieralisi
2014-05-06 18:04 ` [PATCH RFC v3 2/6] Documentation: devicetree: psci: define CPU suspend parameter Lorenzo Pieralisi
2014-05-06 18:04   ` Lorenzo Pieralisi
2014-05-07 23:45   ` Sebastian Capella
2014-05-07 23:45     ` Sebastian Capella
2014-05-06 18:04 ` [PATCH RFC v3 3/6] drivers: cpuidle: implement OF based idle states infrastructure Lorenzo Pieralisi
2014-05-06 18:04   ` Lorenzo Pieralisi
2014-05-08 23:12   ` Sebastian Capella [this message]
2014-05-08 23:12     ` Sebastian Capella
2014-05-09  9:47     ` Lorenzo Pieralisi
2014-05-09  9:47       ` Lorenzo Pieralisi
2014-05-09 12:04     ` Lorenzo Pieralisi
2014-05-09 12:04       ` Lorenzo Pieralisi
     [not found] ` <1399399483-17112-1-git-send-email-lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>
2014-05-06 18:04   ` [PATCH RFC v3 1/6] Documentation: arm: define DT idle states bindings Lorenzo Pieralisi
2014-05-06 18:04     ` Lorenzo Pieralisi
2014-05-07 23:43     ` Sebastian Capella
2014-05-07 23:43       ` Sebastian Capella
2014-05-08  8:57       ` Lorenzo Pieralisi
2014-05-08  8:57         ` Lorenzo Pieralisi
2014-05-08 23:28         ` Sebastian Capella
2014-05-08 23:28           ` Sebastian Capella
2014-05-06 18:04   ` [PATCH RFC v3 4/6] arm64: add PSCI CPU_SUSPEND based cpu_suspend support Lorenzo Pieralisi
2014-05-06 18:04     ` Lorenzo Pieralisi
2014-05-09 23:11     ` Sebastian Capella
2014-05-09 23:11       ` Sebastian Capella
2014-05-06 18:04   ` [PATCH RFC v3 5/6] drivers: cpuidle: CPU idle ARM64 driver Lorenzo Pieralisi
2014-05-06 18:04     ` Lorenzo Pieralisi
2014-05-09  0:48     ` Sebastian Capella
2014-05-09  0:48       ` Sebastian Capella
2014-05-09  9:40       ` Lorenzo Pieralisi
2014-05-09  9:40         ` Lorenzo Pieralisi
2014-05-06 18:04 ` [PATCH RFC v3 6/6] arm64: boot: dts: update rtsm aemv8 dts with PSCI and idle states Lorenzo Pieralisi
2014-05-06 18:04   ` Lorenzo Pieralisi
2014-05-09  0:51   ` Sebastian Capella
2014-05-09  0:51     ` Sebastian Capella

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=536c0f39.90ab420a.3da7.ffff86ca@mx.google.com \
    --to=sebastian.capella@linaro.org \
    --cc=Charles.Garcia-Tobin@arm.com \
    --cc=amit.kucheria@linaro.org \
    --cc=ananaza@iki.fi \
    --cc=capellas@broadcom.com \
    --cc=catalin.marinas@arm.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=grant.likely@linaro.org \
    --cc=khilman@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=nico@linaro.org \
    --cc=pdeschrijver@nvidia.com \
    --cc=robh+dt@kernel.org \
    --cc=santosh.shilimkar@ti.com \
    --cc=sboyd@codeaurora.org \
    --cc=sudeep.holla@arm.com \
    --cc=t.figa@samsung.com \
    --cc=vincent.guittot@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.