From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793747428; b=SC+s5M6V6FlqzaR3lJBhv/b+GSCAfps4PeRMmQbaDE2Eng9MnwEF/+UsfY0fET1fz4bT sTtDjG7XR2Jlx2bmfzJfRDImBJWlzHVqApHNa3tWj8DAO2VYx3jNYiB2Hhk0EkAAiRn3A MroyDXPrLkYIBt5d8EPZatySLUIt0mklOJY3zbMyWBc2j7Rb8xZk/mi/zfPn+aFxa2xpY X5jThLzhIE44UF9CJ1hyFIIDuIrmfaGDqXG+WWtNG5ra+vS63EZqYbrHwxzrndq0Amo9J S7npLk4czcy3jOM/X5r7uO92lp9vlHTq+hCnZQ7i+P6BN7MQwTokP7zVMK6MlpHAJRA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793747428; h=DMARC-Filter:Received:Received:DKIM-Signature:From:To:Cc:Subject: Date:Message-Id:X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; bh=mOCyYrBGB+XIqTdJaPvQ3XTFsjQ/DBugx4t6eCqUCuA=; b=czW4koSsIDpEUreEHxW9BKzLCTaADG51czXW6dAPb2lRy/0hWdRy1yQpr1SGuObqqZIs l/O+CkLdm0NNci0U575Ks84II0UohyR2lq2KtjJTHDLFkwqmTEe/KTqweIImy/76L4a0S B8gdRlR8TLNWzdAer2U/ws0wMxx82hBAhCykS/Zp2bb0DJkW0YeHOKZAV49E7CWkOkjnJ LStNbhSA04XbFQ3QdPlVfUIuECvS8STdRbTUlMiv8rlWy1VG/62nMcJXaOATCwOHbAiWU pCeiWYueBImVKbKwgl8QHEeWqu3VHsZLWLlUxJawLJQPDccLccJGgVlAGE95KTwpgjw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=foss header.b=M1MrVBR3; arc=none smtp.remote-ip=217.140.110.172 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 71E39606A338; Tue, 3 Nov 2026 23:10:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 71E39606A338 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=foss header.b=M1MrVBR3 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 EA22D1595; Tue, 3 Nov 2026 15:10:23 -0800 (PST) Received: from e121740.manchester.arm.com (e121740.arm.com [10.33.8.69]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 42F373F673; Tue, 3 Nov 2026 15:10:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1793747427; bh=y2g9X2SaQHYi4HusJgestLX4YsHc6wB3lzeyqQD1keY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M1MrVBR3HMrT3VqeqqrBt00IDvrB1gA5hmZEdfOJkOEANROTihNq/a4RtfN7ZcUSy JeL1CwturmS8eYO/TIjglpplCeePssPQHoBXvL0WUXN43Bq4gsTCciXjUvLVzRfymR ZdRpq4PAjgj7M8uhtJJv7GcrzW05xui5UsBgwMyA= From: Philip Radford To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, arm-scmi@vger.kernel.org, linux-pm@vger.kernel.org Cc: sudeep.holla@arm.com, james.quinlan@broadcom.com, f.fainelli@gmail.com, vincent.guittot@linaro.org, etienne.carriere@st.com, peng.fan@oss.nxp.com, michal.simek@amd.com, quic_sibis@quicinc.com, dan.carpenter@linaro.org, d-gole@ti.com, souvik.chakravarty@arm.com, Philip Radford , Cristian Marussi Subject: [PATCH v10 02/13] firmware: arm_scmi: Add an optional custom parameter to fastchannel helpers Date: Tue, 3 Nov 2026 23:09:56 +0000 Message-Id: <20261103231007.537082-3-philip.radford@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20261103231007.537082-1-philip.radford@arm.com> References: <20261103231007.537082-1-philip.radford@arm.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Starting from SCMIv4.0 the protocols DESCRIBE_FASTCHANNEL commands allow to specify one additional per-protocol custom field in the outgoing message request in order to, optionally, further narrow down the scope of the fastchannel discovery request; the related message-reply format is instead unchanged. Add an optional custom protocol parameter to the common fastchannel helper so as to enable the caller to choose the kind of message to send based on the detected protocol version. Signed-off-by: Cristian Marussi Signed-off-by: Philip Radford --- drivers/firmware/arm_scmi/driver.c | 12 ++++++++++-- drivers/firmware/arm_scmi/perf.c | 8 ++++---- drivers/firmware/arm_scmi/powercap.c | 8 ++++---- drivers/firmware/arm_scmi/protocols.h | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 1e6f69b14321..c49130dbadc3 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -1934,6 +1934,11 @@ static int scmi_iterator_run_bound(void *iter, unsigned int *start, struct scmi_msg_get_fc_info { __le32 domain; __le32 message_id; + __le32 custom; +#define MSG_FC_INFO_SZ_EXTENDED \ + (sizeof(struct scmi_msg_get_fc_info)) +#define MSG_FC_INFO_SZ \ + (sizeof(struct scmi_msg_get_fc_info) - sizeof(__le32)) }; struct scmi_msg_resp_desc_fc { @@ -1962,7 +1967,7 @@ struct scmi_msg_resp_desc_fc { static void scmi_common_fastchannel_init(const struct scmi_protocol_handle *ph, u8 describe_id, u32 message_id, u32 valid_size, - u32 domain, void __iomem **p_addr, + u32 domain, u32 *custom, void __iomem **p_addr, struct scmi_fc_db_info **p_db, u32 *rate_limit) { int ret; @@ -1993,13 +1998,16 @@ scmi_common_fastchannel_init(const struct scmi_protocol_handle *ph, } ret = ph->xops->xfer_get_init(ph, describe_id, - sizeof(*info), sizeof(*resp), &t); + custom ? MSG_FC_INFO_SZ_EXTENDED : + MSG_FC_INFO_SZ, sizeof(*resp), &t); if (ret) goto err_out; info = t->tx.buf; info->domain = cpu_to_le32(domain); info->message_id = cpu_to_le32(message_id); + if (custom) + info->custom = cpu_to_le32(*custom); /* * Bail out on error leaving fc_info addresses zeroed; this includes diff --git a/drivers/firmware/arm_scmi/perf.c b/drivers/firmware/arm_scmi/perf.c index 4583d02bee1c..7f283f457e02 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -835,25 +835,25 @@ static void scmi_perf_domain_init_fc(const struct scmi_protocol_handle *ph, return; ph->hops->fastchannel_init(ph, PERF_DESCRIBE_FASTCHANNEL, - PERF_LEVEL_GET, 4, dom->id, + PERF_LEVEL_GET, 4, dom->id, NULL, &fc[PERF_FC_LEVEL].get_addr, NULL, &fc[PERF_FC_LEVEL].rate_limit); ph->hops->fastchannel_init(ph, PERF_DESCRIBE_FASTCHANNEL, - PERF_LIMITS_GET, 8, dom->id, + PERF_LIMITS_GET, 8, dom->id, NULL, &fc[PERF_FC_LIMIT].get_addr, NULL, &fc[PERF_FC_LIMIT].rate_limit); if (dom->info.set_perf) ph->hops->fastchannel_init(ph, PERF_DESCRIBE_FASTCHANNEL, - PERF_LEVEL_SET, 4, dom->id, + PERF_LEVEL_SET, 4, dom->id, NULL, &fc[PERF_FC_LEVEL].set_addr, &fc[PERF_FC_LEVEL].set_db, &fc[PERF_FC_LEVEL].rate_limit); if (dom->set_limits) ph->hops->fastchannel_init(ph, PERF_DESCRIBE_FASTCHANNEL, - PERF_LIMITS_SET, 8, dom->id, + PERF_LIMITS_SET, 8, dom->id, NULL, &fc[PERF_FC_LIMIT].set_addr, &fc[PERF_FC_LIMIT].set_db, &fc[PERF_FC_LIMIT].rate_limit); diff --git a/drivers/firmware/arm_scmi/powercap.c b/drivers/firmware/arm_scmi/powercap.c index 27e3c805e927..31b19967452f 100644 --- a/drivers/firmware/arm_scmi/powercap.c +++ b/drivers/firmware/arm_scmi/powercap.c @@ -726,24 +726,24 @@ static void scmi_powercap_domain_init_fc(const struct scmi_protocol_handle *ph, return; ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL, - POWERCAP_CAP_SET, 4, domain, + POWERCAP_CAP_SET, 4, domain, NULL, &fc[POWERCAP_FC_CAP].set_addr, &fc[POWERCAP_FC_CAP].set_db, &fc[POWERCAP_FC_CAP].rate_limit); ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL, - POWERCAP_CAP_GET, 4, domain, + POWERCAP_CAP_GET, 4, domain, NULL, &fc[POWERCAP_FC_CAP].get_addr, NULL, &fc[POWERCAP_FC_CAP].rate_limit); ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL, - POWERCAP_PAI_SET, 4, domain, + POWERCAP_PAI_SET, 4, domain, NULL, &fc[POWERCAP_FC_PAI].set_addr, &fc[POWERCAP_FC_PAI].set_db, &fc[POWERCAP_FC_PAI].rate_limit); ph->hops->fastchannel_init(ph, POWERCAP_DESCRIBE_FASTCHANNEL, - POWERCAP_PAI_GET, 4, domain, + POWERCAP_PAI_GET, 4, domain, NULL, &fc[POWERCAP_FC_PAI].get_addr, NULL, &fc[POWERCAP_FC_PAI].rate_limit); diff --git a/drivers/firmware/arm_scmi/protocols.h b/drivers/firmware/arm_scmi/protocols.h index 8583159059e6..08edec705270 100644 --- a/drivers/firmware/arm_scmi/protocols.h +++ b/drivers/firmware/arm_scmi/protocols.h @@ -294,7 +294,7 @@ struct scmi_proto_helpers_ops { u32 message_id, u32 *attributes); void (*fastchannel_init)(const struct scmi_protocol_handle *ph, u8 describe_id, u32 message_id, - u32 valid_size, u32 domain, + u32 valid_size, u32 domain, u32 *custom, void __iomem **p_addr, struct scmi_fc_db_info **p_db, u32 *rate_limit); -- 2.34.1