From: Andre Przywara <andre.przywara@arm.com>
To: Samuel Holland <samuel@sholland.org>
Cc: Chen-Yu Tsai <wens@csie.org>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>,
linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-sunxi@lists.linux.dev
Subject: Re: [PATCH v2] clk: sunxi-ng: Avoid computing the rate twice
Date: Tue, 3 Jan 2023 11:20:24 +0000 [thread overview]
Message-ID: <20230103112024.293c95e2@donnerap.cambridge.arm.com> (raw)
In-Reply-To: <20221231173055.42384-1-samuel@sholland.org>
On Sat, 31 Dec 2022 11:30:55 -0600
Samuel Holland <samuel@sholland.org> wrote:
Hi,
> The ccu_*_find_best() functions already compute a best_rate at the same
> time as the other factors. Return this value so the caller does not need
> to duplicate the computation.
>
> Signed-off-by: Samuel Holland <samuel@sholland.org>
Checked for all five files that the internal calculation in find_best()
matches the one it replaces here:
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Cheers,
Andre
> ---
>
> Changes in v2:
> - Apply the same change also to nk, nkm, nkmp, and nm
> - Update the commit message
>
> drivers/clk/sunxi-ng/ccu_mp.c | 11 ++++++-----
> drivers/clk/sunxi-ng/ccu_nk.c | 9 +++++----
> drivers/clk/sunxi-ng/ccu_nkm.c | 10 +++++-----
> drivers/clk/sunxi-ng/ccu_nkmp.c | 10 +++++-----
> drivers/clk/sunxi-ng/ccu_nm.c | 9 +++++----
> 5 files changed, 26 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/clk/sunxi-ng/ccu_mp.c b/drivers/clk/sunxi-ng/ccu_mp.c
> index 57cf2d615148..cc94a694cb67 100644
> --- a/drivers/clk/sunxi-ng/ccu_mp.c
> +++ b/drivers/clk/sunxi-ng/ccu_mp.c
> @@ -10,9 +10,9 @@
> #include "ccu_gate.h"
> #include "ccu_mp.h"
>
> -static void ccu_mp_find_best(unsigned long parent, unsigned long rate,
> - unsigned int max_m, unsigned int max_p,
> - unsigned int *m, unsigned int *p)
> +static unsigned long ccu_mp_find_best(unsigned long parent, unsigned long rate,
> + unsigned int max_m, unsigned int max_p,
> + unsigned int *m, unsigned int *p)
> {
> unsigned long best_rate = 0;
> unsigned int best_m = 0, best_p = 0;
> @@ -35,6 +35,8 @@ static void ccu_mp_find_best(unsigned long parent, unsigned long rate,
>
> *m = best_m;
> *p = best_p;
> +
> + return best_rate;
> }
>
> static unsigned long ccu_mp_find_best_with_parent_adj(struct clk_hw *hw,
> @@ -109,8 +111,7 @@ static unsigned long ccu_mp_round_rate(struct ccu_mux_internal *mux,
> max_p = cmp->p.max ?: 1 << ((1 << cmp->p.width) - 1);
>
> if (!clk_hw_can_set_rate_parent(&cmp->common.hw)) {
> - ccu_mp_find_best(*parent_rate, rate, max_m, max_p, &m, &p);
> - rate = *parent_rate / p / m;
> + rate = ccu_mp_find_best(*parent_rate, rate, max_m, max_p, &m, &p);
> } else {
> rate = ccu_mp_find_best_with_parent_adj(hw, parent_rate, rate,
> max_m, max_p);
> diff --git a/drivers/clk/sunxi-ng/ccu_nk.c b/drivers/clk/sunxi-ng/ccu_nk.c
> index c4fb82af97e8..8aa35d5804f3 100644
> --- a/drivers/clk/sunxi-ng/ccu_nk.c
> +++ b/drivers/clk/sunxi-ng/ccu_nk.c
> @@ -15,8 +15,8 @@ struct _ccu_nk {
> unsigned long k, min_k, max_k;
> };
>
> -static void ccu_nk_find_best(unsigned long parent, unsigned long rate,
> - struct _ccu_nk *nk)
> +static unsigned long ccu_nk_find_best(unsigned long parent, unsigned long rate,
> + struct _ccu_nk *nk)
> {
> unsigned long best_rate = 0;
> unsigned int best_k = 0, best_n = 0;
> @@ -39,6 +39,8 @@ static void ccu_nk_find_best(unsigned long parent, unsigned long rate,
>
> nk->k = best_k;
> nk->n = best_n;
> +
> + return best_rate;
> }
>
> static void ccu_nk_disable(struct clk_hw *hw)
> @@ -104,8 +106,7 @@ static long ccu_nk_round_rate(struct clk_hw *hw, unsigned long rate,
> _nk.min_k = nk->k.min ?: 1;
> _nk.max_k = nk->k.max ?: 1 << nk->k.width;
>
> - ccu_nk_find_best(*parent_rate, rate, &_nk);
> - rate = *parent_rate * _nk.n * _nk.k;
> + rate = ccu_nk_find_best(*parent_rate, rate, &_nk);
>
> if (nk->common.features & CCU_FEATURE_FIXED_POSTDIV)
> rate = rate / nk->fixed_post_div;
> diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c
> index 67da2c189b53..a0978a50edae 100644
> --- a/drivers/clk/sunxi-ng/ccu_nkm.c
> +++ b/drivers/clk/sunxi-ng/ccu_nkm.c
> @@ -16,8 +16,8 @@ struct _ccu_nkm {
> unsigned long m, min_m, max_m;
> };
>
> -static void ccu_nkm_find_best(unsigned long parent, unsigned long rate,
> - struct _ccu_nkm *nkm)
> +static unsigned long ccu_nkm_find_best(unsigned long parent, unsigned long rate,
> + struct _ccu_nkm *nkm)
> {
> unsigned long best_rate = 0;
> unsigned long best_n = 0, best_k = 0, best_m = 0;
> @@ -45,6 +45,8 @@ static void ccu_nkm_find_best(unsigned long parent, unsigned long rate,
> nkm->n = best_n;
> nkm->k = best_k;
> nkm->m = best_m;
> +
> + return best_rate;
> }
>
> static void ccu_nkm_disable(struct clk_hw *hw)
> @@ -122,9 +124,7 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux,
> if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
> rate *= nkm->fixed_post_div;
>
> - ccu_nkm_find_best(*parent_rate, rate, &_nkm);
> -
> - rate = *parent_rate * _nkm.n * _nkm.k / _nkm.m;
> + rate = ccu_nkm_find_best(*parent_rate, rate, &_nkm);
>
> if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
> rate /= nkm->fixed_post_div;
> diff --git a/drivers/clk/sunxi-ng/ccu_nkmp.c b/drivers/clk/sunxi-ng/ccu_nkmp.c
> index 39413cb0985c..99359a06892d 100644
> --- a/drivers/clk/sunxi-ng/ccu_nkmp.c
> +++ b/drivers/clk/sunxi-ng/ccu_nkmp.c
> @@ -29,8 +29,8 @@ static unsigned long ccu_nkmp_calc_rate(unsigned long parent,
> return rate;
> }
>
> -static void ccu_nkmp_find_best(unsigned long parent, unsigned long rate,
> - struct _ccu_nkmp *nkmp)
> +static unsigned long ccu_nkmp_find_best(unsigned long parent, unsigned long rate,
> + struct _ccu_nkmp *nkmp)
> {
> unsigned long best_rate = 0;
> unsigned long best_n = 0, best_k = 0, best_m = 0, best_p = 0;
> @@ -65,6 +65,8 @@ static void ccu_nkmp_find_best(unsigned long parent, unsigned long rate,
> nkmp->k = best_k;
> nkmp->m = best_m;
> nkmp->p = best_p;
> +
> + return best_rate;
> }
>
> static void ccu_nkmp_disable(struct clk_hw *hw)
> @@ -150,10 +152,8 @@ static long ccu_nkmp_round_rate(struct clk_hw *hw, unsigned long rate,
> _nkmp.min_p = 1;
> _nkmp.max_p = nkmp->p.max ?: 1 << ((1 << nkmp->p.width) - 1);
>
> - ccu_nkmp_find_best(*parent_rate, rate, &_nkmp);
> + rate = ccu_nkmp_find_best(*parent_rate, rate, &_nkmp);
>
> - rate = ccu_nkmp_calc_rate(*parent_rate, _nkmp.n, _nkmp.k,
> - _nkmp.m, _nkmp.p);
> if (nkmp->common.features & CCU_FEATURE_FIXED_POSTDIV)
> rate = rate / nkmp->fixed_post_div;
>
> diff --git a/drivers/clk/sunxi-ng/ccu_nm.c b/drivers/clk/sunxi-ng/ccu_nm.c
> index 9ca9257f4426..c1fd11542c45 100644
> --- a/drivers/clk/sunxi-ng/ccu_nm.c
> +++ b/drivers/clk/sunxi-ng/ccu_nm.c
> @@ -27,8 +27,8 @@ static unsigned long ccu_nm_calc_rate(unsigned long parent,
> return rate;
> }
>
> -static void ccu_nm_find_best(unsigned long parent, unsigned long rate,
> - struct _ccu_nm *nm)
> +static unsigned long ccu_nm_find_best(unsigned long parent, unsigned long rate,
> + struct _ccu_nm *nm)
> {
> unsigned long best_rate = 0;
> unsigned long best_n = 0, best_m = 0;
> @@ -52,6 +52,8 @@ static void ccu_nm_find_best(unsigned long parent, unsigned long rate,
>
> nm->n = best_n;
> nm->m = best_m;
> +
> + return best_rate;
> }
>
> static void ccu_nm_disable(struct clk_hw *hw)
> @@ -157,8 +159,7 @@ static long ccu_nm_round_rate(struct clk_hw *hw, unsigned long rate,
> _nm.min_m = 1;
> _nm.max_m = nm->m.max ?: 1 << nm->m.width;
>
> - ccu_nm_find_best(*parent_rate, rate, &_nm);
> - rate = ccu_nm_calc_rate(*parent_rate, _nm.n, _nm.m);
> + rate = ccu_nm_find_best(*parent_rate, rate, &_nm);
>
> if (nm->common.features & CCU_FEATURE_FIXED_POSTDIV)
> rate /= nm->fixed_post_div;
next prev parent reply other threads:[~2023-01-03 11:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-31 17:30 [PATCH v2] clk: sunxi-ng: Avoid computing the rate twice Samuel Holland
2023-01-03 11:20 ` Andre Przywara [this message]
2023-01-05 16:25 ` Jernej Škrabec
2023-01-08 20:55 ` Jernej Škrabec
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=20230103112024.293c95e2@donnerap.cambridge.arm.com \
--to=andre.przywara@arm.com \
--cc=jernej.skrabec@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=mturquette@baylibre.com \
--cc=samuel@sholland.org \
--cc=sboyd@kernel.org \
--cc=wens@csie.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox