Re: [PATCH 02/11] clk: scmi: Use new determine_rate clock operation
From: Cristian Marussi
Date: Tue Mar 03 2026 - 07:54:19 EST
On Mon, Mar 02, 2026 at 01:39:51PM +0100, Geert Uytterhoeven wrote:
> Hi Cristian,
>
> On Fri, 27 Feb 2026 at 16:33, Cristian Marussi <cristian.marussi@xxxxxxx> wrote:
> > Use the Clock protocol layer determine_rate logic to calculate the closest
> > rate that can be supported by a specific clock.
> >
> > No functional change.
> >
> > Cc: Brian Masney <bmasney@xxxxxxxxxx>
> > Cc: Michael Turquette <mturquette@xxxxxxxxxxxx>
> > Cc: Stephen Boyd <sboyd@xxxxxxxxxx>
> > Cc: linux-clk@xxxxxxxxxxxxxxx
> > Signed-off-by: Cristian Marussi <cristian.marussi@xxxxxxx>
>
> > --- a/drivers/clk/clk-scmi.c
> > +++ b/drivers/clk/clk-scmi.c
> > @@ -57,35 +56,17 @@ static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw,
> > static int scmi_clk_determine_rate(struct clk_hw *hw,
> > struct clk_rate_request *req)
> > {
> > - u64 fmin, fmax, ftmp;
> > + int ret;
> > struct scmi_clk *clk = to_scmi_clk(hw);
> >
> > /*
> > - * We can't figure out what rate it will be, so just return the
> > - * rate back to the caller. scmi_clk_recalc_rate() will be called
> > - * after the rate is set and we'll know what rate the clock is
> > + * If we could not get a better rate scmi_clk_recalc_rate() will be
> > + * called after the rate is set and we'll know what rate the clock is
> > * running at then.
> > */
> > - if (clk->info->rate_discrete)
> > - return 0;
> > -
> > - fmin = clk->info->range.min_rate;
> > - fmax = clk->info->range.max_rate;
> > - if (req->rate <= fmin) {
> > - req->rate = fmin;
> > -
> > - return 0;
> > - } else if (req->rate >= fmax) {
> > - req->rate = fmax;
> > -
> > - return 0;
> > - }
> > -
> > - ftmp = req->rate - fmin;
> > - ftmp += clk->info->range.step_size - 1; /* to round up */
> > - do_div(ftmp, clk->info->range.step_size);
>
> Oh, so the truncation bug exists in the original code, too.
Yep...as said I will fix the original code and then move the fixed
code.
Thanks,
Cristian