Re: [PATCH 10/11] firmware: arm_scmi: Use bound iterators to minimize discovered rates
From: Jonathan Cameron
Date: Fri Feb 27 2026 - 11:58:42 EST
On Fri, 27 Feb 2026 15:32:24 +0000
Cristian Marussi <cristian.marussi@xxxxxxx> wrote:
> Clock rates are guaranteed to be returned in ascending order for SCMI clock
> protocol versions greater than 1.0: in such a case, use bounded iterators
> to minimize the number of message exchanges needed to discover min and max
> rate.
>
> Signed-off-by: Cristian Marussi <cristian.marussi@xxxxxxx>
> +
> +static int
> +scmi_clock_describe_rates_get(const struct scmi_protocol_handle *ph,
> + u32 clk_id, struct clock_info *cinfo)
> +{
> + struct scmi_clock_desc *clkd = &cinfo->clkds[clk_id];
> + int ret;
> +
> + /*
> + * Since only after SCMI Clock v1.0 the returned rates are guaranteed to
> + * be discovered in ascending order, lazy enumeration cannot be use for
> + * SCMI Clock v1.0 protocol.
> + */
> + if (PROTOCOL_REV_MAJOR(ph->version) > 0x1)
> + ret = scmi_clock_describe_rates_get_lazy(ph, clkd);
> + else
> + ret = scmi_clock_describe_rates_get_full(ph, clkd);
> +
> + if (ret)
> + return ret;
> +
> + clkd->info.min_rate = clkd->rates[RATE_MIN];
> if (!clkd->rate_discrete) {
> clkd->info.max_rate = clkd->rates[RATE_MAX];
> dev_dbg(ph->dev, "Min %llu Max %llu Step %llu Hz\n",
> clkd->rates[RATE_MIN], clkd->rates[RATE_MAX],
> clkd->rates[RATE_STEP]);
> } else {
> - sort(clkd->rates, clkd->num_rates,
> - sizeof(clkd->rates[0]), rate_cmp_func, NULL);
> clkd->info.max_rate = clkd->rates[clkd->num_rates - 1];
> + dev_dbg(ph->dev, "Clock:%s DISCRETE:%d -> Min %llu Max %llu\n",
> + clkd->info.name, clkd->rate_discrete,
> + clkd->info.min_rate, clkd->info.max_rate);
> }
> - clkd->info.min_rate = clkd->rates[RATE_MIN];
>
> - return 0;
> + return ret;
Why? Far as I can see it's still always zero if you get here.
> }
>
> static int