From: Saravana Kannan <skannan@codeaurora.org>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API
Date: Sat, 22 Jan 2011 01:35:42 +0000 [thread overview]
Message-ID: <4D3A346E.9070709@codeaurora.org> (raw)
In-Reply-To: <AANLkTimT+vfg9p4GSnn1jGW9r_gVom7xEUzMVJDscPg2@mail.gmail.com>
On 01/21/2011 02:28 PM, Colin Cross wrote:
> On Fri, Jan 21, 2011 at 2:02 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
>> On Fri, Jan 21, 2011 at 04:53:44PM -0500, Nicolas Pitre wrote:
>>> So I think that the API must be augmented with more methods, such as:
>>>
>>> clk_slow_enable():
>>> - may sleep
>>> - may be a no-op if the clk_fast_enable() is supported
>>>
>>> clk_fast_enable():
>>> - may not sleep, used in atomic context
>>> - may be a no-op if controlling the clock takes time, in which case
>>> clk_slow_enable() must have set the clock up entirely
>>>
>>> ... and similar for clk_slow_disable() and clk_fast_disable().
>>
>> Isn't this along the same lines as my clk_prepare() vs clk_enable()
>> suggestion?
>>
>> I suggested that clk_prepare() be callable only from non-atomic contexts,
>> and do whatever's required to ensure that the clock is available. That
>> may end up enabling the clock as a result.
>>
>> clk_enable() callable from atomic contexts, and turns the clock on if
>> the hardware supports such an operation.
>>
>> So, if you have something like:
>>
>> Xtal--->PLL--->Routing/Masking--->Device
>>
>> clk = clk_get() returns the clock for the device.
>>
>> clk_prepare(clk) would walk up the clock tree, selecting the routing and
>> preparing each clock. Clocks prior to _and_ including the PLL would need
>> to be enabled.
>>
>> clk_enable(clk) would walk up the tree if the clock isn't already enabled,
>> calling clk_enable() on the parent clock. As we require prepared clocks
>> to already be enabled, this automatically stops at the PLL.
>>
>> To encourage correct usage, we just need to make sure that clk_prepare()
>> has a might_sleep() thing, and clk_enable() throws a fit if it's used
>> on a clk without prepare being used first. The second point is not easy
>> to do in a foolproof manner though, but doing _something_ is better than
>> nothing.
>
> I like this proposal, and I prefer the clk_prepare naming over
> clk_slow_enable - too many people would call clk_slow_enable instead
> of, and not as well as, clk_fast_enable.
>
> On Tegra, I currently use the ugly conditional mutex or spinlock
> method to deal with voltage scaling based on clock frequency.
Colin,
MSM is in a similar situation, so thought I should bring this up to you
attention -- do you have no use case for changing the rate in atomic
context? If you do, the clk_prepare/unprepare() approach won't work.
Do you have no such requirement?
-Saravana
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
WARNING: multiple messages have this Message-ID (diff)
From: skannan@codeaurora.org (Saravana Kannan)
To: linux-arm-kernel@lists.infradead.org
Subject: Locking in the clk API
Date: Fri, 21 Jan 2011 17:35:42 -0800 [thread overview]
Message-ID: <4D3A346E.9070709@codeaurora.org> (raw)
In-Reply-To: <AANLkTimT+vfg9p4GSnn1jGW9r_gVom7xEUzMVJDscPg2@mail.gmail.com>
On 01/21/2011 02:28 PM, Colin Cross wrote:
> On Fri, Jan 21, 2011 at 2:02 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
>> On Fri, Jan 21, 2011 at 04:53:44PM -0500, Nicolas Pitre wrote:
>>> So I think that the API must be augmented with more methods, such as:
>>>
>>> clk_slow_enable():
>>> - may sleep
>>> - may be a no-op if the clk_fast_enable() is supported
>>>
>>> clk_fast_enable():
>>> - may not sleep, used in atomic context
>>> - may be a no-op if controlling the clock takes time, in which case
>>> clk_slow_enable() must have set the clock up entirely
>>>
>>> ... and similar for clk_slow_disable() and clk_fast_disable().
>>
>> Isn't this along the same lines as my clk_prepare() vs clk_enable()
>> suggestion?
>>
>> I suggested that clk_prepare() be callable only from non-atomic contexts,
>> and do whatever's required to ensure that the clock is available. That
>> may end up enabling the clock as a result.
>>
>> clk_enable() callable from atomic contexts, and turns the clock on if
>> the hardware supports such an operation.
>>
>> So, if you have something like:
>>
>> Xtal--->PLL--->Routing/Masking--->Device
>>
>> clk = clk_get() returns the clock for the device.
>>
>> clk_prepare(clk) would walk up the clock tree, selecting the routing and
>> preparing each clock. Clocks prior to _and_ including the PLL would need
>> to be enabled.
>>
>> clk_enable(clk) would walk up the tree if the clock isn't already enabled,
>> calling clk_enable() on the parent clock. As we require prepared clocks
>> to already be enabled, this automatically stops at the PLL.
>>
>> To encourage correct usage, we just need to make sure that clk_prepare()
>> has a might_sleep() thing, and clk_enable() throws a fit if it's used
>> on a clk without prepare being used first. The second point is not easy
>> to do in a foolproof manner though, but doing _something_ is better than
>> nothing.
>
> I like this proposal, and I prefer the clk_prepare naming over
> clk_slow_enable - too many people would call clk_slow_enable instead
> of, and not as well as, clk_fast_enable.
>
> On Tegra, I currently use the ugly conditional mutex or spinlock
> method to deal with voltage scaling based on clock frequency.
Colin,
MSM is in a similar situation, so thought I should bring this up to you
attention -- do you have no use case for changing the rate in atomic
context? If you do, the clk_prepare/unprepare() approach won't work.
Do you have no such requirement?
-Saravana
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
WARNING: multiple messages have this Message-ID (diff)
From: Saravana Kannan <skannan@codeaurora.org>
To: Colin Cross <ccross@google.com>
Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>,
Nicolas Pitre <nicolas.pitre@linaro.org>,
Dima Zavin <dmitriyz@google.com>,
Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
linux-sh@vger.kernel.org,
Ben Herrenschmidt <benh@kernel.crashing.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Paul Mundt <lethal@linux-sh.org>,
linux-kernel@vger.kernel.org, Ben Dooks <ben-linux@fluff.org>,
Uwe Kleine-K??nig <u.kleine-koenig@pengutronix.de>,
Jeremy Kerr <jeremy.kerr@canonical.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API
Date: Fri, 21 Jan 2011 17:35:42 -0800 [thread overview]
Message-ID: <4D3A346E.9070709@codeaurora.org> (raw)
In-Reply-To: <AANLkTimT+vfg9p4GSnn1jGW9r_gVom7xEUzMVJDscPg2@mail.gmail.com>
On 01/21/2011 02:28 PM, Colin Cross wrote:
> On Fri, Jan 21, 2011 at 2:02 PM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
>> On Fri, Jan 21, 2011 at 04:53:44PM -0500, Nicolas Pitre wrote:
>>> So I think that the API must be augmented with more methods, such as:
>>>
>>> clk_slow_enable():
>>> - may sleep
>>> - may be a no-op if the clk_fast_enable() is supported
>>>
>>> clk_fast_enable():
>>> - may not sleep, used in atomic context
>>> - may be a no-op if controlling the clock takes time, in which case
>>> clk_slow_enable() must have set the clock up entirely
>>>
>>> ... and similar for clk_slow_disable() and clk_fast_disable().
>>
>> Isn't this along the same lines as my clk_prepare() vs clk_enable()
>> suggestion?
>>
>> I suggested that clk_prepare() be callable only from non-atomic contexts,
>> and do whatever's required to ensure that the clock is available. That
>> may end up enabling the clock as a result.
>>
>> clk_enable() callable from atomic contexts, and turns the clock on if
>> the hardware supports such an operation.
>>
>> So, if you have something like:
>>
>> Xtal--->PLL--->Routing/Masking--->Device
>>
>> clk = clk_get() returns the clock for the device.
>>
>> clk_prepare(clk) would walk up the clock tree, selecting the routing and
>> preparing each clock. Clocks prior to _and_ including the PLL would need
>> to be enabled.
>>
>> clk_enable(clk) would walk up the tree if the clock isn't already enabled,
>> calling clk_enable() on the parent clock. As we require prepared clocks
>> to already be enabled, this automatically stops at the PLL.
>>
>> To encourage correct usage, we just need to make sure that clk_prepare()
>> has a might_sleep() thing, and clk_enable() throws a fit if it's used
>> on a clk without prepare being used first. The second point is not easy
>> to do in a foolproof manner though, but doing _something_ is better than
>> nothing.
>
> I like this proposal, and I prefer the clk_prepare naming over
> clk_slow_enable - too many people would call clk_slow_enable instead
> of, and not as well as, clk_fast_enable.
>
> On Tegra, I currently use the ugly conditional mutex or spinlock
> method to deal with voltage scaling based on clock frequency.
Colin,
MSM is in a similar situation, so thought I should bring this up to you
attention -- do you have no use case for changing the rate in atomic
context? If you do, the clk_prepare/unprepare() approach won't work.
Do you have no such requirement?
-Saravana
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
next prev parent reply other threads:[~2011-01-22 1:35 UTC|newest]
Thread overview: 248+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-11 2:16 Locking in the clk API Jeremy Kerr
2011-01-11 2:16 ` Jeremy Kerr
2011-01-11 2:16 ` Jeremy Kerr
2011-01-11 3:15 ` Paul Mundt
2011-01-11 3:15 ` Paul Mundt
2011-01-11 3:15 ` Paul Mundt
2011-01-11 4:11 ` Jeremy Kerr
2011-01-11 4:11 ` Jeremy Kerr
2011-01-11 4:11 ` Jeremy Kerr
2011-01-11 4:54 ` Paul Mundt
2011-01-11 4:54 ` Paul Mundt
2011-01-11 4:54 ` Paul Mundt
2011-01-20 16:32 ` Ben Dooks
2011-01-20 16:32 ` Ben Dooks
2011-01-20 16:32 ` Ben Dooks
2011-01-20 18:57 ` Russell King - ARM Linux
2011-01-20 18:57 ` Russell King - ARM Linux
2011-01-20 18:57 ` Russell King - ARM Linux
2011-01-21 3:43 ` Saravana Kannan
2011-01-21 3:43 ` Saravana Kannan
2011-01-21 3:43 ` Saravana Kannan
2011-01-21 9:31 ` Russell King - ARM Linux
2011-01-21 9:31 ` Russell King - ARM Linux
2011-01-21 9:31 ` Russell King - ARM Linux
2011-01-11 9:03 ` Sascha Hauer
2011-01-11 9:03 ` Sascha Hauer
2011-01-11 9:03 ` Sascha Hauer
2011-01-11 9:28 ` Russell King - ARM Linux
2011-01-11 9:28 ` Russell King - ARM Linux
2011-01-11 9:28 ` Russell King - ARM Linux
2011-01-11 14:34 ` Pavel Machek
2011-01-11 14:34 ` Pavel Machek
2011-01-11 14:34 ` Pavel Machek
2011-01-20 16:29 ` Ben Dooks
2011-01-20 16:29 ` Ben Dooks
2011-01-20 16:29 ` Ben Dooks
2011-01-20 18:56 ` Russell King - ARM Linux
2011-01-20 18:56 ` Russell King - ARM Linux
2011-01-20 18:56 ` Russell King - ARM Linux
2011-01-20 21:30 ` Nicolas Pitre
2011-01-20 21:30 ` Nicolas Pitre
2011-01-20 21:30 ` Nicolas Pitre
2011-01-21 2:06 ` Dima Zavin
2011-01-21 2:06 ` Dima Zavin
2011-01-21 2:06 ` Dima Zavin
2011-01-21 4:12 ` Saravana Kannan
2011-01-21 4:12 ` Saravana Kannan
2011-01-21 4:12 ` Saravana Kannan
2011-01-21 9:32 ` Russell King - ARM Linux
2011-01-21 9:32 ` Russell King - ARM Linux
2011-01-21 9:32 ` Russell King - ARM Linux
2011-01-22 1:53 ` Saravana Kannan
2011-01-22 2:24 ` Colin Cross
2011-01-22 2:56 ` Saravana Kannan
2011-01-22 9:15 ` Russell King - ARM Linux
2011-01-24 19:31 ` Saravana Kannan
2011-01-21 21:03 ` Dima Zavin
2011-01-21 21:03 ` Dima Zavin
2011-01-21 21:03 ` Dima Zavin
2011-01-21 21:53 ` Nicolas Pitre
2011-01-21 21:53 ` Nicolas Pitre
2011-01-21 21:53 ` Nicolas Pitre
2011-01-21 22:02 ` Russell King - ARM Linux
2011-01-21 22:02 ` Russell King - ARM Linux
2011-01-21 22:02 ` Russell King - ARM Linux
2011-01-21 22:28 ` Colin Cross
2011-01-21 22:28 ` Colin Cross
2011-01-21 22:28 ` Colin Cross
2011-01-21 23:21 ` Benjamin Herrenschmidt
2011-01-21 23:21 ` Benjamin Herrenschmidt
2011-01-21 23:21 ` Benjamin Herrenschmidt
2011-01-21 23:50 ` Nicolas Pitre
2011-01-21 23:50 ` Nicolas Pitre
2011-01-21 23:50 ` Nicolas Pitre
2011-01-22 1:35 ` Saravana Kannan [this message]
2011-01-22 1:35 ` Saravana Kannan
2011-01-22 1:35 ` Saravana Kannan
2011-01-22 2:22 ` Colin Cross
2011-01-22 2:22 ` Colin Cross
2011-01-22 2:22 ` Colin Cross
2011-01-21 22:29 ` Nicolas Pitre
2011-01-21 22:29 ` Nicolas Pitre
2011-01-21 22:29 ` Nicolas Pitre
2011-01-21 23:28 ` Bryan Huntsman
2011-01-21 23:28 ` Bryan Huntsman
2011-01-21 23:28 ` Bryan Huntsman
2011-01-11 9:16 ` Russell King - ARM Linux
2011-01-11 9:16 ` Russell King - ARM Linux
2011-01-11 9:16 ` Russell King - ARM Linux
2011-01-11 9:44 ` Jeremy Kerr
2011-01-11 9:44 ` Jeremy Kerr
2011-01-11 9:44 ` Jeremy Kerr
2011-01-11 10:13 ` Paul Mundt
2011-01-11 10:13 ` Paul Mundt
2011-01-11 10:13 ` Paul Mundt
2011-01-11 10:30 ` Jeremy Kerr
2011-01-11 10:30 ` Jeremy Kerr
2011-01-11 10:30 ` Jeremy Kerr
2011-01-11 12:18 ` Paul Mundt
2011-01-11 12:18 ` Paul Mundt
2011-01-11 12:18 ` Paul Mundt
2011-01-11 13:52 `
2011-01-11 13:52 ` Uwe Kleine-König
2011-01-11 13:52 ` Uwe Kleine-König
2011-01-11 14:35 ` Jeremy Kerr
2011-01-11 14:35 ` Jeremy Kerr
2011-01-11 14:35 ` Jeremy Kerr
2011-01-12 3:25 ` Saravana Kannan
2011-01-12 3:25 ` Saravana Kannan
2011-01-12 3:25 ` Saravana Kannan
2011-01-12 7:40 `
2011-01-12 7:40 ` Uwe Kleine-König
2011-01-12 7:40 ` Uwe Kleine-König
2011-01-12 1:54 ` Saravana Kannan
2011-01-12 1:54 ` Saravana Kannan
2011-01-12 1:54 ` Saravana Kannan
2011-01-12 2:25 ` Paul Mundt
2011-01-12 2:25 ` Paul Mundt
2011-01-12 2:25 ` Paul Mundt
2011-01-20 16:57 ` Ben Dooks
2011-01-20 16:57 ` Ben Dooks
2011-01-20 16:57 ` Ben Dooks
2011-01-20 16:53 ` Ben Dooks
2011-01-20 16:53 ` Ben Dooks
2011-01-20 16:53 ` Ben Dooks
2011-01-20 16:40 ` Ben Dooks
2011-01-20 16:40 ` Ben Dooks
2011-01-20 16:40 ` Ben Dooks
2011-01-11 10:39 `
2011-01-11 10:39 ` Uwe Kleine-König
2011-01-11 10:39 ` Uwe Kleine-König
2011-01-11 10:47 ` Russell King - ARM Linux
2011-01-11 10:47 ` Russell King - ARM Linux
2011-01-11 10:47 ` Russell King - ARM Linux
2011-01-11 10:56 `
2011-01-11 10:56 ` Uwe Kleine-König
2011-01-11 10:56 ` Uwe Kleine-König
2011-01-11 11:15 ` Richard Zhao
2011-01-11 11:15 ` Richard Zhao
2011-01-11 11:15 ` Richard Zhao
2011-01-20 17:02 ` Ben Dooks
2011-01-20 17:02 ` Ben Dooks
2011-01-20 17:02 ` Ben Dooks
2011-01-20 19:08 ` Russell King - ARM Linux
2011-01-20 19:08 ` Russell King - ARM Linux
2011-01-20 19:08 ` Russell King - ARM Linux
2011-01-21 0:09 ` Jassi Brar
2011-01-21 0:09 ` Jassi Brar
2011-01-21 0:09 ` Jassi Brar
2011-01-21 4:47 ` Jassi Brar
2011-01-21 4:47 ` Jassi Brar
2011-01-21 4:47 ` Jassi Brar
2011-01-21 9:39 ` Russell King - ARM Linux
2011-01-21 9:39 ` Russell King - ARM Linux
2011-01-21 9:39 ` Russell King - ARM Linux
2011-01-21 10:11 ` Jassi Brar
2011-01-21 10:11 ` Jassi Brar
2011-01-21 10:11 ` Jassi Brar
2011-01-22 4:08 ` Richard Zhao
2011-01-22 4:08 ` Richard Zhao
2011-01-22 4:08 ` Richard Zhao
2011-01-22 5:30 ` Jassi Brar
2011-01-22 5:30 ` Jassi Brar
2011-01-22 5:30 ` Jassi Brar
2011-01-21 7:16 ` Saravana Kannan
2011-01-21 7:16 ` Saravana Kannan
2011-01-21 7:16 ` Saravana Kannan
2011-01-21 9:40 ` Russell King - ARM Linux
2011-01-21 9:40 ` Russell King - ARM Linux
2011-01-21 9:40 ` Russell King - ARM Linux
2011-01-22 1:47 ` Saravana Kannan
2011-01-27 4:34 ` Saravana Kannan
2011-01-27 4:34 ` Saravana Kannan
2011-01-27 4:34 ` Saravana Kannan
2011-01-27 8:54 ` Russell King - ARM Linux
2011-01-27 8:54 ` Russell King - ARM Linux
2011-01-27 8:54 ` Russell King - ARM Linux
2011-01-27 20:30 ` Saravana Kannan
2011-01-27 20:30 ` Saravana Kannan
2011-01-27 20:30 ` Saravana Kannan
2011-01-27 20:43 ` Russell King - ARM Linux
2011-01-27 20:43 ` Russell King - ARM Linux
2011-01-27 20:43 ` Russell King - ARM Linux
2011-01-27 21:07 ` Alan Cox
2011-01-27 21:07 ` Alan Cox
2011-01-27 21:07 ` Alan Cox
2011-01-27 21:11 ` Russell King - ARM Linux
2011-01-27 21:11 ` Russell King - ARM Linux
2011-01-27 21:11 ` Russell King - ARM Linux
2011-01-27 21:15 ` Russell King - ARM Linux
2011-01-27 21:15 ` Russell King - ARM Linux
2011-01-27 21:15 ` Russell King - ARM Linux
2011-01-28 3:29 ` Saravana Kannan
2011-01-28 3:29 ` Saravana Kannan
2011-01-28 3:29 ` Saravana Kannan
2011-01-28 3:27 ` Saravana Kannan
2011-01-28 3:27 ` Saravana Kannan
2011-01-28 3:27 ` Saravana Kannan
2011-01-11 12:11 ` Jassi Brar
2011-01-11 12:23 ` Jassi Brar
2011-01-11 12:11 ` Jassi Brar
2011-01-12 2:56 ` Saravana Kannan
2011-01-12 2:56 ` Saravana Kannan
2011-01-12 2:56 ` Saravana Kannan
2011-01-12 9:03 ` Russell King - ARM Linux
2011-01-12 9:03 ` Russell King - ARM Linux
2011-01-12 9:03 ` Russell King - ARM Linux
2011-01-15 14:02 ` Christer Weinigel
2011-01-15 14:02 ` Christer Weinigel
2011-01-15 14:02 ` Christer Weinigel
2011-01-15 14:53 ` Russell King - ARM Linux
2011-01-15 14:53 ` Russell King - ARM Linux
2011-01-15 14:53 ` Russell King - ARM Linux
2011-01-15 15:03 `
2011-01-15 15:03 ` Uwe Kleine-König
2011-01-15 15:03 ` Uwe Kleine-König
2011-01-15 15:15 ` Russell King - ARM Linux
2011-01-15 15:15 ` Russell King - ARM Linux
2011-01-15 15:15 ` Russell King - ARM Linux
2011-01-15 16:03 `
2011-01-15 16:03 ` Uwe Kleine-König
2011-01-15 16:03 ` Uwe Kleine-König
2011-01-15 16:21 ` Russell King - ARM Linux
2011-01-15 16:21 ` Russell King - ARM Linux
2011-01-15 16:21 ` Russell King - ARM Linux
2011-01-15 16:31 `
2011-01-15 16:31 ` Uwe Kleine-König
2011-01-15 16:31 ` Uwe Kleine-König
2011-01-16 6:59 ` Grant Likely
2011-01-16 6:59 ` Grant Likely
2011-01-16 6:59 ` Grant Likely
2011-01-15 17:07 ` Christer Weinigel
2011-01-15 17:07 ` Christer Weinigel
2011-01-15 17:07 ` Christer Weinigel
2011-01-15 17:20 ` Russell King - ARM Linux
2011-01-15 17:20 ` Russell King - ARM Linux
2011-01-15 17:20 ` Russell King - ARM Linux
2011-01-15 17:44 ` Christer Weinigel
2011-01-15 17:44 ` Christer Weinigel
2011-01-15 17:44 ` Christer Weinigel
2011-01-15 20:30 ` Russell King - ARM Linux
2011-01-15 20:30 ` Russell King - ARM Linux
2011-01-15 20:30 ` Russell King - ARM Linux
2011-01-17 1:19 ` Jeremy Kerr
2011-01-17 1:19 ` Jeremy Kerr
2011-01-17 1:19 ` Jeremy Kerr
2011-01-17 1:27 ` Jeremy Kerr
2011-01-17 1:27 ` Jeremy Kerr
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=4D3A346E.9070709@codeaurora.org \
--to=skannan@codeaurora.org \
--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 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.