[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMuHMdUA_OOvQmkZXn21pxC=nTw6wHQZp1P8mNjTca65+KjxAQ@mail.gmail.com>
Date: Thu, 26 Oct 2023 08:53:03 +0200
From: Geert Uytterhoeven <geert@...ux-m68k.org>
To: "Peng Fan (OSS)" <peng.fan@....nxp.com>
Cc: sboyd@...nel.org, abelvesa@...nel.org, mturquette@...libre.com,
clement.leger@...tlin.com, sudeep.holla@....com,
cristian.marussi@....com, kernel@...gutronix.de,
pure.logic@...us-software.ie, a.fatoum@...gutronix.de,
aford173@...il.com, absahu@...eaurora.org,
linux-clk@...r.kernel.org, linux-kernel@...r.kernel.org,
Peng Fan <peng.fan@....com>
Subject: Re: [PATCH] clk: clk-conf: bypass setting rate/parent if already same
Hi Peng,
On Thu, Oct 26, 2023 at 8:35 AM Peng Fan (OSS) <peng.fan@....nxp.com> wrote:
> From: Peng Fan <peng.fan@....com>
>
> If the original rate and parent is already the same as what users
> wanna to configure through assigned clock rate and parent, there
> is no need to configure them again which may cause more cpu cycles
> or more SCMI RPC calls.
>
> So check the rate and parent first, and bypass when the original
> rate and parent are same as requested by device tree node.
>
> Signed-off-by: Peng Fan <peng.fan@....com>
Thanks for your patch!
> --- a/drivers/clk/clk-conf.c
> +++ b/drivers/clk/clk-conf.c
> @@ -65,7 +65,11 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier)
> goto err;
> }
>
> - rc = clk_set_parent(clk, pclk);
> + if (__clk_get_hw(pclk) != __clk_get_hw(clk_get_parent(clk)))
> + rc = clk_set_parent(clk, pclk);
> + else
> + rc = 0;
The else branch is not needed, as rc already indicates a non-error
condition.
> +
> if (rc < 0)
> pr_err("clk: failed to reparent %s to %s: %d\n",
> __clk_get_name(clk), __clk_get_name(pclk), rc);
> @@ -112,7 +116,10 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier)
> return PTR_ERR(clk);
> }
>
> - rc = clk_set_rate(clk, rate);
> + if (clk_get_rate(clk) != rate)
> + rc = clk_set_rate(clk, rate);
> + else
> + rc = 0;
Likewise.
> if (rc < 0)
> pr_err("clk: couldn't set %s clk rate to %u (%d), current rate: %lu\n",
> __clk_get_name(clk), rate, rc,
However, one can wonder whether this check should be done in
clk_set_parent() resp. clk_set_rate() instead, so it would benefit
all callers?
Also:
/**
* clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
* This is only valid once the clock source has been enabled.
* @clk: clock source
*/
So at least the second part is not guaranteed to work?
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@...ux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
Powered by blists - more mailing lists