Re: [PATCH 10/11] firmware: arm_scmi: Use bound iterators to minimize discovered rates
From: Cristian Marussi <cristian.marussi@arm.com>
Date: 2026-02-28 10:43:48
Also in:
arm-scmi, linux-clk, linux-renesas-soc, lkml
On Fri, Feb 27, 2026 at 04:53:39PM +0000, Jonathan Cameron wrote:
On Fri, 27 Feb 2026 15:32:24 +0000 Cristian Marussi [off-list ref] wrote:quoted
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@arm.com>quoted
+ +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.
...well...simply bad refactoring late evening near beer o'clock time :P I will fix. Thanks, Cristian