diff for duplicates of <1496049173.7514.2.camel@baylibre.com> diff --git a/a/1.txt b/N1/1.txt index dc9cce2..1759a59 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -2,15 +2,15 @@ On Thu, 2017-05-25 at 13:20 -0700, Michael Turquette wrote: > Quoting Jerome Brunet (2017-05-21 14:59:51) > > The current implementation of clk_core_set_rate_nolock bails out early if > > the requested rate is exactly the same as the one set. It should bail out -> > if the request would not result in rate a change.??This important when rate +> > if the request would not result in rate a change. This important when rate > > is not exactly what is requested, which is fairly common with PLLs. > > > > Ex: provider able to give any rate with steps of 100Hz -> > ?- 1st consumer request 48000Hz and gets it. -> > ?- 2nd consumer request 48010Hz as well. If we were to perform the usual -> > ???mechanism, we would get 48000Hz as well. The clock would not change so -> > ???there is no point performing any checks to make sure the clock can -> > ???change, we know it won't. +> > - 1st consumer request 48000Hz and gets it. +> > - 2nd consumer request 48010Hz as well. If we were to perform the usual +> > mechanism, we would get 48000Hz as well. The clock would not change so +> > there is no point performing any checks to make sure the clock can +> > change, we know it won't. > > > > This is important to prepare the addition of the clock protection mechanism > @@ -45,59 +45,59 @@ be a valuable addition. > > > > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> > > --- -> > ?drivers/clk/clk.c | 23 +++++++++++++++++++++-- -> > ?1 file changed, 21 insertions(+), 2 deletions(-) +> > drivers/clk/clk.c | 23 +++++++++++++++++++++-- +> > 1 file changed, 21 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > > index 100f72472e10..1a8c0d013238 100644 > > --- a/drivers/clk/clk.c > > +++ b/drivers/clk/clk.c > > @@ -1570,15 +1570,34 @@ static void clk_change_rate(struct clk_core *core) -> > ????????????????clk_change_rate(core->new_child); -> > ?} -> > ? +> > clk_change_rate(core->new_child); +> > } +> > > > +static unsigned long clk_core_req_round_rate_nolock(struct clk_core *core, -> > +????????????????????????????????????????????????????unsigned long req_rate) +> > + unsigned long req_rate) > > +{ -> > +???????int ret; -> > +???????struct clk_rate_request req; +> > + int ret; +> > + struct clk_rate_request req; > > + -> > +???????if (!core) -> > +???????????????return 0; +> > + if (!core) +> > + return 0; > > + -> > +???????clk_core_get_boundaries(core, &req.min_rate, &req.max_rate); -> > +???????req.rate = req_rate; +> > + clk_core_get_boundaries(core, &req.min_rate, &req.max_rate); +> > + req.rate = req_rate; > > + -> > +???????ret = clk_core_round_rate_nolock(core, &req); +> > + ret = clk_core_round_rate_nolock(core, &req); > > + -> > +???????return ret ? 0 : req.rate; +> > + return ret ? 0 : req.rate; > > +} > > + -> > ?static int clk_core_set_rate_nolock(struct clk_core *core, -> > ????????????????????????????????????unsigned long req_rate) -> > ?{ -> > ????????struct clk_core *top, *fail_clk; -> > -???????unsigned long rate = req_rate; -> > +???????unsigned long rate; -> > ? -> > ????????if (!core) -> > ????????????????return 0; -> > ? -> > +???????rate = clk_core_req_round_rate_nolock(core, req_rate); +> > static int clk_core_set_rate_nolock(struct clk_core *core, +> > unsigned long req_rate) +> > { +> > struct clk_core *top, *fail_clk; +> > - unsigned long rate = req_rate; +> > + unsigned long rate; +> > +> > if (!core) +> > return 0; +> > +> > + rate = clk_core_req_round_rate_nolock(core, req_rate); > > + -> > ????????/* bail early if nothing to do */ -> > ????????if (rate == clk_core_get_rate_nolock(core)) -> > ????????????????return 0; +> > /* bail early if nothing to do */ +> > if (rate == clk_core_get_rate_nolock(core)) +> > return 0; > > @@ -1587,7 +1606,7 @@ static int clk_core_set_rate_nolock(struct clk_core > > *core, -> > ????????????????return -EBUSY; -> > ? -> > ????????/* calculate new rates and get the topmost changed clock */ -> > -???????top = clk_calc_new_rates(core, rate); -> > +???????top = clk_calc_new_rates(core, req_rate); -> > ????????if (!top) -> > ????????????????return -EINVAL; -> > ? -> > --? +> > return -EBUSY; +> > +> > /* calculate new rates and get the topmost changed clock */ +> > - top = clk_calc_new_rates(core, rate); +> > + top = clk_calc_new_rates(core, req_rate); +> > if (!top) +> > return -EINVAL; +> > +> > -- > > 2.9.4 > > diff --git a/a/content_digest b/N1/content_digest index 7dbbc5b..5c6a067 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,25 +1,31 @@ "ref\020170521215958.19743-1-jbrunet@baylibre.com\0" "ref\020170521215958.19743-5-jbrunet@baylibre.com\0" "ref\0149574365034.52617.9521289317050513324@resonance\0" - "From\0jbrunet@baylibre.com (Jerome Brunet)\0" - "Subject\0[PATCH v2 04/11] clk: use round rate to bail out early in set_rate\0" + "From\0Jerome Brunet <jbrunet@baylibre.com>\0" + "Subject\0Re: [PATCH v2 04/11] clk: use round rate to bail out early in set_rate\0" "Date\0Mon, 29 May 2017 11:12:53 +0200\0" - "To\0linus-amlogic@lists.infradead.org\0" + "To\0Michael Turquette <mturquette@baylibre.com>" + Stephen Boyd <sboyd@codeaurora.org> + " Kevin Hilman <khilman@baylibre.com>\0" + "Cc\0linux-clk@vger.kernel.org" + linux-amlogic@lists.infradead.org + Linus Walleij <linus.walleij@linaro.org> + " Boris Brezillon <boris.brezillon@free-electrons.com>\0" "\00:1\0" "b\0" "On Thu, 2017-05-25 at 13:20 -0700, Michael Turquette wrote:\n" "> Quoting Jerome Brunet (2017-05-21 14:59:51)\n" "> > The current implementation of clk_core_set_rate_nolock bails out early if\n" "> > the requested rate is exactly the same as the one set. It should bail out\n" - "> > if the request would not result in rate a change.??This important when rate\n" + "> > if the request would not result in rate a change.\302\240\302\240This important when rate\n" "> > is not exactly what is requested, which is fairly common with PLLs.\n" "> > \n" "> > Ex: provider able to give any rate with steps of 100Hz\n" - "> > ?- 1st consumer request 48000Hz and gets it.\n" - "> > ?- 2nd consumer request 48010Hz as well. If we were to perform the usual\n" - "> > ???mechanism, we would get 48000Hz as well. The clock would not change so\n" - "> > ???there is no point performing any checks to make sure the clock can\n" - "> > ???change, we know it won't.\n" + "> > \302\240- 1st consumer request 48000Hz and gets it.\n" + "> > \302\240- 2nd consumer request 48010Hz as well. If we were to perform the usual\n" + "> > \302\240\302\240\302\240mechanism, we would get 48000Hz as well. The clock would not change so\n" + "> > \302\240\302\240\302\240there is no point performing any checks to make sure the clock can\n" + "> > \302\240\302\240\302\240change, we know it won't.\n" "> > \n" "> > This is important to prepare the addition of the clock protection mechanism\n" "> \n" @@ -54,61 +60,61 @@ "> > \n" "> > Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>\n" "> > ---\n" - "> > ?drivers/clk/clk.c | 23 +++++++++++++++++++++--\n" - "> > ?1 file changed, 21 insertions(+), 2 deletions(-)\n" + "> > \302\240drivers/clk/clk.c | 23 +++++++++++++++++++++--\n" + "> > \302\2401 file changed, 21 insertions(+), 2 deletions(-)\n" "> > \n" "> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c\n" "> > index 100f72472e10..1a8c0d013238 100644\n" "> > --- a/drivers/clk/clk.c\n" "> > +++ b/drivers/clk/clk.c\n" "> > @@ -1570,15 +1570,34 @@ static void clk_change_rate(struct clk_core *core)\n" - "> > ????????????????clk_change_rate(core->new_child);\n" - "> > ?}\n" - "> > ?\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240clk_change_rate(core->new_child);\n" + "> > \302\240}\n" + "> > \302\240\n" "> > +static unsigned long clk_core_req_round_rate_nolock(struct clk_core *core,\n" - "> > +????????????????????????????????????????????????????unsigned long req_rate)\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240unsigned long req_rate)\n" "> > +{\n" - "> > +???????int ret;\n" - "> > +???????struct clk_rate_request req;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240int ret;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct clk_rate_request req;\n" "> > +\n" - "> > +???????if (!core)\n" - "> > +???????????????return 0;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!core)\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n" "> > +\n" - "> > +???????clk_core_get_boundaries(core, &req.min_rate, &req.max_rate);\n" - "> > +???????req.rate = req_rate;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240clk_core_get_boundaries(core, &req.min_rate, &req.max_rate);\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240req.rate = req_rate;\n" "> > +\n" - "> > +???????ret = clk_core_round_rate_nolock(core, &req);\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240ret = clk_core_round_rate_nolock(core, &req);\n" "> > +\n" - "> > +???????return ret ? 0 : req.rate;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240return ret ? 0 : req.rate;\n" "> > +}\n" "> > +\n" - "> > ?static int clk_core_set_rate_nolock(struct clk_core *core,\n" - "> > ????????????????????????????????????unsigned long req_rate)\n" - "> > ?{\n" - "> > ????????struct clk_core *top, *fail_clk;\n" - "> > -???????unsigned long rate = req_rate;\n" - "> > +???????unsigned long rate;\n" - "> > ?\n" - "> > ????????if (!core)\n" - "> > ????????????????return 0;\n" - "> > ?\n" - "> > +???????rate = clk_core_req_round_rate_nolock(core, req_rate);\n" + "> > \302\240static int clk_core_set_rate_nolock(struct clk_core *core,\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240unsigned long req_rate)\n" + "> > \302\240{\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240struct clk_core *top, *fail_clk;\n" + "> > -\302\240\302\240\302\240\302\240\302\240\302\240\302\240unsigned long rate = req_rate;\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240unsigned long rate;\n" + "> > \302\240\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!core)\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n" + "> > \302\240\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240rate = clk_core_req_round_rate_nolock(core, req_rate);\n" "> > +\n" - "> > ????????/* bail early if nothing to do */\n" - "> > ????????if (rate == clk_core_get_rate_nolock(core))\n" - "> > ????????????????return 0;\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* bail early if nothing to do */\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (rate == clk_core_get_rate_nolock(core))\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return 0;\n" "> > @@ -1587,7 +1606,7 @@ static int clk_core_set_rate_nolock(struct clk_core\n" "> > *core,\n" - "> > ????????????????return -EBUSY;\n" - "> > ?\n" - "> > ????????/* calculate new rates and get the topmost changed clock */\n" - "> > -???????top = clk_calc_new_rates(core, rate);\n" - "> > +???????top = clk_calc_new_rates(core, req_rate);\n" - "> > ????????if (!top)\n" - "> > ????????????????return -EINVAL;\n" - "> > ?\n" - "> > --?\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -EBUSY;\n" + "> > \302\240\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* calculate new rates and get the topmost changed clock */\n" + "> > -\302\240\302\240\302\240\302\240\302\240\302\240\302\240top = clk_calc_new_rates(core, rate);\n" + "> > +\302\240\302\240\302\240\302\240\302\240\302\240\302\240top = clk_calc_new_rates(core, req_rate);\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (!top)\n" + "> > \302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return -EINVAL;\n" + "> > \302\240\n" + "> > --\302\240\n" "> > 2.9.4\n" > > -566e83b91259323cf442feabecc7b524351f62fbca2ae2ea972c51e55594c4de +fe9bdb1afe91d27a08ff783af17c840a6ab0fc0debbbac412d669b0a40721904
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.