All of lore.kernel.org
 help / color / mirror / Atom feed
To: linux-arm-kernel@lists.infradead.org
Subject: Re: Locking in the clk API, part 2: clk_prepare/clk_unprepare
Date: Tue, 01 Feb 2011 10:54:49 +0000	[thread overview]
Message-ID: <20110201105449.GY1147@pengutronix.de> (raw)
In-Reply-To: <201102011711.31258.jeremy.kerr@canonical.com>

Hello Jeremy,

On Tue, Feb 01, 2011 at 05:11:29PM +0800, Jeremy Kerr wrote:
> > 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.
> 
> I think that clk_prepare/clk_unprepare looks like the most promising solution, 
> so will try to get some preliminary patches done. Here's what I'm planning:
> 
> -----
> 
> The changes to the API are essentially:
> 
> 1) Document clk_enable/clk_disable as callable from atomic contexts, and
>    so clock implementations must not sleep within this function.
> 
> 2) For clock implementations that may sleep to turn on a clock, we add a
>    new pair of functions to the clock API: clk_prepare and clk_unprepare.
> 
>    These will provide hooks for the clock implmentation to do any sleepable
>    work (eg, wait for PLLs to settle) in preparation for a later clk_enable.
> 
>    For the most common clock implemntation cases (where clocks can be enabled 
>    atomically), these functions will be a no-op, and all of the enable/disable
>    work can be done in clk_enable/clk_disable.
> 
>    For implementations where clocks require blocking on enable/disable, most
>    of the work will be done in clk_prepare/clk_unprepare. The clk_enable
>    and clk_disable functions may be no-ops.
> 
> For drivers, this means that clk_prepare must be called (and have returned) 
> before calling clk_enable.
> 
> = Enable/Prepare counts =
> 
> I intend to do the enable and prepare "counting" in the core clock API, 
> meaning that that the clk_ops callbacks will only invoked on the first 
> prepare/enable and the last unprepare/disable.
> 
> = Concurrency =
> 
> Splitting the prepare and enable stages introduces the concurrency 
> requirements:
> 
> 1) clk_enable must not return before the clock is outputting a valid clock 
>    signal.
> 
> 2) clk_prepare must not return before the clock is fully prepared (ie, it is 
>    safe to call clk_enable).
> 
> It is not possible for clk_enable to wait for the clock to be prepared, 
> because that would require synchronisation with clk_prepare, which may then 
> require blocking. Therefore:
> 
> 3) The clock consumer *must* respect the proper ordering of clk_prepare and 
>    clk_enable. For example, drivers that call clk_enable during an interrupt 
>    must ensure that the interrupt handler will not be invoked until 
>    clk_prepare has returned.
> 
> = Other considerations =
> 
> The time that a clock spends "prepared" is a superset of the the time that a 
> clock spends "enabled". Therefore, clocks that are switched on during 
> clk_prepare (ie, non-atomic clocks) will be running for a larger amount of 
> time. In some cases, this can be mitigated by moving some of the final 
> (atomic) switching functionality to the clk_enable function.
> 
> = Implementation =
> 
> Basically:
> 
> struct clk {
> 	const struct clk_ops *ops
> 	int                  enable_count;
> 	spinlock_t           enable_lock;
> 	int                  prepare_count;
> 	struct mutex         prepare_lock;
> };
> 
> int clk_enable(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	spin_lock(&clk->enable_lock);
> 	if (!clk->enable_count)
> 		ret = clk->ops->enable(clk);
> 
> 	if (!ret)
> 		clk->enable_count++;
> 	spin_unlock(&clk->enable_lock);
> 
> 	return ret;
> }
> 
> int clk_prepare(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	mutex_lock(&clk->prepare_lock);
> 	if (!clk->prepare_count)
> 		ret = clk->ops->prepare(clk);
> 
> 	if (!ret)
> 		clk->prepare_count++;
> 	mutex_unlock(&clk->prepare_lock);
> 
> 	return ret;
> }
> 
> -----
> 
> Comments welcome, code coming soon.
Do you plan to handle the case that clk_enable is called while prepare
isn't completed (considering the special case "not called at all")?
Maybe BUG_ON(clk->ops->prepare && !clk->prepare_count)?

Alternatively don't force the sleep in clk_prepare (e.g. by protecting
prepare_count by a spinlock (probably enable_lock)) and call clk_prepare
before calling clk->ops->enable?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

WARNING: multiple messages have this Message-ID (diff)
From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: Locking in the clk API, part 2: clk_prepare/clk_unprepare
Date: Tue, 1 Feb 2011 11:54:49 +0100	[thread overview]
Message-ID: <20110201105449.GY1147@pengutronix.de> (raw)
In-Reply-To: <201102011711.31258.jeremy.kerr@canonical.com>

Hello Jeremy,

On Tue, Feb 01, 2011 at 05:11:29PM +0800, Jeremy Kerr wrote:
> > 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.
> 
> I think that clk_prepare/clk_unprepare looks like the most promising solution, 
> so will try to get some preliminary patches done. Here's what I'm planning:
> 
> -----
> 
> The changes to the API are essentially:
> 
> 1) Document clk_enable/clk_disable as callable from atomic contexts, and
>    so clock implementations must not sleep within this function.
> 
> 2) For clock implementations that may sleep to turn on a clock, we add a
>    new pair of functions to the clock API: clk_prepare and clk_unprepare.
> 
>    These will provide hooks for the clock implmentation to do any sleepable
>    work (eg, wait for PLLs to settle) in preparation for a later clk_enable.
> 
>    For the most common clock implemntation cases (where clocks can be enabled 
>    atomically), these functions will be a no-op, and all of the enable/disable
>    work can be done in clk_enable/clk_disable.
> 
>    For implementations where clocks require blocking on enable/disable, most
>    of the work will be done in clk_prepare/clk_unprepare. The clk_enable
>    and clk_disable functions may be no-ops.
> 
> For drivers, this means that clk_prepare must be called (and have returned) 
> before calling clk_enable.
> 
> == Enable/Prepare counts ==
> 
> I intend to do the enable and prepare "counting" in the core clock API, 
> meaning that that the clk_ops callbacks will only invoked on the first 
> prepare/enable and the last unprepare/disable.
> 
> == Concurrency ==
> 
> Splitting the prepare and enable stages introduces the concurrency 
> requirements:
> 
> 1) clk_enable must not return before the clock is outputting a valid clock 
>    signal.
> 
> 2) clk_prepare must not return before the clock is fully prepared (ie, it is 
>    safe to call clk_enable).
> 
> It is not possible for clk_enable to wait for the clock to be prepared, 
> because that would require synchronisation with clk_prepare, which may then 
> require blocking. Therefore:
> 
> 3) The clock consumer *must* respect the proper ordering of clk_prepare and 
>    clk_enable. For example, drivers that call clk_enable during an interrupt 
>    must ensure that the interrupt handler will not be invoked until 
>    clk_prepare has returned.
> 
> == Other considerations ==
> 
> The time that a clock spends "prepared" is a superset of the the time that a 
> clock spends "enabled". Therefore, clocks that are switched on during 
> clk_prepare (ie, non-atomic clocks) will be running for a larger amount of 
> time. In some cases, this can be mitigated by moving some of the final 
> (atomic) switching functionality to the clk_enable function.
> 
> == Implementation ==
> 
> Basically:
> 
> struct clk {
> 	const struct clk_ops *ops
> 	int                  enable_count;
> 	spinlock_t           enable_lock;
> 	int                  prepare_count;
> 	struct mutex         prepare_lock;
> };
> 
> int clk_enable(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	spin_lock(&clk->enable_lock);
> 	if (!clk->enable_count)
> 		ret = clk->ops->enable(clk);
> 
> 	if (!ret)
> 		clk->enable_count++;
> 	spin_unlock(&clk->enable_lock);
> 
> 	return ret;
> }
> 
> int clk_prepare(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	mutex_lock(&clk->prepare_lock);
> 	if (!clk->prepare_count)
> 		ret = clk->ops->prepare(clk);
> 
> 	if (!ret)
> 		clk->prepare_count++;
> 	mutex_unlock(&clk->prepare_lock);
> 
> 	return ret;
> }
> 
> -----
> 
> Comments welcome, code coming soon.
Do you plan to handle the case that clk_enable is called while prepare
isn't completed (considering the special case "not called at all")?
Maybe BUG_ON(clk->ops->prepare && !clk->prepare_count)?

Alternatively don't force the sleep in clk_prepare (e.g. by protecting
prepare_count by a spinlock (probably enable_lock)) and call clk_prepare
before calling clk->ops->enable?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

WARNING: multiple messages have this Message-ID (diff)
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Jeremy Kerr <jeremy.kerr@canonical.com>
Cc: Russell King <linux@arm.linux.org.uk>,
	Dima Zavin <dmitriyz@google.com>,
	Saravana Kannan <skannan@codeaurora.org>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	linux-sh@vger.kernel.org,
	Ben Herrenschmidt <benh@kernel.crashing.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-kernel@vger.kernel.org, Paul Mundt <lethal@linux-sh.org>,
	Ben Dooks <ben-linux@fluff.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	Nicolas Pitre <nicolas.pitre@linaro.org>
Subject: Re: Locking in the clk API, part 2: clk_prepare/clk_unprepare
Date: Tue, 1 Feb 2011 11:54:49 +0100	[thread overview]
Message-ID: <20110201105449.GY1147@pengutronix.de> (raw)
In-Reply-To: <201102011711.31258.jeremy.kerr@canonical.com>

Hello Jeremy,

On Tue, Feb 01, 2011 at 05:11:29PM +0800, Jeremy Kerr wrote:
> > 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.
> 
> I think that clk_prepare/clk_unprepare looks like the most promising solution, 
> so will try to get some preliminary patches done. Here's what I'm planning:
> 
> -----
> 
> The changes to the API are essentially:
> 
> 1) Document clk_enable/clk_disable as callable from atomic contexts, and
>    so clock implementations must not sleep within this function.
> 
> 2) For clock implementations that may sleep to turn on a clock, we add a
>    new pair of functions to the clock API: clk_prepare and clk_unprepare.
> 
>    These will provide hooks for the clock implmentation to do any sleepable
>    work (eg, wait for PLLs to settle) in preparation for a later clk_enable.
> 
>    For the most common clock implemntation cases (where clocks can be enabled 
>    atomically), these functions will be a no-op, and all of the enable/disable
>    work can be done in clk_enable/clk_disable.
> 
>    For implementations where clocks require blocking on enable/disable, most
>    of the work will be done in clk_prepare/clk_unprepare. The clk_enable
>    and clk_disable functions may be no-ops.
> 
> For drivers, this means that clk_prepare must be called (and have returned) 
> before calling clk_enable.
> 
> == Enable/Prepare counts ==
> 
> I intend to do the enable and prepare "counting" in the core clock API, 
> meaning that that the clk_ops callbacks will only invoked on the first 
> prepare/enable and the last unprepare/disable.
> 
> == Concurrency ==
> 
> Splitting the prepare and enable stages introduces the concurrency 
> requirements:
> 
> 1) clk_enable must not return before the clock is outputting a valid clock 
>    signal.
> 
> 2) clk_prepare must not return before the clock is fully prepared (ie, it is 
>    safe to call clk_enable).
> 
> It is not possible for clk_enable to wait for the clock to be prepared, 
> because that would require synchronisation with clk_prepare, which may then 
> require blocking. Therefore:
> 
> 3) The clock consumer *must* respect the proper ordering of clk_prepare and 
>    clk_enable. For example, drivers that call clk_enable during an interrupt 
>    must ensure that the interrupt handler will not be invoked until 
>    clk_prepare has returned.
> 
> == Other considerations ==
> 
> The time that a clock spends "prepared" is a superset of the the time that a 
> clock spends "enabled". Therefore, clocks that are switched on during 
> clk_prepare (ie, non-atomic clocks) will be running for a larger amount of 
> time. In some cases, this can be mitigated by moving some of the final 
> (atomic) switching functionality to the clk_enable function.
> 
> == Implementation ==
> 
> Basically:
> 
> struct clk {
> 	const struct clk_ops *ops
> 	int                  enable_count;
> 	spinlock_t           enable_lock;
> 	int                  prepare_count;
> 	struct mutex         prepare_lock;
> };
> 
> int clk_enable(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	spin_lock(&clk->enable_lock);
> 	if (!clk->enable_count)
> 		ret = clk->ops->enable(clk);
> 
> 	if (!ret)
> 		clk->enable_count++;
> 	spin_unlock(&clk->enable_lock);
> 
> 	return ret;
> }
> 
> int clk_prepare(struct clk *clk)
> {
> 	int ret = 0;
> 
> 	mutex_lock(&clk->prepare_lock);
> 	if (!clk->prepare_count)
> 		ret = clk->ops->prepare(clk);
> 
> 	if (!ret)
> 		clk->prepare_count++;
> 	mutex_unlock(&clk->prepare_lock);
> 
> 	return ret;
> }
> 
> -----
> 
> Comments welcome, code coming soon.
Do you plan to handle the case that clk_enable is called while prepare
isn't completed (considering the special case "not called at all")?
Maybe BUG_ON(clk->ops->prepare && !clk->prepare_count)?

Alternatively don't force the sleep in clk_prepare (e.g. by protecting
prepare_count by a spinlock (probably enable_lock)) and call clk_prepare
before calling clk->ops->enable?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

  reply	other threads:[~2011-02-01 10:54 UTC|newest]

Thread overview: 381+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-01  9:11 Locking in the clk API, part 2: clk_prepare/clk_unprepare Jeremy Kerr
2011-02-01  9:11 ` Jeremy Kerr
2011-02-01  9:11 ` Jeremy Kerr
2011-02-01 10:54 `  [this message]
2011-02-01 10:54   ` Uwe Kleine-König
2011-02-01 10:54   ` Uwe Kleine-König
2011-02-01 13:05   ` Jassi Brar
2011-02-01 13:05     ` Jassi Brar
2011-02-01 13:05     ` Jassi Brar
2011-02-01 14:00     ` 
2011-02-01 14:00       ` Uwe Kleine-König
2011-02-01 14:00       ` Uwe Kleine-König
2011-02-01 15:14       ` Russell King - ARM Linux
2011-02-01 15:14         ` Russell King - ARM Linux
2011-02-01 15:14         ` Russell King - ARM Linux
2011-02-01 15:22         ` 
2011-02-01 15:22           ` Uwe Kleine-König
2011-02-01 15:22           ` Uwe Kleine-König
2011-02-01 15:28           ` Russell King - ARM Linux
2011-02-01 15:28             ` Russell King - ARM Linux
2011-02-01 15:28             ` Russell King - ARM Linux
2011-02-01 20:57             ` Saravana Kannan
2011-02-01 20:57               ` Saravana Kannan
2011-02-01 20:57               ` Saravana Kannan
2011-02-02  2:31             ` Jassi Brar
2011-02-02  2:31               ` Jassi Brar
2011-02-02  2:31               ` Jassi Brar
2011-02-01 13:15   ` Russell King - ARM Linux
2011-02-01 13:15     ` Russell King - ARM Linux
2011-02-01 13:15     ` Russell King - ARM Linux
2011-02-01 14:18     ` 
2011-02-01 14:18       ` Uwe Kleine-König
2011-02-01 14:18       ` Uwe Kleine-König
2011-02-01 14:39       ` Russell King - ARM Linux
2011-02-01 14:39         ` Russell King - ARM Linux
2011-02-01 14:39         ` Russell King - ARM Linux
2011-02-01 15:18         ` 
2011-02-01 15:18           ` Uwe Kleine-König
2011-02-01 15:18           ` Uwe Kleine-König
2011-02-01 15:24           ` Russell King - ARM Linux
2011-02-01 15:24             ` Russell King - ARM Linux
2011-02-01 15:24             ` Russell King - ARM Linux
2011-02-01 15:53             ` 
2011-02-01 15:53               ` Uwe Kleine-König
2011-02-01 15:53               ` Uwe Kleine-König
2011-02-01 17:06               ` Russell King - ARM Linux
2011-02-01 17:06                 ` Russell King - ARM Linux
2011-02-01 17:06                 ` Russell King - ARM Linux
2011-02-01 19:32                 ` 
2011-02-01 19:32                   ` Uwe Kleine-König
2011-02-01 19:32                   ` Uwe Kleine-König
2011-02-01 19:56                   ` Russell King - ARM Linux
2011-02-01 19:56                     ` Russell King - ARM Linux
2011-02-01 19:56                     ` Russell King - ARM Linux
2011-02-01 20:21                     ` Saravana Kannan
2011-02-01 20:21                       ` Saravana Kannan
2011-02-01 20:21                       ` Saravana Kannan
2011-02-01 20:43                       ` 
2011-02-01 20:43                         ` Uwe Kleine-König
2011-02-01 20:43                         ` Uwe Kleine-König
2011-02-04  9:33                         ` Richard Zhao
2011-02-04  9:33                           ` Richard Zhao
2011-02-04  9:33                           ` Richard Zhao
2011-02-01 20:06                   ` Nicolas Pitre
2011-02-01 20:06                     ` Nicolas Pitre
2011-02-01 20:06                     ` Nicolas Pitre
2011-02-01 20:33             ` Saravana Kannan
2011-02-01 20:33               ` Saravana Kannan
2011-02-01 20:33               ` Saravana Kannan
2011-02-01 20:36               ` Russell King - ARM Linux
2011-02-01 20:36                 ` Russell King - ARM Linux
2011-02-01 20:36                 ` Russell King - ARM Linux
2011-02-01 20:59             ` Stephen Boyd
2011-02-01 20:59               ` Stephen Boyd
2011-02-01 20:59               ` Stephen Boyd
2011-02-01 21:24               ` Russell King - ARM Linux
2011-02-01 21:24                 ` Russell King - ARM Linux
2011-02-01 21:24                 ` Russell King - ARM Linux
2011-02-04  9:54                 ` Richard Zhao
2011-02-04  9:54                   ` Richard Zhao
2011-02-04  9:54                   ` Richard Zhao
2011-02-04 10:21                   ` 
2011-02-04 10:21                     ` Uwe Kleine-König
2011-02-04 10:21                     ` Uwe Kleine-König
2011-02-04 10:57                     ` Russell King - ARM Linux
2011-02-04 10:57                       ` Russell King - ARM Linux
2011-02-04 10:57                       ` Russell King - ARM Linux
2011-02-04 10:48                   ` Russell King - ARM Linux
2011-02-04 10:48                     ` Russell King - ARM Linux
2011-02-04 10:48                     ` Russell King - ARM Linux
2011-02-04 11:04                     ` Jassi Brar
2011-02-04 11:04                       ` Jassi Brar
2011-02-04 11:04                       ` Jassi Brar
2011-02-04 11:18                       ` Russell King - ARM Linux
2011-02-04 11:18                         ` Russell King - ARM Linux
2011-02-04 11:18                         ` Russell King - ARM Linux
2011-02-04 11:51                         ` Jassi Brar
2011-02-04 11:51                           ` Jassi Brar
2011-02-04 11:51                           ` Jassi Brar
2011-02-04 12:05                           ` Russell King - ARM Linux
2011-02-04 12:05                             ` Russell King - ARM Linux
2011-02-04 12:05                             ` Russell King - ARM Linux
2011-02-01 14:40       ` Jeremy Kerr
2011-02-01 14:40         ` Jeremy Kerr
2011-02-01 14:40         ` Jeremy Kerr
2011-02-04 12:45 ` Richard Zhao
2011-02-04 12:45   ` Richard Zhao
2011-02-04 12:45   ` Richard Zhao
2011-02-04 13:20   ` Russell King - ARM Linux
2011-02-04 13:20     ` Russell King - ARM Linux
2011-02-04 13:20     ` Russell King - ARM Linux
2011-02-07  6:07 ` [RFC,PATCH 1/3] Add a common struct clk Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-07  7:05   ` 
2011-02-07  7:05     ` Uwe Kleine-König
2011-02-07  7:05     ` Uwe Kleine-König
2011-02-07  7:09   ` 
2011-02-07  8:08   ` 
2011-02-07  8:08     ` Uwe Kleine-König
2011-02-07  8:08     ` Uwe Kleine-König
2011-02-07  8:21   ` Dima Zavin
2011-02-07  8:22     ` Jeremy Kerr
2011-02-07  8:22       ` Jeremy Kerr
2011-02-07  8:22       ` Jeremy Kerr
2011-02-07 19:59   ` Colin Cross
2011-02-07 19:59     ` Colin Cross
2011-02-07 19:59     ` Colin Cross
2011-02-08  1:40     ` Jeremy Kerr
2011-02-08  1:40       ` Jeremy Kerr
2011-02-08  1:40       ` Jeremy Kerr
2011-02-07 20:20   ` Ryan Mallon
2011-02-07 20:20     ` Ryan Mallon
2011-02-07 20:20     ` Ryan Mallon
2011-02-08  2:54     ` Jeremy Kerr
2011-02-08  2:54       ` Jeremy Kerr
2011-02-08  2:54       ` Jeremy Kerr
2011-02-08  3:30       ` Ryan Mallon
2011-02-08  3:30         ` Ryan Mallon
2011-02-08  3:30         ` Ryan Mallon
2011-02-08  7:28         ` Jeremy Kerr
2011-02-08  7:28           ` Jeremy Kerr
2011-02-08  7:28           ` Jeremy Kerr
2011-02-09  6:41   ` Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  9:00     ` 
2011-02-09  9:00       ` Uwe Kleine-König
2011-02-09  9:00       ` Uwe Kleine-König
2011-02-09 20:21     ` Ryan Mallon
2011-02-09 20:21       ` Ryan Mallon
2011-02-09 20:21       ` Ryan Mallon
2011-02-09 20:39       ` 
2011-02-09 20:39         ` Uwe Kleine-König
2011-02-09 20:39         ` Uwe Kleine-König
2011-02-09 20:42         ` Ryan Mallon
2011-02-09 20:42           ` Ryan Mallon
2011-02-09 20:42           ` Ryan Mallon
2011-02-10 10:03       ` Richard Zhao
2011-02-10 10:03         ` Richard Zhao
2011-02-10 10:03         ` Richard Zhao
2011-02-10 10:10         ` Ryan Mallon
2011-02-10 10:10           ` Ryan Mallon
2011-02-10 10:10           ` Ryan Mallon
2011-02-10 12:45           ` Richard Zhao
2011-02-10 12:45             ` Richard Zhao
2011-02-10 12:45             ` Richard Zhao
2011-02-10 10:46         ` 
2011-02-10 10:46           ` Uwe Kleine-König
2011-02-10 10:46           ` Uwe Kleine-König
2011-02-10 13:08           ` Richard Zhao
2011-02-10 13:08             ` Richard Zhao
2011-02-10 13:08             ` Richard Zhao
2011-02-10 13:13             ` Russell King - ARM Linux
2011-02-10 13:13               ` Russell King - ARM Linux
2011-02-10 13:13               ` Russell King - ARM Linux
2011-02-15  1:36       ` Jeremy Kerr
2011-02-15  1:36         ` Jeremy Kerr
2011-02-15  1:36         ` Jeremy Kerr
2011-02-15  1:43         ` Ryan Mallon
2011-02-15  1:43           ` Ryan Mallon
2011-02-15  1:43           ` Ryan Mallon
2011-02-10  5:16     ` Saravana Kannan
2011-02-10  5:16       ` Saravana Kannan
2011-02-10  5:16       ` Saravana Kannan
2011-02-15  2:41       ` Jeremy Kerr
2011-02-15  2:41         ` Jeremy Kerr
2011-02-15  2:41         ` Jeremy Kerr
2011-02-15  5:33         ` Saravana Kannan
2011-02-15  5:33           ` Saravana Kannan
2011-02-15  5:33           ` Saravana Kannan
2011-02-15  7:26           ` Jeremy Kerr
2011-02-15  7:26             ` Jeremy Kerr
2011-02-15  7:26             ` Jeremy Kerr
2011-02-15  8:33             ` Saravana Kannan
2011-02-15  8:33               ` Saravana Kannan
2011-02-15  8:33               ` Saravana Kannan
2011-02-15  8:37             ` Russell King - ARM Linux
2011-02-15  8:37               ` Russell King - ARM Linux
2011-02-15  8:37               ` Russell King - ARM Linux
2011-02-15  9:33               ` Jeremy Kerr
2011-02-15  9:33                 ` Jeremy Kerr
2011-02-15  9:33                 ` Jeremy Kerr
2011-02-15 14:13                 ` Richard Zhao
2011-02-15 14:13                   ` Richard Zhao
2011-02-15 14:13                   ` Richard Zhao
2011-02-20 13:07                 ` Russell King - ARM Linux
2011-02-20 13:07                   ` Russell King - ARM Linux
2011-02-20 13:07                   ` Russell King - ARM Linux
2011-02-16  4:53           ` Saravana Kannan
2011-02-16  4:53             ` Saravana Kannan
2011-02-16  4:53             ` Saravana Kannan
2011-02-20 13:13           ` Russell King - ARM Linux
2011-02-20 13:13             ` Russell King - ARM Linux
2011-02-20 13:13             ` Russell King - ARM Linux
2011-02-07  6:07 ` [RFC, Jeremy Kerr
2011-02-07  6:07   ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-07  6:29   ` Jassi Brar
2011-02-07  6:29     ` Jassi Brar
2011-02-07  6:29     ` Jassi Brar
2011-02-07  7:00     ` Jeremy Kerr
2011-02-07  7:00       ` Jeremy Kerr
2011-02-07  7:00       ` Jeremy Kerr
2011-02-07  8:05   ` [RFC, PATCH 3/3] clk: add warnings for incorrect 
2011-02-07  8:05     ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Uwe Kleine-König
2011-02-07  8:05     ` Uwe Kleine-König
2011-02-07  8:08     ` Jeremy Kerr
2011-02-07  8:08       ` Jeremy Kerr
2011-02-07  8:08       ` Jeremy Kerr
2011-02-07 14:24       ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare Nicolas Pitre
2011-02-07 14:24         ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Nicolas Pitre
2011-02-07 14:24         ` Nicolas Pitre
2011-02-10  4:26         ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare Saravana Kannan
2011-02-10  4:26           ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Saravana Kannan
2011-02-10  4:26           ` Saravana Kannan
2011-02-07  6:07 ` [RFC,PATCH 0/3] Common struct clk implementation, v11 Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-09  6:41   ` [RFC,PATCH 0/3] Common struct clk implementation, v12 Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  6:41     ` [RFC, Jeremy Kerr
2011-02-09  6:41       ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Jeremy Kerr
2011-02-09  6:41       ` Jeremy Kerr
2011-02-10  9:37       ` [RFC, PATCH 3/3] clk: add warnings for incorrect Richard Zhao
2011-02-10  9:37         ` [RFC, PATCH 3/3] clk: add warnings for incorrect enable/prepare semantics Richard Zhao
2011-02-10  9:37         ` Richard Zhao
2011-02-15  2:00         ` Jeremy Kerr
2011-02-15  2:00           ` Jeremy Kerr
2011-02-15  2:00           ` Jeremy Kerr
2011-02-07  6:07 ` [RFC,PATCH 2/3] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-07  6:07   ` Jeremy Kerr
2011-02-09  6:41   ` Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  6:41     ` Jeremy Kerr
2011-02-09  6:58     ` Fabio Giovagnini
2011-02-09  6:58       ` Fabio Giovagnini
2011-02-09  6:58       ` Fabio Giovagnini
2011-02-10 23:23     ` Ryan Mallon
2011-02-10 23:23       ` Ryan Mallon
2011-02-10 23:23       ` Ryan Mallon
2011-02-15  1:41       ` Jeremy Kerr
2011-02-15  1:41         ` Jeremy Kerr
2011-02-15  1:41         ` Jeremy Kerr
2011-02-15  4:51         ` Saravana Kannan
2011-02-15  4:51           ` Saravana Kannan
2011-02-15  4:51           ` Saravana Kannan
2011-02-15  6:18           ` Jeremy Kerr
2011-02-15  6:18             ` Jeremy Kerr
2011-02-15  6:18             ` Jeremy Kerr
2011-02-15  6:31             ` Saravana Kannan
2011-02-15  6:31               ` Saravana Kannan
2011-02-15  6:31               ` Saravana Kannan
2011-02-21  2:50 ` [PATCH 0/2] Common struct clk implementation, v13 Jeremy Kerr
2011-02-21  2:50   ` Jeremy Kerr
2011-02-21  2:50   ` Jeremy Kerr
2011-02-21  2:50   ` [PATCH 1/2] Add a common struct clk Jeremy Kerr
2011-02-21  2:50     ` Jeremy Kerr
2011-02-21  2:50     ` Jeremy Kerr
2011-02-22 20:17     ` 
2011-02-22 20:17       ` Uwe Kleine-König
2011-02-22 20:17       ` Uwe Kleine-König
2011-02-23  2:49       ` Jeremy Kerr
2011-02-23  2:49         ` Jeremy Kerr
2011-02-23  2:49         ` Jeremy Kerr
2011-03-03  6:40     ` Jeremy Kerr
2011-03-03  6:40       ` Jeremy Kerr
2011-03-03  6:40       ` Jeremy Kerr
2011-04-14 12:49       ` Tony Lindgren
2011-04-14 12:49         ` Tony Lindgren
2011-04-14 12:49         ` Tony Lindgren
2011-02-21  2:50   ` [PATCH 2/2] clk: Generic support for fixed-rate clocks Jeremy Kerr
2011-02-21  2:50     ` Jeremy Kerr
2011-02-21  2:50     ` Jeremy Kerr
2011-02-21 19:51     ` Ryan Mallon
2011-02-21 19:51       ` Ryan Mallon
2011-02-21 19:51       ` Ryan Mallon
2011-02-21 23:29       ` Jeremy Kerr
2011-02-21 23:29         ` Jeremy Kerr
2011-02-21 23:29         ` Jeremy Kerr
2011-03-03  6:40       ` Jeremy Kerr
2011-03-03  6:40         ` Jeremy Kerr
2011-03-03  6:40         ` Jeremy Kerr
2011-02-22 23:33   ` [PATCH] wip: convert imx27 to common struct clk 
2011-02-22 23:33     ` Uwe Kleine-König
2011-02-22 23:33     ` Uwe Kleine-König
2011-02-23  4:17     ` Saravana Kannan
2011-02-23  4:17       ` Saravana Kannan
2011-02-23  4:17       ` Saravana Kannan
2011-02-23  8:15       ` 
2011-02-23  8:15         ` Uwe Kleine-König
2011-02-23  8:15         ` Uwe Kleine-König
2011-03-03  6:40   ` [PATCH 0/2] Common struct clk implementation, v14 Jeremy Kerr
2011-03-03  6:40     ` Jeremy Kerr
2011-03-03  6:40     ` Jeremy Kerr
2011-03-14 10:16     ` 
2011-03-14 10:16       ` Uwe Kleine-König
2011-03-14 10:16       ` Uwe Kleine-König
2011-03-15  4:31     ` Jeremy Kerr
2011-03-15  4:31       ` Jeremy Kerr
2011-03-15  4:31       ` Jeremy Kerr
2011-03-21  2:33       ` Jeremy Kerr
2011-03-21  2:33         ` Jeremy Kerr
2011-03-21  2:33         ` Jeremy Kerr
2011-04-14  4:20     ` Jeremy Kerr
2011-04-14  4:20       ` Jeremy Kerr
2011-04-14  4:20       ` Jeremy Kerr
2011-04-14 10:00       ` Russell King - ARM Linux
2011-04-14 10:00         ` Russell King - ARM Linux
2011-04-14 10:00         ` Russell King - ARM Linux
2011-04-14 10:23         ` Jeremy Kerr
2011-04-14 10:23           ` Jeremy Kerr
2011-04-14 10:23           ` Jeremy Kerr
2011-04-14 10:26           ` Russell King - ARM Linux
2011-04-14 10:26             ` Russell King - ARM Linux
2011-04-14 10:26             ` Russell King - ARM Linux
2011-04-14 10:25         ` Benjamin Herrenschmidt
2011-04-14 10:25           ` Benjamin Herrenschmidt
2011-04-14 10:25           ` Benjamin Herrenschmidt
2011-04-14 10:32           ` Russell King - ARM Linux
2011-04-14 10:32             ` Russell King - ARM Linux
2011-04-14 10:32             ` Russell King - ARM Linux
2011-04-14 11:59             ` Nicolas Pitre
2011-04-14 11:59               ` Nicolas Pitre
2011-04-14 11:59               ` Nicolas Pitre
2011-04-14 12:09               ` Russell King - ARM Linux
2011-04-14 12:09                 ` Russell King - ARM Linux
2011-04-14 12:09                 ` Russell King - ARM Linux
2011-04-14 13:39                 ` Nicolas Pitre
2011-04-14 13:39                   ` Nicolas Pitre
2011-04-14 13:39                   ` Nicolas Pitre
2011-04-14 14:00                   ` Mark Brown
2011-04-14 14:00                     ` Mark Brown
2011-04-14 14:00                     ` Mark Brown
2011-04-14 15:38                   ` Russell King - ARM Linux
2011-04-14 15:38                     ` Russell King - ARM Linux
2011-04-14 15:38                     ` Russell King - ARM Linux
2011-04-14 16:06                     ` Nicolas Pitre
2011-04-14 16:06                       ` Nicolas Pitre
2011-04-14 16:06                       ` Nicolas Pitre
2011-04-14 17:20                     ` 
2011-04-14 17:20                       ` Uwe Kleine-König
2011-04-14 17:20                       ` Uwe Kleine-König
2011-04-18 10:54                     ` Paul Mundt
2011-04-18 10:54                       ` Paul Mundt
2011-04-18 10:54                       ` Paul Mundt
2011-04-20 14:28                       ` 
2011-04-20 14:28                         ` Uwe Kleine-König
2011-04-20 14:28                         ` Uwe Kleine-König
2011-04-20 16:41                         ` Thomas Gleixner
2011-04-20 16:41                           ` Thomas Gleixner
2011-04-20 16:41                           ` Thomas Gleixner
2011-04-20 21:30                           ` Paul McKenney
2011-04-14 19:29                 ` Saravana Kannan
2011-04-14 19:29                   ` Saravana Kannan
2011-04-14 19:29                   ` Saravana Kannan
2011-04-14 16:08             ` 
2011-04-14 16:08               ` Uwe Kleine-König
2011-04-14 16:08               ` Uwe Kleine-König

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=20110201105449.GY1147@pengutronix.de \
    --to=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.