From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 42AAAFD4F1B for ; Tue, 10 Mar 2026 18:40:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=H2Qr5KUgfMl+/uf5PJwSSqboKJv4iMCg2I/7l3go0Z4=; b=fKzubyj+eKCiI5kKkKqRdu89rL NxOerVEy1wEjT1id2ro9vd0W93BWvFv1aRo3e5hjC9knf9o8Opb8j2SZyOgNPhcIsoPXSO5yXsFiH 49IKtCXr6ZSWYb0JSpTqQxODchrbfINZvS47ChV5V5sG87pGB3N38lyG8K63gGfqMTG8Qql70YbPP ASMYqsmez5tWP6jkAMh1W7HrAYBjRTEAQA4N6BgxybBKC+PrqNVFgPXUqMn+Cf/M2Ms12gjYA3ooI Er1EZeZwcN8jFwtP6H8H2d3GS7VpbxBLXTL4yN7xxcb7nogXISqupUrzTPhYObOHLKgT10bkG7lYe 44PpKS7A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w020e-0000000A6Ao-2aRw; Tue, 10 Mar 2026 18:40:48 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1w020b-0000000A69f-2lsP for linux-arm-kernel@lists.infradead.org; Tue, 10 Mar 2026 18:40:47 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1897614BF; Tue, 10 Mar 2026 11:40:36 -0700 (PDT) Received: from pluto.guest.local (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2133B3F7BD; Tue, 10 Mar 2026 11:40:38 -0700 (PDT) From: Cristian Marussi 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, dan.carpenter@linaro.org, geert+renesas@glider.be, kuninori.morimoto.gx@renesas.com, marek.vasut+renesas@gmail.com, Cristian Marussi Subject: [PATCH v2 00/13] SCMI Clock rates discovery rework Date: Tue, 10 Mar 2026 18:40:17 +0000 Message-ID: <20260310184030.3669330-1-cristian.marussi@arm.com> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260310_114045_847362_63F6B896 X-CRM114-Status: GOOD ( 12.66 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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-12 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 13 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. Based on v7.0-rc3. Tested on JUNO and an emulated environment. Beside addressing a few review comments, in V2: - patch [1/13] introduces a fix for the pre-existing rounding algorithm, before relocating the algorithm logic as alreday done in V1. - patch [8/13] hardens clock protocol initialization by adding some missing retval checks 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 --- v1 --> v2 - Rebaed 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 (13): 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 protocol initialization 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 drivers/clk/clk-scmi.c | 48 +--- drivers/firmware/arm_scmi/clock.c | 316 ++++++++++++++++++++------ drivers/firmware/arm_scmi/driver.c | 73 ++++-- drivers/firmware/arm_scmi/protocols.h | 13 +- include/linux/scmi_protocol.h | 29 ++- 5 files changed, 329 insertions(+), 150 deletions(-) -- 2.53.0