From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D78C366DA5 for ; Thu, 13 Aug 2026 11:33:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786620818; cv=none; b=JZ+kyAqTrRmIgf851tTRGSkGFL4pauBXh8pLQ+EWMJuYJ3KwGf2Qi87FGwLT1bgBE+O7yu697GCe0trW9kLRpFVzq8D2P97zkblwSPISY8p6Ij/Ld01yHaSFByJ/B+IYapybkoFKvU4q6EiLZ627l4nYj3sz4ulfxQzfAq4TjaU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786620818; c=relaxed/simple; bh=zZFMv+Fq8kDwuL4BP9sI0lKBuxfnwYtoLEycsEvwtAs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z7Dg73RVCzETMs4d6p1fBdWsFKAjlSFV6965UbaFkwGWf9dNll5VrDBKFODe48ihqIT4mGh07iDzcF0PK+B1Pj/RelgkS2e2JAK2vgJvorJ/mcYmIw7SO7IrxkVDl/X2C2+/5aDnB70VCheqypG4DE+axLPo12qdL0/RAnxn6+E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HlCNDHEa; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HlCNDHEa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C83151F00A3A; Thu, 13 Aug 2026 11:33:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1786620816; bh=gLBT67Vs5tMBvKRvU4cvAuQPAam9TtJ+g4Ybhbk+t+w=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=HlCNDHEaWQciqty2cLSCcxAimZ/PBsANawGs0Qdzu+58FO3G1pYtGIV24MRmTvouA oDPRiFbtbm9oGM0gym2+eOVAYlBDVi406hnhAMJAXsocSfjIzefIxsmdtVrOjCseWq bakJEUwp3sAv7zNebeQwYtwz0NnxNWOSlvS9cH1wEoTe7Bz4wRkW7teBzMo0/w2Eqm RZ4CnJ2x8FXrp8nzaRdzkIaTLiCfmv6JrAxE67S/YFUSS48dL188FjswmFMkZO37TA t5hs2XdtC0xzOS+f6WmtBw0LCNcL/wkGO7d+FQIy4URjZ1TOzhdP0K9vMB7LrtUFF4 AjOJx26liwInQ== From: Sudeep Holla Date: Thu, 13 Aug 2026 12:33:00 +0100 Subject: [PATCH v3 5/9] firmware: arm_scmi: Pass protocol ID to chan_available() transport callback Precedence: bulk X-Mailing-List: arm-scmi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260813-acpi_scmi_pcc-v3-5-cb6b88b4ebb3@kernel.org> References: <20260813-acpi_scmi_pcc-v3-0-cb6b88b4ebb3@kernel.org> In-Reply-To: <20260813-acpi_scmi_pcc-v3-0-cb6b88b4ebb3@kernel.org> To: arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel-team@meta.com Cc: Cristian Marussi , Breno Leitao X-Mailer: b4 0.15.2 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 042867c28b88..1ab4543e0f4a 100644 --- a/drivers/firmware/arm_scmi/common.h +++ b/drivers/firmware/arm_scmi/common.h @@ -207,7 +207,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 9ad827c6a9ab..aad678db0f6e 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -2768,7 +2768,7 @@ static int scmi_chan_setup(struct scmi_info *info, struct fwnode_handle *fwnode, if (idr_find(idr, prot_id)) return -EEXIST; - 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 b692cae4ff25..56af2cb0f424 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 07d3affa0964..6022f74d28f3 100644 --- a/drivers/firmware/arm_scmi/transports/optee.c +++ b/drivers/firmware/arm_scmi/transports/optee.c @@ -314,7 +314,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 1079cd01190b..ee9e44468c1e 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) = NULL; diff --git a/drivers/firmware/arm_scmi/transports/virtio.c b/drivers/firmware/arm_scmi/transports/virtio.c index 6b060d61e0ca..3d608c8c4fe8 100644 --- a/drivers/firmware/arm_scmi/transports/virtio.c +++ b/drivers/firmware/arm_scmi/transports/virtio.c @@ -375,7 +375,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.43.0