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 84F42CCD1AB for ; Fri, 17 Oct 2025 13:24:28 +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:To:In-Reply-To:References: Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date: From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FW8U/stRq896bfaih6XFEivdCrOJyVrwvUR/+aEWILo=; b=sgxZYk1hh+iXhIBDTukvq/pzQj FcHdEF6a5JfspNq/B7FTr8guqP3D7Z3K1sUNfxkhXomyZc3JXW6YusfHa6yLmzhO6VKOgxa+zHp6D k4r5NaE1nbdAktqconRO3GAb7GUue/pjpqjQQZdjC8q2giORN6pQgTjqJLmRHlTeAhR2S3bjpc11C V2qpWKloJkct7eI0TJjK3HsLsCvPd5NjT5Q8/7G3JXn3nTluXU7+XK18wq8e0asPZljWhRxIqAtei v3iowKbv+2SOU0apNGBcmIjr/em5S7YoGO6VmNC6D2iQKGwO5nO4kKOAEAYe6NXPhmwmRXql7AWx0 t+D0AWvw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v9kRS-00000007uSt-0I3k; Fri, 17 Oct 2025 13:24:22 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v9kRP-00000007uQN-23JA for linux-arm-kernel@bombadil.infradead.org; Fri, 17 Oct 2025 13:24:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Cc:Content-ID:Content-Description; bh=FW8U/stRq896bfaih6XFEivdCrOJyVrwvUR/+aEWILo=; b=lnbw9XqO+AwLsjQL1x4EfDOw8B VXniN9ykp+GVREdcgXp0nvnCIOYyaLXbAv0N5At7clsorTTa5XRhcyNtLj4BWrk0fu9lI4EzWHfuW QDbUhD1VhVvg8IOSkHSR8ZLIzXC/khEilxDnCiFW3vL19QEyUUqqrwGOaUysczZBXNjhtUz7rQtXU ROSGp09GxZ/okpATqTvnvrUkySGQzRIU4eHsPE9Irpgekh9CvbNjB2DCEfDBBuwyn17VR5qU9DfVh YmQSPFJh5iyNfLMjCnNRgACiY/W3JI2w/wBsWrlF5BiorvKQdVwQT/ywiMjThOi0u3RMfmFgT3QEh nDI4MGHQ==; Received: from foss.arm.com ([217.140.110.172]) by desiato.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v9kRM-00000007c17-1b1T for linux-arm-kernel@lists.infradead.org; Fri, 17 Oct 2025 13:24:18 +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 539AF2720; Fri, 17 Oct 2025 06:24:07 -0700 (PDT) Received: from e133711.arm.com (e133711.arm.com [10.1.196.55]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8088A3F66E; Fri, 17 Oct 2025 06:24:14 -0700 (PDT) From: Sudeep Holla Date: Fri, 17 Oct 2025 14:23:48 +0100 Subject: [PATCH 5/8] firmware: arm_scmi: Pass protocol ID to chan_available() transport callback MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251017-acpi_scmi_pcc-v1-5-0adbab7709d9@arm.com> References: <20251017-acpi_scmi_pcc-v1-0-0adbab7709d9@arm.com> In-Reply-To: <20251017-acpi_scmi_pcc-v1-0-0adbab7709d9@arm.com> To: Cristian Marussi , arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Sudeep Holla X-Mailer: b4 0.14.3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251017_142416_738279_EB11C7ED X-CRM114-Status: GOOD ( 12.57 ) 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 Extend the SCMI transport_ops chan_available() callback to include the protocol ID (prot_id) as an argument. This allows transports to determine channel availability based on the specific protocol being used, improving flexibility in platforms that share transport channels across multiple protocols. This will be useful when ACPI PCC transport gets added. Updated all existing users and definitions of chan_available() in SCMI core and transport drivers (mailbox, optee, etc.) accordingly. No functional change. Signed-off-by: Sudeep Holla --- drivers/firmware/arm_scmi/common.h | 3 ++- drivers/firmware/arm_scmi/driver.c | 2 +- drivers/firmware/arm_scmi/transports/mailbox.c | 3 ++- drivers/firmware/arm_scmi/transports/optee.c | 3 ++- drivers/firmware/arm_scmi/transports/smc.c | 3 ++- drivers/firmware/arm_scmi/transports/virtio.c | 3 ++- 6 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h index 4e30283036e5..11831da27d31 100644 --- a/drivers/firmware/arm_scmi/common.h +++ b/drivers/firmware/arm_scmi/common.h @@ -204,7 +204,8 @@ struct scmi_chan_info { * @poll_done: Callback to poll transfer status */ struct scmi_transport_ops { - bool (*chan_available)(struct fwnode_handle *fwnode, int idx); + bool (*chan_available)(struct fwnode_handle *fwnode, int prot_id, + int idx); int (*chan_setup)(struct scmi_chan_info *cinfo, struct device *dev, bool tx); int (*chan_free)(int id, void *p, void *data); diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index 148b9a13d43f..ac51726f24db 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -2680,7 +2680,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct fwnode_handle *fwnode, idx = tx ? 0 : 1; idr = tx ? &info->tx_idr : &info->rx_idr; - if (!info->desc->ops->chan_available(fwnode, idx)) { + if (!info->desc->ops->chan_available(fwnode, prot_id, idx)) { cinfo = idr_find(idr, SCMI_PROTOCOL_BASE); if (unlikely(!cinfo)) /* Possible only if platform has no Rx */ return -EINVAL; diff --git a/drivers/firmware/arm_scmi/transports/mailbox.c b/drivers/firmware/arm_scmi/transports/mailbox.c index bc27505879af..76e609e674e5 100644 --- a/drivers/firmware/arm_scmi/transports/mailbox.c +++ b/drivers/firmware/arm_scmi/transports/mailbox.c @@ -77,7 +77,8 @@ static void rx_callback(struct mbox_client *cl, void *m) core->shmem->read_header(smbox->shmem), NULL); } -static bool mailbox_chan_available(struct fwnode_handle *fwnode, int idx) +static bool +mailbox_chan_available(struct fwnode_handle *fwnode, int prot_id, int idx) { int num_mb; struct device_node *of_node = to_of_node(fwnode); diff --git a/drivers/firmware/arm_scmi/transports/optee.c b/drivers/firmware/arm_scmi/transports/optee.c index 846d28472923..d7d72138d6cc 100644 --- a/drivers/firmware/arm_scmi/transports/optee.c +++ b/drivers/firmware/arm_scmi/transports/optee.c @@ -312,7 +312,8 @@ static int invoke_process_msg_channel(struct scmi_optee_channel *channel, size_t return 0; } -static bool scmi_optee_chan_available(struct fwnode_handle *fwnode, int idx) +static bool +scmi_optee_chan_available(struct fwnode_handle *fwnode, int prot_id, int idx) { u32 channel_id; struct device_node *of_node = to_of_node(fwnode); diff --git a/drivers/firmware/arm_scmi/transports/smc.c b/drivers/firmware/arm_scmi/transports/smc.c index 75e539578670..075be0b9921a 100644 --- a/drivers/firmware/arm_scmi/transports/smc.c +++ b/drivers/firmware/arm_scmi/transports/smc.c @@ -84,7 +84,8 @@ static irqreturn_t smc_msg_done_isr(int irq, void *data) return IRQ_HANDLED; } -static bool smc_chan_available(struct fwnode_handle *fwnode, int idx) +static bool +smc_chan_available(struct fwnode_handle *fwnode, int prot_id, int idx) { struct device_node *of_node = to_of_node(fwnode); struct device_node *np __free(device_node) = diff --git a/drivers/firmware/arm_scmi/transports/virtio.c b/drivers/firmware/arm_scmi/transports/virtio.c index cb749ac7ab46..7137165dc204 100644 --- a/drivers/firmware/arm_scmi/transports/virtio.c +++ b/drivers/firmware/arm_scmi/transports/virtio.c @@ -373,7 +373,8 @@ static unsigned int virtio_get_max_msg(struct scmi_chan_info *base_cinfo) return vioch->max_msg; } -static bool virtio_chan_available(struct fwnode_handle *fwnode, int idx) +static bool +virtio_chan_available(struct fwnode_handle *fwnode, int prot_id, int idx) { struct scmi_vio_channel *channels, *vioch = NULL; -- 2.34.1