All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Turquette, Mike" <mturquette@ti.com>
To: Shawn Guo <shawn.guo@linaro.org>
Cc: Paul Walmsley <paul@pwsan.com>,
	Russell King <linux@arm.linux.org.uk>,
	Linus Walleij <linus.walleij@stericsson.com>,
	patches@linaro.org, Magnus Damm <magnus.damm@gmail.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Mark Brown <broonie@opensource.wolfsonmicro.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	linux-kernel@vger.kernel.org,
	Saravana Kannan <skannan@codeaurora.org>,
	linaro-dev@lists.linaro.org,
	Jeremy Kerr <jeremy.kerr@canonical.com>,
	Arnd Bergman <arnd.bergmann@linaro.org>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v7 2/3] clk: introduce the common clock framework
Date: Tue, 20 Mar 2012 16:46:38 -0700	[thread overview]
Message-ID: <CAJOA=zOZ=XNwhEwUSD34AERi+f8fnMqG9EmS5hxCx+2u8qnkgw@mail.gmail.com> (raw)
In-Reply-To: <20120320140220.GE32469@S2101-09.ap.freescale.net>

On Tue, Mar 20, 2012 at 7:02 AM, Shawn Guo <shawn.guo@linaro.org> wrote:
> On Thu, Mar 15, 2012 at 11:11:19PM -0700, Mike Turquette wrote:
> ...
>> +struct clk_ops {
>> +     int             (*prepare)(struct clk_hw *hw);
>> +     void            (*unprepare)(struct clk_hw *hw);
>> +     int             (*enable)(struct clk_hw *hw);
>> +     void            (*disable)(struct clk_hw *hw);
>> +     int             (*is_enabled)(struct clk_hw *hw);
>> +     unsigned long   (*recalc_rate)(struct clk_hw *hw,
>> +                                     unsigned long parent_rate);
>
> I believe I have heard people love the interface with parent_rate
> passed in.  I love that too.  But I would like to ask the same thing
> on .round_rate and .set_rate as well for the same reason why we have
> it for .recalc_rate.

This is something that was discussed on the list but not taken in due
to rapid flux in code.  I always liked the idea however.

>
>> +     long            (*round_rate)(struct clk_hw *hw, unsigned long,
>> +                                     unsigned long *);
>
> Yes, we already have parent_rate passed in .round_rate with an pointer.
> But I think it'd be better to have it passed in no matter flag
> CLK_SET_RATE_PARENT is set or not.  Something like:

This places the burden of checking the flags onto the .round_rate
implementation with __clk_get_flags, but that's not a problem really.

>
> 8<---
> @@ -584,7 +584,7 @@ EXPORT_SYMBOL_GPL(clk_get_rate);
>  */
>  unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
>  {
> -       unsigned long unused;
> +       unsigned long parent_rate = 0;
>
>        if (!clk)
>                return -EINVAL;
> @@ -592,10 +592,10 @@ unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
>        if (!clk->ops->round_rate)
>                return clk->rate;
>
> -       if (clk->flags & CLK_SET_RATE_PARENT)
> -               return clk->ops->round_rate(clk->hw, rate, &unused);
> -       else
> -               return clk->ops->round_rate(clk->hw, rate, NULL);
> +       if (clk->parent)
> +               parent_rate = clk->parent->rate;
> +
> +       return clk->ops->round_rate(clk->hw, rate, &parent_rate);
>  }
>
>  /**
> @@ -765,9 +765,12 @@ static void clk_calc_subtree(struct clk *clk, unsigned long new_rate)
>  static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
>  {
>        struct clk *top = clk;
> -       unsigned long best_parent_rate = clk->parent->rate;
> +       unsigned long best_parent_rate = 0;
>        unsigned long new_rate;
>
> +       if (clk->parent)
> +               best_parent_rate = clk->parent->rate;
> +
>        if (!clk->ops->round_rate && !(clk->flags & CLK_SET_RATE_PARENT)) {
>                clk->new_rate = clk->rate;
>                return NULL;
> @@ -780,10 +783,7 @@ static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
>                goto out;
>        }
>
> -       if (clk->flags & CLK_SET_RATE_PARENT)
> -               new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
> -       else
> -               new_rate = clk->ops->round_rate(clk->hw, rate, NULL);
> +       new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
>
>        if (best_parent_rate != clk->parent->rate) {
>                top = clk_calc_new_rates(clk->parent, best_parent_rate);
>
> --->8

ACK

>
> The reason behind the change is that any clk implements .round_rate will
> mostly need to get the parent rate, no matter flag CLK_SET_RATE_PARENT
> is set or not.  Instead of expecting every .round_rate implementation
> to get the parent rate in the way beloe
>
>         parent_rate = __clk_get_rate(__clk_get_parent(hw->clk));
>
> we can just pass the parent rate into .round_rate.
>
>> +     int             (*set_parent)(struct clk_hw *hw, u8 index);
>> +     u8              (*get_parent)(struct clk_hw *hw);
>> +     int             (*set_rate)(struct clk_hw *hw, unsigned long);
>
> For the same reason, I would change .set_rate interface like below.
>
> 8<---
>
> diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
> index d5ac6a7..6bd8037 100644
> --- a/drivers/clk/clk-divider.c
> +++ b/drivers/clk/clk-divider.c
> @@ -119,7 +119,8 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
>  }
>  EXPORT_SYMBOL_GPL(clk_divider_round_rate);
>
> -static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate)
> +static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
> +                               unsigned long parent_rate)
>  {
>        struct clk_divider *divider = to_clk_divider(hw);
>        unsigned int div;
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index dbc310a..d74ac4b 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -833,17 +833,18 @@ static struct clk *clk_propagate_rate_change(struct clk *clk, unsigned long even
>  static void clk_change_rate(struct clk *clk)
>  {
>        struct clk *child;
> -       unsigned long old_rate;
> +       unsigned long old_rate, parent_rate = 0;
>        struct hlist_node *tmp;
>
>        old_rate = clk->rate;
> +       if (clk->parent)
> +               parent_rate = clk->parent->rate;
>
>        if (clk->ops->set_rate)
> -               clk->ops->set_rate(clk->hw, clk->new_rate);
> +               clk->ops->set_rate(clk->hw, clk->new_rate, parent_rate);
>
>        if (clk->ops->recalc_rate)
> -               clk->rate = clk->ops->recalc_rate(clk->hw,
> -                               clk->parent->rate);
> +               clk->rate = clk->ops->recalc_rate(clk->hw, parent_rate);
>        else
>                clk->rate = clk->parent->rate;
>
> diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
> index 5508897..1031f1f 100644
> --- a/include/linux/clk-provider.h
> +++ b/include/linux/clk-provider.h
> @@ -125,7 +125,8 @@ struct clk_ops {
>                                        unsigned long *);
>        int             (*set_parent)(struct clk_hw *hw, u8 index);
>        u8              (*get_parent)(struct clk_hw *hw);
> -       int             (*set_rate)(struct clk_hw *hw, unsigned long);
> +       int             (*set_rate)(struct clk_hw *hw, unsigned long,
> +                                       unsigned long);
>        void            (*init)(struct clk_hw *hw);
>  };
>
> --->8

ACK

>
> Then with parent rate passed into .round_rate and .set_rate like what
> we do with .recalc_rate right now, we can save particular clk
> implementation from calling __clk_get_parent() and __clk_get_rate to
> get parent rate.
>
> For example, the following will the be diff we gain on clk-divider.
>
> 8<---
>
> diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
> index 6bd8037..8a28ffb 100644
> --- a/drivers/clk/clk-divider.c
> +++ b/drivers/clk/clk-divider.c
> @@ -68,8 +68,8 @@ static int clk_divider_bestdiv(struct clk_hw *hw, unsigned long rate,
>        if (divider->flags & CLK_DIVIDER_ONE_BASED)
>                maxdiv--;
>
> -       if (!best_parent_rate) {
> -               parent_rate = __clk_get_rate(__clk_get_parent(hw->clk));
> +       if (!(divider->flags & CLK_SET_RATE_PARENT)) {

This is wrong.  CLK_SET_RATE_PARENT is a common clock flag applied to
struct clk's .flags member, not the divider.  This function must still
use __clk_get_flags(hw->clk) here, but that's OK.

> +               parent_rate = *best_parent_rate;
>                bestdiv = DIV_ROUND_UP(parent_rate, rate);
>                bestdiv = bestdiv == 0 ? 1 : bestdiv;
>                bestdiv = bestdiv > maxdiv ? maxdiv : bestdiv;
> @@ -109,13 +109,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
>        int div;
>        div = clk_divider_bestdiv(hw, rate, prate);
>
> -       if (prate)
> -               return *prate / div;
> -       else {
> -               unsigned long r;
> -               r = __clk_get_rate(__clk_get_parent(hw->clk));
> -               return r / div;
> -       }
> +       return *prate / div;
>  }
>  EXPORT_SYMBOL_GPL(clk_divider_round_rate);
>
> @@ -127,7 +121,7 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
>        unsigned long flags = 0;
>        u32 val;
>
> -       div = __clk_get_rate(__clk_get_parent(hw->clk)) / rate;
> +       div = parent_rate / rate;
>
>        if (!(divider->flags & CLK_DIVIDER_ONE_BASED))
>                div--;
>
> --->8

ACK, besides my comment above.

>
> I always get a sense of worry in using functions named in __xxx which
> sounds like something somehow internal.  With the requested interface
> change above, I can get all __xxx functions out of my clk_ops
> implementation.

As mentioned above, you'll still need to check for CLK_SET_RATE_PARENT
in your .round_rate implementation with __clk_get_flags(hw->clk).

Did you want to send a formal patch or just have me absorb this into
the fixes I'm brewing already?  I've already fixed the potential null
ptr dereferences in clk_calc_new_rates, but that's no big deal.

Regards,
Mike

WARNING: multiple messages have this Message-ID (diff)
From: mturquette@ti.com (Turquette, Mike)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 2/3] clk: introduce the common clock framework
Date: Tue, 20 Mar 2012 16:46:38 -0700	[thread overview]
Message-ID: <CAJOA=zOZ=XNwhEwUSD34AERi+f8fnMqG9EmS5hxCx+2u8qnkgw@mail.gmail.com> (raw)
In-Reply-To: <20120320140220.GE32469@S2101-09.ap.freescale.net>

On Tue, Mar 20, 2012 at 7:02 AM, Shawn Guo <shawn.guo@linaro.org> wrote:
> On Thu, Mar 15, 2012 at 11:11:19PM -0700, Mike Turquette wrote:
> ...
>> +struct clk_ops {
>> + ? ? int ? ? ? ? ? ? (*prepare)(struct clk_hw *hw);
>> + ? ? void ? ? ? ? ? ?(*unprepare)(struct clk_hw *hw);
>> + ? ? int ? ? ? ? ? ? (*enable)(struct clk_hw *hw);
>> + ? ? void ? ? ? ? ? ?(*disable)(struct clk_hw *hw);
>> + ? ? int ? ? ? ? ? ? (*is_enabled)(struct clk_hw *hw);
>> + ? ? unsigned long ? (*recalc_rate)(struct clk_hw *hw,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned long parent_rate);
>
> I believe I have heard people love the interface with parent_rate
> passed in. ?I love that too. ?But I would like to ask the same thing
> on .round_rate and .set_rate as well for the same reason why we have
> it for .recalc_rate.

This is something that was discussed on the list but not taken in due
to rapid flux in code.  I always liked the idea however.

>
>> + ? ? long ? ? ? ? ? ?(*round_rate)(struct clk_hw *hw, unsigned long,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned long *);
>
> Yes, we already have parent_rate passed in .round_rate with an pointer.
> But I think it'd be better to have it passed in no matter flag
> CLK_SET_RATE_PARENT is set or not. ?Something like:

This places the burden of checking the flags onto the .round_rate
implementation with __clk_get_flags, but that's not a problem really.

>
> 8<---
> @@ -584,7 +584,7 @@ EXPORT_SYMBOL_GPL(clk_get_rate);
> ?*/
> ?unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
> ?{
> - ? ? ? unsigned long unused;
> + ? ? ? unsigned long parent_rate = 0;
>
> ? ? ? ?if (!clk)
> ? ? ? ? ? ? ? ?return -EINVAL;
> @@ -592,10 +592,10 @@ unsigned long __clk_round_rate(struct clk *clk, unsigned long rate)
> ? ? ? ?if (!clk->ops->round_rate)
> ? ? ? ? ? ? ? ?return clk->rate;
>
> - ? ? ? if (clk->flags & CLK_SET_RATE_PARENT)
> - ? ? ? ? ? ? ? return clk->ops->round_rate(clk->hw, rate, &unused);
> - ? ? ? else
> - ? ? ? ? ? ? ? return clk->ops->round_rate(clk->hw, rate, NULL);
> + ? ? ? if (clk->parent)
> + ? ? ? ? ? ? ? parent_rate = clk->parent->rate;
> +
> + ? ? ? return clk->ops->round_rate(clk->hw, rate, &parent_rate);
> ?}
>
> ?/**
> @@ -765,9 +765,12 @@ static void clk_calc_subtree(struct clk *clk, unsigned long new_rate)
> ?static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
> ?{
> ? ? ? ?struct clk *top = clk;
> - ? ? ? unsigned long best_parent_rate = clk->parent->rate;
> + ? ? ? unsigned long best_parent_rate = 0;
> ? ? ? ?unsigned long new_rate;
>
> + ? ? ? if (clk->parent)
> + ? ? ? ? ? ? ? best_parent_rate = clk->parent->rate;
> +
> ? ? ? ?if (!clk->ops->round_rate && !(clk->flags & CLK_SET_RATE_PARENT)) {
> ? ? ? ? ? ? ? ?clk->new_rate = clk->rate;
> ? ? ? ? ? ? ? ?return NULL;
> @@ -780,10 +783,7 @@ static struct clk *clk_calc_new_rates(struct clk *clk, unsigned long rate)
> ? ? ? ? ? ? ? ?goto out;
> ? ? ? ?}
>
> - ? ? ? if (clk->flags & CLK_SET_RATE_PARENT)
> - ? ? ? ? ? ? ? new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
> - ? ? ? else
> - ? ? ? ? ? ? ? new_rate = clk->ops->round_rate(clk->hw, rate, NULL);
> + ? ? ? new_rate = clk->ops->round_rate(clk->hw, rate, &best_parent_rate);
>
> ? ? ? ?if (best_parent_rate != clk->parent->rate) {
> ? ? ? ? ? ? ? ?top = clk_calc_new_rates(clk->parent, best_parent_rate);
>
> --->8

ACK

>
> The reason behind the change is that any clk implements .round_rate will
> mostly need to get the parent rate, no matter flag CLK_SET_RATE_PARENT
> is set or not. ?Instead of expecting every .round_rate implementation
> to get the parent rate in the way beloe
>
> ? ? ? ? parent_rate = __clk_get_rate(__clk_get_parent(hw->clk));
>
> we can just pass the parent rate into .round_rate.
>
>> + ? ? int ? ? ? ? ? ? (*set_parent)(struct clk_hw *hw, u8 index);
>> + ? ? u8 ? ? ? ? ? ? ?(*get_parent)(struct clk_hw *hw);
>> + ? ? int ? ? ? ? ? ? (*set_rate)(struct clk_hw *hw, unsigned long);
>
> For the same reason, I would change .set_rate interface like below.
>
> 8<---
>
> diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
> index d5ac6a7..6bd8037 100644
> --- a/drivers/clk/clk-divider.c
> +++ b/drivers/clk/clk-divider.c
> @@ -119,7 +119,8 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
> ?}
> ?EXPORT_SYMBOL_GPL(clk_divider_round_rate);
>
> -static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate)
> +static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned long parent_rate)
> ?{
> ? ? ? ?struct clk_divider *divider = to_clk_divider(hw);
> ? ? ? ?unsigned int div;
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index dbc310a..d74ac4b 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -833,17 +833,18 @@ static struct clk *clk_propagate_rate_change(struct clk *clk, unsigned long even
> ?static void clk_change_rate(struct clk *clk)
> ?{
> ? ? ? ?struct clk *child;
> - ? ? ? unsigned long old_rate;
> + ? ? ? unsigned long old_rate, parent_rate = 0;
> ? ? ? ?struct hlist_node *tmp;
>
> ? ? ? ?old_rate = clk->rate;
> + ? ? ? if (clk->parent)
> + ? ? ? ? ? ? ? parent_rate = clk->parent->rate;
>
> ? ? ? ?if (clk->ops->set_rate)
> - ? ? ? ? ? ? ? clk->ops->set_rate(clk->hw, clk->new_rate);
> + ? ? ? ? ? ? ? clk->ops->set_rate(clk->hw, clk->new_rate, parent_rate);
>
> ? ? ? ?if (clk->ops->recalc_rate)
> - ? ? ? ? ? ? ? clk->rate = clk->ops->recalc_rate(clk->hw,
> - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? clk->parent->rate);
> + ? ? ? ? ? ? ? clk->rate = clk->ops->recalc_rate(clk->hw, parent_rate);
> ? ? ? ?else
> ? ? ? ? ? ? ? ?clk->rate = clk->parent->rate;
>
> diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
> index 5508897..1031f1f 100644
> --- a/include/linux/clk-provider.h
> +++ b/include/linux/clk-provider.h
> @@ -125,7 +125,8 @@ struct clk_ops {
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?unsigned long *);
> ? ? ? ?int ? ? ? ? ? ? (*set_parent)(struct clk_hw *hw, u8 index);
> ? ? ? ?u8 ? ? ? ? ? ? ?(*get_parent)(struct clk_hw *hw);
> - ? ? ? int ? ? ? ? ? ? (*set_rate)(struct clk_hw *hw, unsigned long);
> + ? ? ? int ? ? ? ? ? ? (*set_rate)(struct clk_hw *hw, unsigned long,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned long);
> ? ? ? ?void ? ? ? ? ? ?(*init)(struct clk_hw *hw);
> ?};
>
> --->8

ACK

>
> Then with parent rate passed into .round_rate and .set_rate like what
> we do with .recalc_rate right now, we can save particular clk
> implementation from calling __clk_get_parent() and __clk_get_rate to
> get parent rate.
>
> For example, the following will the be diff we gain on clk-divider.
>
> 8<---
>
> diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
> index 6bd8037..8a28ffb 100644
> --- a/drivers/clk/clk-divider.c
> +++ b/drivers/clk/clk-divider.c
> @@ -68,8 +68,8 @@ static int clk_divider_bestdiv(struct clk_hw *hw, unsigned long rate,
> ? ? ? ?if (divider->flags & CLK_DIVIDER_ONE_BASED)
> ? ? ? ? ? ? ? ?maxdiv--;
>
> - ? ? ? if (!best_parent_rate) {
> - ? ? ? ? ? ? ? parent_rate = __clk_get_rate(__clk_get_parent(hw->clk));
> + ? ? ? if (!(divider->flags & CLK_SET_RATE_PARENT)) {

This is wrong.  CLK_SET_RATE_PARENT is a common clock flag applied to
struct clk's .flags member, not the divider.  This function must still
use __clk_get_flags(hw->clk) here, but that's OK.

> + ? ? ? ? ? ? ? parent_rate = *best_parent_rate;
> ? ? ? ? ? ? ? ?bestdiv = DIV_ROUND_UP(parent_rate, rate);
> ? ? ? ? ? ? ? ?bestdiv = bestdiv == 0 ? 1 : bestdiv;
> ? ? ? ? ? ? ? ?bestdiv = bestdiv > maxdiv ? maxdiv : bestdiv;
> @@ -109,13 +109,7 @@ static long clk_divider_round_rate(struct clk_hw *hw, unsigned long rate,
> ? ? ? ?int div;
> ? ? ? ?div = clk_divider_bestdiv(hw, rate, prate);
>
> - ? ? ? if (prate)
> - ? ? ? ? ? ? ? return *prate / div;
> - ? ? ? else {
> - ? ? ? ? ? ? ? unsigned long r;
> - ? ? ? ? ? ? ? r = __clk_get_rate(__clk_get_parent(hw->clk));
> - ? ? ? ? ? ? ? return r / div;
> - ? ? ? }
> + ? ? ? return *prate / div;
> ?}
> ?EXPORT_SYMBOL_GPL(clk_divider_round_rate);
>
> @@ -127,7 +121,7 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
> ? ? ? ?unsigned long flags = 0;
> ? ? ? ?u32 val;
>
> - ? ? ? div = __clk_get_rate(__clk_get_parent(hw->clk)) / rate;
> + ? ? ? div = parent_rate / rate;
>
> ? ? ? ?if (!(divider->flags & CLK_DIVIDER_ONE_BASED))
> ? ? ? ? ? ? ? ?div--;
>
> --->8

ACK, besides my comment above.

>
> I always get a sense of worry in using functions named in __xxx which
> sounds like something somehow internal. ?With the requested interface
> change above, I can get all __xxx functions out of my clk_ops
> implementation.

As mentioned above, you'll still need to check for CLK_SET_RATE_PARENT
in your .round_rate implementation with __clk_get_flags(hw->clk).

Did you want to send a formal patch or just have me absorb this into
the fixes I'm brewing already?  I've already fixed the potential null
ptr dereferences in clk_calc_new_rates, but that's no big deal.

Regards,
Mike

  parent reply	other threads:[~2012-03-20 23:47 UTC|newest]

Thread overview: 242+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-16  6:11 [PATCH v7 0/3] common clk framework Mike Turquette
2012-03-16  6:11 ` Mike Turquette
2012-03-16  6:11 ` [PATCH v7 1/3] Documentation: common clk API Mike Turquette
2012-03-16  6:11   ` Mike Turquette
2012-03-16  8:25   ` Linus Walleij
2012-03-16  8:25     ` Linus Walleij
2012-03-16 10:29     ` Thomas Gleixner
2012-03-16 10:29       ` Thomas Gleixner
2012-03-16 11:14       ` Amit Kucheria
2012-03-16 11:14         ` Amit Kucheria
2012-03-16 12:18         ` Arnd Bergmann
2012-03-16 12:18           ` Arnd Bergmann
2012-03-16 20:57           ` Arnd Bergmann
2012-03-16 20:57             ` Arnd Bergmann
2012-03-16 21:40             ` Turquette, Mike
2012-03-16 21:40               ` Turquette, Mike
2012-03-16 21:50             ` Nicolas Pitre
2012-03-16 21:50               ` Nicolas Pitre
2012-03-16 22:21             ` Paul Walmsley
2012-03-16 22:21               ` Paul Walmsley
2012-03-16 22:21               ` Paul Walmsley
2012-03-16 22:33               ` Turquette, Mike
2012-03-16 22:33                 ` Turquette, Mike
2012-03-17  9:05                 ` Arnd Bergmann
2012-03-17  9:05                   ` Arnd Bergmann
2012-03-17  9:05                   ` Arnd Bergmann
2012-03-17 18:02                   ` Turquette, Mike
2012-03-17 18:02                     ` Turquette, Mike
2012-03-17 18:02                     ` Turquette, Mike
2012-03-17 18:33                     ` Arnd Bergmann
2012-03-17 18:33                       ` Arnd Bergmann
2012-03-17 18:33                       ` Arnd Bergmann
2012-03-17 20:29                     ` Sascha Hauer
2012-03-17 20:29                       ` Sascha Hauer
2012-03-17 20:29                       ` Sascha Hauer
2012-03-17 21:13                       ` Arnd Bergmann
2012-03-17 21:13                         ` Arnd Bergmann
2012-03-17 21:13                         ` Arnd Bergmann
2012-03-20 23:40                   ` Paul Walmsley
2012-03-20 23:40                     ` Paul Walmsley
2012-03-21  8:59                     ` Arnd Bergmann
2012-03-21  8:59                       ` Arnd Bergmann
2012-03-16 23:47               ` Sascha Hauer
2012-03-16 23:47                 ` Sascha Hauer
2012-03-16 23:47                 ` Sascha Hauer
2012-03-17  0:54                 ` Rob Herring
2012-03-17  0:54                   ` Rob Herring
2012-03-17  0:54                   ` Rob Herring
2012-03-17  3:38                   ` Saravana Kannan
2012-03-17  3:38                     ` Saravana Kannan
2012-03-17  3:38                     ` Saravana Kannan
2012-03-20 23:31                 ` Paul Walmsley
2012-03-20 23:31                   ` Paul Walmsley
2012-03-20 23:31                   ` Paul Walmsley
2012-03-21  3:15                   ` Nicolas Pitre
2012-03-21  3:15                     ` Nicolas Pitre
2012-03-21  3:15                     ` Nicolas Pitre
2012-03-21  3:26                     ` Saravana Kannan
2012-03-21  3:26                       ` Saravana Kannan
2012-03-21  3:26                       ` Saravana Kannan
2012-03-21  7:44                       ` Paul Walmsley
2012-03-21  7:44                         ` Paul Walmsley
2012-03-21  7:44                         ` Paul Walmsley
2012-03-21  9:10                         ` Sascha Hauer
2012-03-21  9:10                           ` Sascha Hauer
2012-03-21  9:10                           ` Sascha Hauer
2012-03-21 18:38                         ` Saravana Kannan
2012-03-21 18:38                           ` Saravana Kannan
2012-03-21 18:38                           ` Saravana Kannan
2012-03-21 19:07                           ` Mark Brown
2012-03-21 19:07                             ` Mark Brown
2012-03-21 19:07                             ` Mark Brown
2012-03-21 19:33                             ` Tony Lindgren
2012-03-21 19:33                               ` Tony Lindgren
2012-03-21 19:33                               ` Tony Lindgren
2012-03-21 19:41                               ` Saravana Kannan
2012-03-21 19:41                                 ` Saravana Kannan
2012-03-21 19:41                                 ` Saravana Kannan
2012-03-21 19:56                                 ` Mark Brown
2012-03-21 19:56                                   ` Mark Brown
2012-03-21 19:56                                   ` Mark Brown
2012-03-21 20:04                                   ` Saravana Kannan
2012-03-21 20:04                                     ` Saravana Kannan
2012-03-21 20:04                                     ` Saravana Kannan
2012-03-21 20:10                                     ` Mark Brown
2012-03-21 20:10                                       ` Mark Brown
2012-03-21 20:10                                       ` Mark Brown
2012-03-22  0:42                                 ` Russell King - ARM Linux
2012-03-22  0:42                                   ` Russell King - ARM Linux
2012-03-22  0:42                                   ` Russell King - ARM Linux
2012-03-21  7:30                     ` Paul Walmsley
2012-03-21  7:30                       ` Paul Walmsley
2012-03-21  7:30                       ` Paul Walmsley
2012-03-21 13:23                       ` Nicolas Pitre
2012-03-21 13:23                         ` Nicolas Pitre
2012-03-21 13:23                         ` Nicolas Pitre
2012-03-16  6:11 ` [PATCH v7 2/3] clk: introduce the common clock framework Mike Turquette
2012-03-16  6:11   ` Mike Turquette
2012-03-17  3:28   ` Saravana Kannan
2012-03-17  3:28     ` Saravana Kannan
2012-03-19 18:56     ` Turquette, Mike
2012-03-19 18:56       ` Turquette, Mike
2012-03-19 19:13       ` Saravana Kannan
2012-03-19 19:13         ` Saravana Kannan
2012-03-19 19:33         ` Turquette, Mike
2012-03-19 19:33           ` Turquette, Mike
2012-03-19 19:49           ` Saravana Kannan
2012-03-19 19:49             ` Saravana Kannan
2012-03-20  3:38           ` [PATCH 1/2] clk: Fix error handling in fixed clock hardware type register fn Saravana Kannan
2012-03-20  3:38             ` Saravana Kannan
2012-03-20  3:38             ` [PATCH 2/2] clk: Move init fields from clk to clk_hw Saravana Kannan
2012-03-20  3:38               ` Saravana Kannan
2012-03-20  7:20               ` Shawn Guo
2012-03-20  7:20                 ` Shawn Guo
2012-03-20  7:54                 ` Saravana Kannan
2012-03-20  7:54                   ` Saravana Kannan
2012-03-20  7:54                   ` Saravana Kannan
2012-03-20  8:13                   ` Shawn Guo
2012-03-20  8:13                     ` Shawn Guo
2012-03-20  9:40                   ` Sascha Hauer
2012-03-20  9:40                     ` Sascha Hauer
2012-03-20 10:17                     ` Saravana Kannan
2012-03-20 10:17                       ` Saravana Kannan
2012-03-20 10:17                       ` Saravana Kannan
2012-03-20 18:14                       ` Sascha Hauer
2012-03-20 18:14                         ` Sascha Hauer
2012-03-20 20:14                         ` Saravana Kannan
2012-03-20 20:14                           ` Saravana Kannan
2012-03-20 22:40                           ` Sascha Hauer
2012-03-20 22:40                             ` Sascha Hauer
2012-03-22  3:23                             ` Shawn Guo
2012-03-22  3:23                               ` Shawn Guo
2012-03-20 14:18                     ` Shawn Guo
2012-03-20 14:18                       ` Shawn Guo
2012-03-20 18:10                       ` Sascha Hauer
2012-03-20 18:10                         ` Sascha Hauer
2012-03-20 20:06                         ` Saravana Kannan
2012-03-20 20:06                           ` Saravana Kannan
2012-03-20 23:12                           ` Sascha Hauer
2012-03-20 23:12                             ` Sascha Hauer
2012-03-21  1:47                             ` Turquette, Mike
2012-03-21  1:47                               ` Turquette, Mike
2012-03-21  3:01                               ` Saravana Kannan
2012-03-21  3:01                                 ` Saravana Kannan
2012-03-27  4:35                                 ` Saravana Kannan
2012-03-27  4:35                                   ` Saravana Kannan
2012-03-27 18:49                                   ` Turquette, Mike
2012-03-27 18:49                                     ` Turquette, Mike
2012-03-27 22:27                                     ` Saravana Kannan
2012-03-27 22:27                                       ` Saravana Kannan
2012-04-06  1:30                                     ` Saravana Kannan
2012-04-06  1:30                                       ` Saravana Kannan
2012-04-11 17:59                                       ` Turquette, Mike
2012-04-11 17:59                                         ` Turquette, Mike
2012-04-11 19:57                                         ` Saravana Kannan
2012-04-11 19:57                                           ` Saravana Kannan
2012-04-11 19:57                                           ` Saravana Kannan
2012-04-11 20:17                                           ` Turquette, Mike
2012-04-11 20:17                                             ` Turquette, Mike
2012-04-11 20:21                                             ` Saravana Kannan
2012-04-11 20:21                                               ` Saravana Kannan
2012-04-11 20:21                                               ` Saravana Kannan
2012-03-20 23:47                         ` Paul Walmsley
2012-03-20 23:47                           ` Paul Walmsley
2012-03-21  9:16                           ` Sascha Hauer
2012-03-21  9:16                             ` Sascha Hauer
2012-03-20  7:19             ` [PATCH 1/2] clk: Fix error handling in fixed clock hardware type register fn Sascha Hauer
2012-03-20  7:19               ` Sascha Hauer
2012-03-20  7:46               ` Saravana Kannan
2012-03-20  7:46                 ` Saravana Kannan
2012-03-20  7:46                 ` Saravana Kannan
2012-03-21  0:13                 ` Turquette, Mike
2012-03-21  0:13                   ` Turquette, Mike
2012-03-21  2:32                   ` Saravana Kannan
2012-03-21  2:32                     ` Saravana Kannan
2012-03-21  5:45                     ` Turquette, Mike
2012-03-21  5:45                       ` Turquette, Mike
2012-03-21  6:33                       ` Saravana Kannan
2012-03-21  6:33                         ` Saravana Kannan
2012-03-21  6:33                         ` Saravana Kannan
2012-03-21  9:07                       ` Russell King - ARM Linux
2012-03-21  9:07                         ` Russell King - ARM Linux
2012-03-21 19:56                         ` Turquette, Mike
2012-03-21 19:56                           ` Turquette, Mike
2012-03-18 13:46   ` [PATCH v7 2/3] clk: introduce the common clock framework Shawn Guo
2012-03-18 13:46     ` Shawn Guo
2012-03-19 18:58     ` Turquette, Mike
2012-03-19 18:58       ` Turquette, Mike
2012-03-18 14:07   ` Shawn Guo
2012-03-18 14:07     ` Shawn Guo
2012-03-19 19:00     ` Turquette, Mike
2012-03-19 19:00       ` Turquette, Mike
2012-03-19 11:22   ` Rajendra Nayak
2012-03-19 11:22     ` Rajendra Nayak
2012-03-19 11:28     ` Sascha Hauer
2012-03-19 11:28       ` Sascha Hauer
2012-03-19 19:09       ` Turquette, Mike
2012-03-19 19:09         ` Turquette, Mike
2012-03-19 19:53     ` Turquette, Mike
2012-03-19 19:53       ` Turquette, Mike
2012-03-20 14:02   ` Shawn Guo
2012-03-20 14:02     ` Shawn Guo
2012-03-20 17:46     ` Saravana Kannan
2012-03-20 17:46       ` Saravana Kannan
2012-03-20 23:53       ` Turquette, Mike
2012-03-20 23:53         ` Turquette, Mike
2012-03-21  3:10         ` Saravana Kannan
2012-03-21  3:10           ` Saravana Kannan
2012-03-23 21:33           ` Saravana Kannan
2012-03-23 21:33             ` Saravana Kannan
2012-03-23 21:39             ` Turquette, Mike
2012-03-23 21:39               ` Turquette, Mike
2012-03-23 21:51               ` Saravana Kannan
2012-03-23 21:51                 ` Saravana Kannan
2012-03-23 22:12               ` Saravana Kannan
2012-03-23 22:12                 ` Saravana Kannan
2012-03-23 22:32                 ` Turquette, Mike
2012-03-23 22:32                   ` Turquette, Mike
2012-03-23 23:04                   ` Saravana Kannan
2012-03-23 23:04                     ` Saravana Kannan
2012-03-23 23:28                     ` Turquette, Mike
2012-03-23 23:28                       ` Turquette, Mike
2012-03-28  3:06                       ` Saravana Kannan
2012-03-28  3:06                         ` Saravana Kannan
2012-03-28 17:08                         ` Turquette, Mike
2012-03-28 17:08                           ` Turquette, Mike
2012-03-28 22:25                           ` Saravana Kannan
2012-03-28 22:25                             ` Saravana Kannan
2012-03-28 23:49                             ` Turquette, Mike
2012-03-28 23:49                               ` Turquette, Mike
2012-03-20 23:46     ` Turquette, Mike [this message]
2012-03-20 23:46       ` Turquette, Mike
2012-03-21  5:46       ` Shawn Guo
2012-03-21  5:46         ` Shawn Guo
2012-03-16  6:11 ` [PATCH v7 3/3] clk: basic clock hardware types Mike Turquette
2012-03-16  6:11   ` Mike Turquette
2012-03-16 12:25   ` Richard Zhao
2012-03-16 12:25     ` Richard Zhao
2012-03-16 16:51     ` Turquette, Mike
2012-03-16 16:51       ` Turquette, Mike
2012-03-16 10:57 ` [PATCH v7 0/3] common clk framework Sascha Hauer
2012-03-16 10:57   ` Sascha Hauer

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='CAJOA=zOZ=XNwhEwUSD34AERi+f8fnMqG9EmS5hxCx+2u8qnkgw@mail.gmail.com' \
    --to=mturquette@ti.com \
    --cc=arnd.bergmann@linaro.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --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@arm.linux.org.uk \
    --cc=magnus.damm@gmail.com \
    --cc=patches@linaro.org \
    --cc=paul@pwsan.com \
    --cc=s.hauer@pengutronix.de \
    --cc=sboyd@codeaurora.org \
    --cc=shawn.guo@linaro.org \
    --cc=skannan@codeaurora.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.