From: Russell King - ARM Linux <linux@arm.linux.org.uk>
To: Paul Walmsley <paul@pwsan.com>
Cc: Mike Turquette <mturquette@ti.com>,
linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, jeremy.kerr@canonical.com,
broonie@opensource.wolfsonmicro.com, tglx@linutronix.de,
linus.walleij@stericsson.com, amit.kucheria@linaro.org,
dsaxena@linaro.org, patches@linaro.org,
linaro-dev@lists.linaro.org, grant.likely@secretlab.ca,
sboyd@quicinc.com, shawn.guo@freescale.com, skannan@quicinc.com,
magnus.damm@gmail.com, arnd.bergmann@linaro.org,
eric.miao@linaro.org, richard.zhao@linaro.org,
Mike Turquette <mturquette@linaro.org>
Subject: Re: [PATCH v3 3/5] clk: introduce the common clock framework
Date: Thu, 1 Dec 2011 08:45:47 +0000 [thread overview]
Message-ID: <20111201084547.GD19739@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <alpine.DEB.2.00.1111291619110.6289@utopia.booyaka.com>
On Wed, Nov 30, 2011 at 06:20:50PM -0700, Paul Walmsley wrote:
> 1. When a clock user calls clk_enable() on a clock, the clock framework
> should prevent other users of the clock from changing the clock's rate.
> This should persist until the clock user calls clk_disable() (but see also
> #2 below). This will ensure that clock users can rely on the rate
> returned by clk_get_rate(), as long as it's called between clk_enable()
> and clk_disable(). And since the clock's rate is guaranteed to remain the
> same during this time, code that cannot tolerate clock rate changes
> without special handling (such as driver code for external I/O devices)
> will work safely without further modification.
So, if you have a PLL whose parent clock is not used by anything else.
You want to program it to a certain rate.
You call clk_disable() on the PLL clock. This walks up the tree and
disables the parent. You then try to set the rate using clk_set_rate().
clk_set_rate() in this circumstance can't wait for the PLL to lock
because it can't - there's no reference clock for it.
You then call clk_enable(). The PLL now takes its time to lock. You
can't sleep in clk_enable() because it might be called from atomic
contexts, so you have to spin waiting for this.
Overloading clk_disable/clk_enable in this way is a bad solution to
this problem.
WARNING: multiple messages have this Message-ID (diff)
From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 3/5] clk: introduce the common clock framework
Date: Thu, 1 Dec 2011 08:45:47 +0000 [thread overview]
Message-ID: <20111201084547.GD19739@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <alpine.DEB.2.00.1111291619110.6289@utopia.booyaka.com>
On Wed, Nov 30, 2011 at 06:20:50PM -0700, Paul Walmsley wrote:
> 1. When a clock user calls clk_enable() on a clock, the clock framework
> should prevent other users of the clock from changing the clock's rate.
> This should persist until the clock user calls clk_disable() (but see also
> #2 below). This will ensure that clock users can rely on the rate
> returned by clk_get_rate(), as long as it's called between clk_enable()
> and clk_disable(). And since the clock's rate is guaranteed to remain the
> same during this time, code that cannot tolerate clock rate changes
> without special handling (such as driver code for external I/O devices)
> will work safely without further modification.
So, if you have a PLL whose parent clock is not used by anything else.
You want to program it to a certain rate.
You call clk_disable() on the PLL clock. This walks up the tree and
disables the parent. You then try to set the rate using clk_set_rate().
clk_set_rate() in this circumstance can't wait for the PLL to lock
because it can't - there's no reference clock for it.
You then call clk_enable(). The PLL now takes its time to lock. You
can't sleep in clk_enable() because it might be called from atomic
contexts, so you have to spin waiting for this.
Overloading clk_disable/clk_enable in this way is a bad solution to
this problem.
next prev parent reply other threads:[~2011-12-01 8:45 UTC|newest]
Thread overview: 157+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-22 1:40 [PATCH v3 0/5] common clk framework Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-22 1:40 ` [PATCH v3 1/5] clk: Kconfig: add entry for HAVE_CLK_PREPARE Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-26 0:51 ` Shawn Guo
2011-11-26 0:51 ` Shawn Guo
2011-11-26 0:51 ` Shawn Guo
2011-11-22 1:40 ` [PATCH v3 2/5] Documentation: common clk API Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-23 2:03 ` Saravana Kannan
2011-11-23 2:03 ` Saravana Kannan
2011-11-23 20:33 ` Turquette, Mike
2011-11-23 20:33 ` Turquette, Mike
[not found] ` <CAJOA=zNPNok6HG1jvg=v-_SFJCyNgYPPJbmTeyfOQ0iYdjbStQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-26 8:47 ` Shawn Guo
2011-11-26 8:47 ` Shawn Guo
2011-11-26 8:47 ` Shawn Guo
2011-11-27 1:43 ` Turquette, Mike
2011-11-27 1:43 ` Turquette, Mike
2011-11-22 1:40 ` [PATCH v3 3/5] clk: introduce the common clock framework Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-23 3:12 ` Saravana Kannan
2011-11-23 3:12 ` Saravana Kannan
2011-11-23 21:30 ` Turquette, Mike
2011-11-23 21:30 ` Turquette, Mike
2011-11-23 21:30 ` Turquette, Mike
2011-11-26 13:22 ` Shawn Guo
2011-11-26 13:22 ` Shawn Guo
2011-11-26 13:22 ` Shawn Guo
2011-11-27 6:00 ` Turquette, Mike
2011-11-27 6:00 ` Turquette, Mike
2011-12-01 1:20 ` Paul Walmsley
2011-12-01 1:20 ` Paul Walmsley
[not found] ` <alpine.DEB.2.00.1111291619110.6289-rwI8Ez+7Ko+d5PgPZx9QOdBPR1lH4CV8@public.gmane.org>
2011-12-01 5:53 ` Turquette, Mike
2011-12-01 5:53 ` Turquette, Mike
2011-12-01 5:53 ` Turquette, Mike
2011-12-01 6:39 ` Paul Walmsley
2011-12-01 6:39 ` Paul Walmsley
2011-12-01 14:42 ` Mark Brown
2011-12-01 14:42 ` Mark Brown
2011-12-01 18:25 ` Turquette, Mike
2011-12-01 18:25 ` Turquette, Mike
2011-12-01 18:25 ` Turquette, Mike
2011-12-01 18:30 ` Paul Walmsley
2011-12-01 18:30 ` Paul Walmsley
[not found] ` <alpine.DEB.2.00.1112011124221.6289-rwI8Ez+7Ko+d5PgPZx9QOdBPR1lH4CV8@public.gmane.org>
2011-12-01 18:32 ` Mark Brown
2011-12-01 18:32 ` Mark Brown
2011-12-01 18:32 ` Mark Brown
2011-12-01 22:03 ` Russell King - ARM Linux
2011-12-01 22:03 ` Russell King - ARM Linux
2011-12-03 1:04 ` Paul Walmsley
2011-12-03 1:04 ` Paul Walmsley
2011-12-01 8:45 ` Russell King - ARM Linux [this message]
2011-12-01 8:45 ` Russell King - ARM Linux
2011-12-02 17:13 ` Paul Walmsley
2011-12-02 17:13 ` Paul Walmsley
2011-12-02 20:23 ` Russell King - ARM Linux
2011-12-02 20:23 ` Russell King - ARM Linux
2011-12-02 20:32 ` Uwe Kleine-König
2011-12-02 20:32 ` Uwe Kleine-König
2011-12-02 20:32 ` Uwe Kleine-König
2011-12-01 2:13 ` Paul Walmsley
2011-12-01 2:13 ` Paul Walmsley
2011-12-05 21:15 ` Paul Walmsley
2011-12-05 21:15 ` Paul Walmsley
2011-12-05 23:48 ` Russell King - ARM Linux
2011-12-05 23:48 ` Russell King - ARM Linux
2011-12-06 1:37 ` Paul Walmsley
2011-12-06 1:37 ` Paul Walmsley
2011-12-06 6:28 ` Paul Walmsley
2011-12-06 6:28 ` Paul Walmsley
2011-12-05 23:40 ` Turquette, Mike
2011-12-05 23:40 ` Turquette, Mike
[not found] ` <1321926047-14211-1-git-send-email-mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2011-11-22 1:40 ` [PATCH v3 4/5] clk: basic gateable and fixed-rate clks Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-22 13:11 ` Arnd Bergmann
2011-11-22 13:11 ` Arnd Bergmann
2011-11-22 15:03 ` Mark Salter
2011-11-22 15:03 ` Mark Salter
[not found] ` <1321974200.2412.25.camel-PDpCo7skNiwAicBL8TP8PQ@public.gmane.org>
2011-11-22 15:49 ` Arnd Bergmann
2011-11-22 15:49 ` Arnd Bergmann
2011-11-22 15:49 ` Arnd Bergmann
2011-11-26 13:48 ` Shawn Guo
2011-11-26 13:48 ` Shawn Guo
2011-11-26 13:48 ` Shawn Guo
2011-11-27 6:03 ` Turquette, Mike
2011-11-27 6:03 ` Turquette, Mike
2011-11-27 6:03 ` Turquette, Mike
2011-11-27 0:09 ` Shawn Guo
2011-11-27 0:09 ` Shawn Guo
2011-11-27 0:09 ` Shawn Guo
2011-11-22 1:40 ` [PATCH v3 5/5] clk: export tree topology and clk data via sysfs Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-22 1:40 ` Mike Turquette
2011-11-22 15:49 ` Greg KH
2011-11-22 15:49 ` Greg KH
2011-11-22 15:49 ` Greg KH
2011-11-22 17:57 ` Mike Turquette
2011-11-22 17:57 ` Mike Turquette
2011-11-22 19:13 ` Greg KH
2011-11-22 19:13 ` Greg KH
2011-11-22 19:13 ` Greg KH
2011-11-23 3:48 ` Saravana Kannan
2011-11-23 3:48 ` Saravana Kannan
2011-11-23 20:43 ` Turquette, Mike
2011-11-23 20:43 ` Turquette, Mike
2011-11-23 20:43 ` Turquette, Mike
2011-11-23 16:59 ` Tony Lindgren
2011-11-23 16:59 ` Tony Lindgren
[not found] ` <20111123165903.GF31337-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2011-11-23 18:06 ` Russell King - ARM Linux
2011-11-23 18:06 ` Russell King - ARM Linux
2011-11-23 18:06 ` Russell King - ARM Linux
[not found] ` <20111123180651.GB19739-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-11-23 18:55 ` Tony Lindgren
2011-11-23 18:55 ` Tony Lindgren
2011-11-23 18:55 ` Tony Lindgren
2011-11-23 19:09 ` Mark Brown
2011-11-23 19:09 ` Mark Brown
[not found] ` <20111123190954.GA4365-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>
2011-11-23 19:19 ` Tony Lindgren
2011-11-23 19:19 ` Tony Lindgren
2011-11-23 19:19 ` Tony Lindgren
[not found] ` <20111123185518.GG31337-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2011-11-23 22:42 ` Russell King - ARM Linux
2011-11-23 22:42 ` Russell King - ARM Linux
2011-11-23 22:42 ` Russell King - ARM Linux
[not found] ` <20111123224248.GC19739-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2011-11-24 1:08 ` Tony Lindgren
2011-11-24 1:08 ` Tony Lindgren
2011-11-24 1:08 ` Tony Lindgren
[not found] ` <1321926047-14211-6-git-send-email-mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2011-11-22 13:07 ` Arnd Bergmann
2011-11-22 13:07 ` Arnd Bergmann
2011-11-22 13:07 ` Arnd Bergmann
2011-11-22 17:42 ` Mike Turquette
2011-11-22 17:42 ` Mike Turquette
2011-11-22 16:37 ` Grant Likely
2011-11-22 18:01 ` Mike Turquette
2011-11-22 18:01 ` Mike Turquette
[not found] ` <CAPtuhTheG-mvoGMaB2y9BSKF-abm2yigoN-SXaeCb+P5R6t_Dg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-11-22 19:19 ` Grant Likely
2011-11-22 19:19 ` Grant Likely
2011-11-22 19:19 ` Grant Likely
2011-11-22 20:02 ` Arnd Bergmann
2011-11-22 20:02 ` Arnd Bergmann
2011-11-22 20:19 ` Turquette, Mike
2011-11-22 20:19 ` Turquette, Mike
2011-11-22 15:42 ` [PATCH v3 0/5] common clk framework Greg KH
2011-11-22 15:42 ` Greg KH
2011-11-22 17:45 ` Russell King - ARM Linux
2011-11-22 17:45 ` Russell King - ARM Linux
2011-11-22 18:09 ` Mike Turquette
2011-11-22 18:09 ` Mike Turquette
2011-11-22 19:12 ` Greg KH
2011-11-22 19:12 ` Greg KH
2011-11-22 19:30 ` Mark Brown
2011-11-22 19:30 ` Mark Brown
2011-11-26 7:06 ` Shawn Guo
2011-11-26 7:06 ` Shawn Guo
2011-11-26 7:06 ` Shawn Guo
[not found] ` <20111126070601.GA19176-+NayF8gZjK2ctlrPMvKcciBecyulp+rMXqFh9Ls21Oc@public.gmane.org>
2011-11-27 1:12 ` Turquette, Mike
2011-11-27 1:12 ` Turquette, Mike
2011-11-27 1:12 ` Turquette, Mike
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=20111201084547.GD19739@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=amit.kucheria@linaro.org \
--cc=arnd.bergmann@linaro.org \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=dsaxena@linaro.org \
--cc=eric.miao@linaro.org \
--cc=grant.likely@secretlab.ca \
--cc=jeremy.kerr@canonical.com \
--cc=linaro-dev@lists.linaro.org \
--cc=linus.walleij@stericsson.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mturquette@linaro.org \
--cc=mturquette@ti.com \
--cc=patches@linaro.org \
--cc=paul@pwsan.com \
--cc=richard.zhao@linaro.org \
--cc=sboyd@quicinc.com \
--cc=shawn.guo@freescale.com \
--cc=skannan@quicinc.com \
--cc=tglx@linutronix.de \
/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.