From nobody Sat Oct 4 21:03:13 2025 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CB55A2F83AA; Wed, 13 Aug 2025 11:46:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755085614; cv=none; b=AU9A+AEANnSbxRy+QNtdw/cE6xm7uhKs3SD96FXEw0HzyFRN2E3G88a6rC3D2oo/R/yHAOOCvmF9Ol6nxtMCf8OI3Y2QiMUb8pSaiPxCj1zW8KxYWm5OzVb5GTjfkIDvtXNLaB36FjPrWIKPIudXJ0L1QIMgF3zdxHerWkWtTpU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755085614; c=relaxed/simple; bh=0qfnYA6Yu/6iAF1ELp3dzF+4dj9ecYHx96y5qDBti00=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AN+hki2L+OFzYJAVZwoIoAsBqRbVMdIMSuVevz3+6F4S8ONk8l6ynfHMCBmiVV/2gn5uqdrwuUYACJ80JwO7z5s1Wehb3R4y77htc1FVB+o4+3yq/b1/B3442eipz3MKRhyuB0kJo2S/mwPwcuyBnDWuFEtcRm90LWGR0yLZfYY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 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 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 16CBF14BF; Wed, 13 Aug 2025 04:46:44 -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 145213F738; Wed, 13 Aug 2025 04:46:48 -0700 (PDT) From: Cristian Marussi 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, Cristian Marussi Subject: [PATCH 1/8] firmware: arm_scmi: Add an optional custom parameter to fastchannel helpers Date: Wed, 13 Aug 2025 12:46:02 +0100 Message-ID: <20250813114609.1305571-2-cristian.marussi@arm.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20250813114609.1305571-1-cristian.marussi@arm.com> References: <20250813114609.1305571-1-cristian.marussi@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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 bd56a877fdfc..65bd545c0cb1 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -1892,6 +1892,11 @@ static int scmi_iterator_run(void *iter) 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)) }; =20 struct scmi_msg_resp_desc_fc { @@ -1920,7 +1925,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; @@ -1951,13 +1956,16 @@ scmi_common_fastchannel_init(const struct scmi_prot= ocol_handle *ph, } =20 ret =3D 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; =20 info =3D t->tx.buf; info->domain =3D cpu_to_le32(domain); info->message_id =3D cpu_to_le32(message_id); + if (custom) + info->custom =3D cpu_to_le32(*custom); =20 /* * 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/p= erf.c index 683fd9b85c5c..99f2c5a510e0 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -847,25 +847,25 @@ static void scmi_perf_domain_init_fc(const struct scm= i_protocol_handle *ph, return; =20 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); =20 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); =20 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); =20 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_sc= mi/powercap.c index 1fa79bba492e..3c7b77c9335d 100644 --- a/drivers/firmware/arm_scmi/powercap.c +++ b/drivers/firmware/arm_scmi/powercap.c @@ -717,24 +717,24 @@ static void scmi_powercap_domain_init_fc(const struct= scmi_protocol_handle *ph, return; =20 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); =20 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); =20 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); =20 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); =20 diff --git a/drivers/firmware/arm_scmi/protocols.h b/drivers/firmware/arm_s= cmi/protocols.h index d62c4469d1fd..8a96b78331f2 100644 --- a/drivers/firmware/arm_scmi/protocols.h +++ b/drivers/firmware/arm_scmi/protocols.h @@ -277,7 +277,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); --=20 2.47.0