From: Cristian Marussi <cristian.marussi@arm.com>
To: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, arm-scmi@vger.kernel.org,
linux-clk@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Cc: sudeep.holla@arm.com, philip.radford@arm.com,
james.quinlan@broadcom.com, f.fainelli@gmail.com,
vincent.guittot@linaro.org, etienne.carriere@foss.st.com,
peng.fan@oss.nxp.com, michal.simek@amd.com,
geert+renesas@glider.be, kuninori.morimoto.gx@renesas.com,
marek.vasut+renesas@gmail.com,
Cristian Marussi <cristian.marussi@arm.com>
Subject: [PATCH v3 00/15] SCMI Clock rates discovery rework
Date: Tue, 28 Apr 2026 21:15:07 +0100 [thread overview]
Message-ID: <20260428201522.903875-1-cristian.marussi@arm.com> (raw)
Hi,
it was a known limitation, in the SCMI Clock protocol support, the lack of
dynamic allocation around per-clock rates discovery: fixed size statically
per-clock rates arrays did not scale and was increasingly a waste of memory
(see [1]).
This series aim at solving this in successive steps:
- simplify and reduce to the minimum possible the rates data info exposed
to the SCMI driver by scmi_clock_info
- move away from static fixed allocation of per-clock rates arrays in
favour of a completely dynamic runtime allocation: just allocate what
is needed based on the effectively discovered
This is done in patches 2-6.
A further bigger optimization suggested in a past series [2] by Etienne
would be, whenever allowed by the spec, to limit upfront the number of
queries in order to simply retrieve min and max rate, that are indeed the
only rates needed by the CLK SCMI driver.
The approach proposed in [1] was open coding and duplicating some of the
functionalities already provided by SCMI iterators, though.
Patch 7-14 implement such optimization instead by:
- reworking core SCMI iterators to support bound enumerations
- use such new bound iterators to perform the minimum number of queries
in order to only retrieve min an max rate
As a final result now the rates enumeration triggered by the CLK SCMI
driver, while still allocating for all the existent rates, miminize the
number of SCMI CLK_DESCRIBE_RATE messages needed to obtain min and max.
Finally, patch 15 introduces a new clock protocol operation to be able to
trigger anytime on demand a full enumeration and obtain the full list of
rates when needed, not only min/max: this latter method is really only used
currently by some dowstream SCMI Test driver of mine.
Most notably in this V3 I had:
- picked up Geert fixes on V2: these could have been squashed in the
original series while maintaining proper Geert's authorship but as of
now I have simply picked them up and changed their order to be near the
commit they fix
- dropped the "Harden Clock protocol initialization" patch that caused a
number of out-of-spec vendor FW to break
Based on v7.1-rc1.
Tested on ARM/JUNO, RADXA/ROCK5B and an emulated environment.
Any feeback welcome.
Thanks,
Cristian
[1]: https://lore.kernel.org/arm-scmi/aZsX-oplR6fiLBBN@pluto/T/#t
[2]: https://lore.kernel.org/20241203173908.3148794-2-etienne.carriere@foss.st.com
---
v2 --> v3
- Rebased on v7.1-rc1
- Picked up Geert fixes
- Dropped patch breaking out-of-spec FW (Harden Clock Protocol init)
- Collected Reviewed tags
v1 --> v2
- Rebased on v7.0-rc3
- Added a Fixes patch to rectify bug in rounding algo
- Removed useless parenthesis in macros
- Collected a few Reviewed-by tags
- Clarified commit message
Cristian Marussi (12):
clk: scmi: Fix clock rate rounding
firmware: arm_scmi: Add clock determine_rate operation
clk: scmi: Use new determine_rate clock operation
firmware: arm_scmi: Simplify clock rates exposed interface
clk: scmi: Use new simplified per-clock rate properties
firmware: arm_scmi: Drop unused clock rate interfaces
firmware: arm_scmi: Make clock rates allocation dynamic
firmware: arm_scmi: Harden clock parents discovery
firmware: arm_scmi: Refactor iterators internal allocation
firmware: arm_scmi: Add bound iterators support
firmware: arm_scmi: Use bound iterators to minimize discovered rates
firmware: arm_scmi: Introduce all_rates_get clock operation
Geert Uytterhoeven (3):
firmware: arm_scmi: Fix bound iterators returning too many items
firmware: arm_scmi: Use proper iter_response_bound_cleanup() name
firmware: arm_scmi: Fix OOB in scmi_clock_describe_rates_get_lazy()
drivers/clk/clk-scmi.c | 48 +---
drivers/firmware/arm_scmi/clock.c | 301 ++++++++++++++++++++------
drivers/firmware/arm_scmi/driver.c | 80 +++++--
drivers/firmware/arm_scmi/protocols.h | 13 +-
include/linux/scmi_protocol.h | 29 ++-
5 files changed, 324 insertions(+), 147 deletions(-)
--
2.53.0
next reply other threads:[~2026-04-28 20:17 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-28 20:15 Cristian Marussi [this message]
2026-04-28 20:15 ` [PATCH v3 01/15] clk: scmi: Fix clock rate rounding Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 02/15] firmware: arm_scmi: Add clock determine_rate operation Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 03/15] clk: scmi: Use new determine_rate clock operation Cristian Marussi
2026-04-28 20:33 ` Brian Masney
2026-04-28 22:20 ` Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 04/15] firmware: arm_scmi: Simplify clock rates exposed interface Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 05/15] clk: scmi: Use new simplified per-clock rate properties Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 06/15] firmware: arm_scmi: Drop unused clock rate interfaces Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 07/15] firmware: arm_scmi: Make clock rates allocation dynamic Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 08/15] firmware: arm_scmi: Harden clock parents discovery Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 09/15] firmware: arm_scmi: Refactor iterators internal allocation Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 10/15] firmware: arm_scmi: Add bound iterators support Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 11/15] firmware: arm_scmi: Fix bound iterators returning too many items Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 12/15] firmware: arm_scmi: Use proper iter_response_bound_cleanup() name Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 13/15] firmware: arm_scmi: Use bound iterators to minimize discovered rates Cristian Marussi
2026-05-05 9:59 ` Geert Uytterhoeven
2026-04-28 20:15 ` [PATCH v3 14/15] firmware: arm_scmi: Fix OOB in scmi_clock_describe_rates_get_lazy() Cristian Marussi
2026-04-28 20:15 ` [PATCH v3 15/15] firmware: arm_scmi: Introduce all_rates_get clock operation Cristian Marussi
2026-04-29 15:39 ` [PATCH v3 00/15] SCMI Clock rates discovery rework Florian Fainelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260428201522.903875-1-cristian.marussi@arm.com \
--to=cristian.marussi@arm.com \
--cc=arm-scmi@vger.kernel.org \
--cc=etienne.carriere@foss.st.com \
--cc=f.fainelli@gmail.com \
--cc=geert+renesas@glider.be \
--cc=james.quinlan@broadcom.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=marek.vasut+renesas@gmail.com \
--cc=michal.simek@amd.com \
--cc=peng.fan@oss.nxp.com \
--cc=philip.radford@arm.com \
--cc=sudeep.holla@arm.com \
--cc=vincent.guittot@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox