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
next prev 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: linkBe 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.