[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20221026020800.38AC8C433C1@smtp.kernel.org>
Date: Tue, 25 Oct 2022 19:07:58 -0700
From: Stephen Boyd <sboyd@...nel.org>
To: Maxime Ripard <maxime@...no.tech>,
Michael Turquette <mturquette@...libre.com>
Cc: linux-kernel@...r.kernel.org,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@...labora.com>,
Maxime Ripard <maxime@...no.tech>, linux-clk@...r.kernel.org
Subject: Re: [PATCH 4/4] clk: Warn if we register a mux without determine_rate
Quoting Maxime Ripard (2022-10-18 06:52:59)
> The determine_rate hook allows to select the proper parent and its rate
> for a given clock configuration. On another hand, set_parent is there to
> change the parent of a mux.
>
> Some clocks provide a set_parent hook but don't implement
> determine_rate. In such a case, set_parent is pretty much useless since
> the clock framework will always assume the current parent is to be used,
> and we will thus never change it.
>
> This situation can be solved in two ways:
> - either we don't need to change the parent, and we thus shouldn't
> implement set_parent;
> - or we don't want to change the parent, in this case we should set
> CLK_SET_RATE_NO_REPARENT;
> - or we're missing a determine_rate implementation.
>
> The latter is probably just an oversight from the driver's author, and
> we should thus raise their awareness about the fact that the current
> state of the driver is confusing.
There is another case which is a leaf clk that is a mux where you only
expect clk_set_parent() to be used, and not clk_set_rate(). This use
case is odd though, so I'm not sure how much we care.
>
> It's not clear at this point how many drivers are affected though, so
> let's make it a warning instead of an error for now.
>
> Signed-off-by: Maxime Ripard <maxime@...no.tech>
> ---
> drivers/clk/clk.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 57b83665e5c3..11c41d987ff4 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -3700,6 +3700,11 @@ static int __clk_core_init(struct clk_core *core)
> goto out;
> }
>
> + /* TODO: Promote to an error */
The documentation should be updated in this patch (see the table of
hardware characteristics in Documentation/driver-api/clk.rst).
> + if (core->ops->set_parent && !core->ops->determine_rate)
> + pr_warn("%s: %s must implement .set_parent & .determine_rate\n",
You can grep for it:
$ git grep -W 'struct clk_ops .*='
but I'm fairly certain a coccinelle script can detect most of these
because clk_ops are usually statically defined (although not always).
Either way I already see that 'owl_comp_div_ops' will trigger this
warning. And 'at91sam9x5_smd_ops' looks even more likely. Given that I'm
not super keen on applying this patch.
Powered by blists - more mailing lists