linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: klimov.linux@gmail.com (Alexey Klimov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 20/20] cpufreq: scmi: add support for fast frequency switching
Date: Thu, 4 Jan 2018 22:10:22 +0000	[thread overview]
Message-ID: <CALW4P++xNXWUYoAEjV2=zfj-ps+JSD3kkkKRAeED08UF3Gabfw@mail.gmail.com> (raw)
In-Reply-To: <1514904162-11201-21-git-send-email-sudeep.holla@arm.com>

Hi Sudeep,

On Tue, Jan 2, 2018 at 2:42 PM, Sudeep Holla <sudeep.holla@arm.com> wrote:
> The cpufreq core provides option for drivers to implement fast_switch
> callback which is invoked for frequency switching from interrupt context.
>
> This patch adds support for fast_switch callback in SCMI cpufreq driver
> by making use of polling based SCMI transfer. It also sets the flag
> fast_switch_possible.
>
> Cc: linux-pm at vger.kernel.org
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/cpufreq/scmi-cpufreq.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
>
> diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c
> index 0ee9335d0063..d0a82d7c6fd4 100644
> --- a/drivers/cpufreq/scmi-cpufreq.c
> +++ b/drivers/cpufreq/scmi-cpufreq.c
> @@ -64,6 +64,19 @@ scmi_cpufreq_set_target(struct cpufreq_policy *policy, unsigned int index)
>         return perf_ops->freq_set(handle, priv->domain_id, freq, false);
>  }
>
> +static unsigned int scmi_cpufreq_fast_switch(struct cpufreq_policy *policy,
> +                                            unsigned int target_freq)
> +{
> +       struct scmi_data *priv = policy->driver_data;
> +       struct scmi_perf_ops *perf_ops = handle->perf_ops;
> +
> +       if (!perf_ops->freq_set(handle, priv->domain_id,
> +                               target_freq * 1000, true))
> +               return target_freq;
> +
> +       return 0;
> +}

Could you please explain how it's supposed to work for purpose of fast
frequency switching?

I am trying to track down ->freq_set.
So it looks like this will fire an scmi perf level set command and
will poll for this command to complete without asking for firmware to
send command completion irq.

scmi_perf_level_set() will call the following functions:

scmi_one_xfer_init();
scmi_do_xfer(handle, t);
scmi_one_xfer_put(handle, t);


The first function in the list calls scmi_one_xfer_get() which has
this in the description (I guess because of down_timeout()):
"This function can sleep depending on pending requests already in the system
for the SCMI entity. Further, this also holds a spinlock to maintain
integrity of internal data structures."

So it can sleep.

As far as I see description of fast frequency switching it's required
for fast_switch to not sleep:
(file Documentation/cpu-freq/cpu-drivers.txt)

"This function is used for frequency switching from scheduler's context.
Not all drivers are expected to implement it, as sleeping from within
this callback isn't allowed. This callback must be highly optimized to
do switching as fast as possible."


The other questions to this implementation of fast switching:

1) Fast switching callback must be highly optimized. Is it now? I see
few spinlocks (in scmi mbox client and in the mailbox framework) there
and polling functionality with udelay(5) inside that will timeout (if
my calculations are correct) after 0.5 ms.
2) Is it highly dependent on transport? If mailbox transport
->send_data() may sleep or hrtimer-based polling in mailbox framework
will be used, then this fast switch won't work, right?

I am still looking into that: I can be wrong and just trying to
understand if it is all okay.

[..]

Thanks,
Alexey

  reply	other threads:[~2018-01-04 22:10 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-02 14:42 [PATCH v5 00/20] firmware: ARM System Control and Management Interface(SCMI) support Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 01/20] dt-bindings: mailbox: add support for mailbox client shared memory Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 02/20] dt-bindings: arm: add support for ARM System Control and Management Interface(SCMI) protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 03/20] firmware: arm_scmi: add basic driver infrastructure for SCMI Sudeep Holla
2018-01-04 19:21   ` Alexey Klimov
2018-01-11 14:56   ` Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 04/20] firmware: arm_scmi: add common infrastructure and support for base protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 05/20] firmware: arm_scmi: add scmi protocol bus to enumerate protocol devices Sudeep Holla
2018-02-19 11:35   ` Arnd Bergmann
2018-02-19 11:44     ` Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 06/20] firmware: arm_scmi: add initial support for performance protocol Sudeep Holla
2018-01-12 14:55   ` Alexey Klimov
2018-01-12 15:41     ` Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 07/20] firmware: arm_scmi: add initial support for clock protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 08/20] firmware: arm_scmi: add initial support for power protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 09/20] firmware: arm_scmi: add initial support for sensor protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 10/20] firmware: arm_scmi: probe and initialise all the supported protocols Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 11/20] firmware: arm_scmi: add support for polling based SCMI transfers Sudeep Holla
2018-02-19 11:32   ` Arnd Bergmann
2018-02-19 11:50     ` Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 12/20] firmware: arm_scmi: add option for polling based performance domain operations Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 13/20] firmware: arm_scmi: refactor in preparation to support per-protocol channels Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 14/20] firmware: arm_scmi: add per-protocol channels support using idr objects Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 15/20] firmware: arm_scmi: add device power domain support using genpd Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 16/20] clk: add support for clocks provided by SCMI Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 17/20] hwmon: (core) Add hwmon_max to hwmon_sensor_types enumeration Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 18/20] hwmon: add support for sensors exported via ARM SCMI Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 19/20] cpufreq: add support for CPU DVFS based on SCMI message protocol Sudeep Holla
2018-01-02 14:42 ` [PATCH v5 20/20] cpufreq: scmi: add support for fast frequency switching Sudeep Holla
2018-01-04 22:10   ` Alexey Klimov [this message]
2018-01-05 10:45     ` Sudeep Holla
  -- strict thread matches above, loose matches on Subject: below --
2018-02-12 18:45 [PATCH v5 00/20][RESEND] firmware: ARM System Control and Management Interface(SCMI) support Sudeep Holla
2018-02-12 18:45 ` [PATCH v5 20/20] cpufreq: scmi: add support for fast frequency switching Sudeep Holla

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='CALW4P++xNXWUYoAEjV2=zfj-ps+JSD3kkkKRAeED08UF3Gabfw@mail.gmail.com' \
    --to=klimov.linux@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).