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 AF2B5C3271E for ; Mon, 8 Jul 2024 09:26: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:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=SXQG57hnPq4vR2cgH9RSviOEYU6NM0gwOrjqwxJ31I4=; b=PhV68JtJAS22sljZpnJ+3m0+jc pfAwV9FNflbdnTUWjN5W6SRxgNUsv63wgg8xMsFf6fPVkADTAD9sH7tuiH6jokrsyqf+6idQHJk5m 4SlUWWZyAACsWByzUI1yJKXOkdbJw7qEr05or+dGm9G5Uj2Zt9v705Di49o62U29/SUZn8cEJCSXo SHTMSJFl/jvVMe9wckzwqhswUJ3Ayvpohk2cH5XPvsdA6/Pq4O0r/sabjwyLOHS8Jw7sCn+5xcG4/ OK+QoDKauTJB3iHPpxaWWLJPTIx8+UH6SpF5xlXw6BIv5FxmxKRccXmwHdVPSISib9WOGzM5gZkeQ HnPMHs0g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQkdu-00000003Gj9-1EGt; Mon, 08 Jul 2024 09:26:42 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sQkde-00000003GhP-0PxY for linux-arm-kernel@lists.infradead.org; Mon, 08 Jul 2024 09:26:28 +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 775031042; Mon, 8 Jul 2024 02:26:46 -0700 (PDT) Received: from pluto (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 47CC13F641; Mon, 8 Jul 2024 02:26:19 -0700 (PDT) Date: Mon, 8 Jul 2024 10:26:16 +0100 From: Cristian Marussi To: Nikunj Kela Cc: Cristian Marussi , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, arm-scmi@vger.kernel.org, sudeep.holla@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, quic_sibis@quicinc.com, ptosi@google.com, dan.carpenter@linaro.org, souvik.chakravarty@arm.com, Peng Fan Subject: Re: [PATCH 1/8] firmware: arm_scmi: Introduce setup_shmem_iomap Message-ID: References: <20240707002055.1835121-1-cristian.marussi@arm.com> <20240707002055.1835121-2-cristian.marussi@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240708_022627_166939_A72BCB0E X-CRM114-Status: GOOD ( 24.99 ) 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 On Sun, Jul 07, 2024 at 09:48:58AM -0700, Nikunj Kela wrote: > > On 7/6/2024 5:20 PM, Cristian Marussi wrote: > > From: Peng Fan > > > > To get the address of shmem could be generalized by introducing > > setup_shmem_iomap. Then the duplicated code in mailbox.c, optee.c > > and smc.c could be dropped. > > > > Signed-off-by: Peng Fan > > [ Cristian: make use of the new helper also in smc.c ] > > Signed-off-by: Cristian Marussi > > --- > > drivers/firmware/arm_scmi/common.h | 2 ++ > > drivers/firmware/arm_scmi/mailbox.c | 27 ++++------------------ > > drivers/firmware/arm_scmi/optee.c | 35 ++++------------------------ > > drivers/firmware/arm_scmi/shmem.c | 36 +++++++++++++++++++++++++++++ > > drivers/firmware/arm_scmi/smc.c | 23 +++--------------- > > 5 files changed, 49 insertions(+), 74 deletions(-) > > > > diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h > > index 4b8c5250cdb5..b4c217641e3a 100644 > > --- a/drivers/firmware/arm_scmi/common.h > > +++ b/drivers/firmware/arm_scmi/common.h > > @@ -327,6 +327,8 @@ bool shmem_poll_done(struct scmi_shared_mem __iomem *shmem, > > struct scmi_xfer *xfer); > > bool shmem_channel_free(struct scmi_shared_mem __iomem *shmem); > > bool shmem_channel_intr_enabled(struct scmi_shared_mem __iomem *shmem); > > +void __iomem *setup_shmem_iomap(struct scmi_chan_info *cinfo, struct device *dev, > > + bool tx); > > > > /* declarations for message passing transports */ > > struct scmi_msg_payld; > > diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c > > index 0219a12e3209..b0a579f31905 100644 > > --- a/drivers/firmware/arm_scmi/mailbox.c > > +++ b/drivers/firmware/arm_scmi/mailbox.c > > @@ -178,11 +178,8 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, > > const char *desc = tx ? "Tx" : "Rx"; > > struct device *cdev = cinfo->dev; > > struct scmi_mailbox *smbox; > > - struct device_node *shmem; > > - int ret, a2p_rx_chan, p2a_chan, p2a_rx_chan, idx = tx ? 0 : 1; > > + int ret, a2p_rx_chan, p2a_chan, p2a_rx_chan; > > struct mbox_client *cl; > > - resource_size_t size; > > - struct resource res; > > > > ret = mailbox_chan_validate(cdev, &a2p_rx_chan, &p2a_chan, &p2a_rx_chan); > > if (ret) > > @@ -195,25 +192,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, > > if (!smbox) > > return -ENOMEM; > > > > - shmem = of_parse_phandle(cdev->of_node, "shmem", idx); > > - if (!of_device_is_compatible(shmem, "arm,scmi-shmem")) { > > - of_node_put(shmem); > > - return -ENXIO; > > - } > > - > > - ret = of_address_to_resource(shmem, 0, &res); > > - of_node_put(shmem); > > - if (ret) { > > - dev_err(cdev, "failed to get SCMI %s shared memory\n", desc); > > - return ret; > > - } > > - > > - size = resource_size(&res); > > - smbox->shmem = devm_ioremap(dev, res.start, size); > > - if (!smbox->shmem) { > > - dev_err(dev, "failed to ioremap SCMI %s shared memory\n", desc); > > - return -EADDRNOTAVAIL; > > - } > > + smbox->shmem = setup_shmem_iomap(cinfo, dev, tx); > > + if (IS_ERR(smbox->shmem)) > > + return PTR_ERR(smbox->shmem); > > > > cl = &smbox->cl; > > cl->dev = cdev; > > diff --git a/drivers/firmware/arm_scmi/optee.c b/drivers/firmware/arm_scmi/optee.c > > index 4e7944b91e38..8abcd668108c 100644 > > --- a/drivers/firmware/arm_scmi/optee.c > > +++ b/drivers/firmware/arm_scmi/optee.c > > @@ -368,38 +368,11 @@ static int setup_dynamic_shmem(struct device *dev, struct scmi_optee_channel *ch > > static int setup_static_shmem(struct device *dev, struct scmi_chan_info *cinfo, > > struct scmi_optee_channel *channel) > > { > > - struct device_node *np; > > - resource_size_t size; > > - struct resource res; > > - int ret; > > - > > - np = of_parse_phandle(cinfo->dev->of_node, "shmem", 0); > > - if (!of_device_is_compatible(np, "arm,scmi-shmem")) { > > - ret = -ENXIO; > > - goto out; > > - } > > - > > - ret = of_address_to_resource(np, 0, &res); > > - if (ret) { > > - dev_err(dev, "Failed to get SCMI Tx shared memory\n"); > > - goto out; > > - } > > - > > - size = resource_size(&res); > > + channel->req.shmem = setup_shmem_iomap(cinfo, dev, true); > > + if (IS_ERR(channel->req.shmem)) > > + return PTR_ERR(channel->req.shmem); > > > > - channel->req.shmem = devm_ioremap(dev, res.start, size); > > - if (!channel->req.shmem) { > > - dev_err(dev, "Failed to ioremap SCMI Tx shared memory\n"); > > - ret = -EADDRNOTAVAIL; > > - goto out; > > - } > > - > > - ret = 0; > > - > > -out: > > - of_node_put(np); > > - > > - return ret; > > + return 0; > > } > > > > static int setup_shmem(struct device *dev, struct scmi_chan_info *cinfo, > > diff --git a/drivers/firmware/arm_scmi/shmem.c b/drivers/firmware/arm_scmi/shmem.c > > index b74e5a740f2c..c31f188d74ef 100644 > > --- a/drivers/firmware/arm_scmi/shmem.c > > +++ b/drivers/firmware/arm_scmi/shmem.c > > @@ -7,6 +7,8 @@ > > > > #include > > #include > > +#include > > +#include > > #include > > #include > > > > @@ -133,3 +135,37 @@ bool shmem_channel_intr_enabled(struct scmi_shared_mem __iomem *shmem) > > { > > return ioread32(&shmem->flags) & SCMI_SHMEM_FLAG_INTR_ENABLED; > > } > > + > > +void *__iomem > > +setup_shmem_iomap(struct scmi_chan_info *cinfo, struct device *dev, bool tx) > > +{ > > + const char *desc = tx ? "Tx" : "Rx"; > > + int ret, idx = tx ? 0 : 1; > > + struct device *cdev = cinfo->dev; > > + struct device_node *shmem; > > + resource_size_t size; > > + struct resource res; > > + void __iomem *addr; > > + > > + shmem = of_parse_phandle(cdev->of_node, "shmem", idx); > > + if (!of_device_is_compatible(shmem, "arm,scmi-shmem")) { > > + of_node_put(shmem); > > + return ERR_PTR(-ENXIO); > > + } > > + > > + ret = of_address_to_resource(shmem, 0, &res); > > + of_node_put(shmem); > > + if (ret) { > > + dev_err(cdev, "failed to get SCMI %s shared memory\n", desc); > > + return ERR_PTR(ret); > > + } > > + > > + size = resource_size(&res); > > + addr = devm_ioremap(dev, res.start, size); > > + if (!addr) { > > + dev_err(dev, "failed to ioremap SCMI %s shared memory\n", desc); > > + return ERR_PTR(-EADDRNOTAVAIL); > > + } > > + > > + return addr; > > +} > > diff --git a/drivers/firmware/arm_scmi/smc.c b/drivers/firmware/arm_scmi/smc.c > > index 39936e1dd30e..a640a4312472 100644 > > --- a/drivers/firmware/arm_scmi/smc.c > > +++ b/drivers/firmware/arm_scmi/smc.c > > @@ -132,7 +132,6 @@ static int smc_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, > > struct scmi_smc *scmi_info; > > resource_size_t size; > > struct resource res; > > - struct device_node *np; > > u32 func_id; > > int ret; > > > > @@ -143,25 +142,9 @@ static int smc_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, > > if (!scmi_info) > > return -ENOMEM; > > > > - np = of_parse_phandle(cdev->of_node, "shmem", 0); > > - if (!of_device_is_compatible(np, "arm,scmi-shmem")) { > > - of_node_put(np); > > - return -ENXIO; > > - } > > - > > - ret = of_address_to_resource(np, 0, &res); > > - of_node_put(np); > > - if (ret) { > > - dev_err(cdev, "failed to get SCMI Tx shared memory\n"); > > - return ret; > > - } > > - > > - size = resource_size(&res); > > Hi Peng/Cristian, > > This will break Qualcomm smc transport as we need shmem 'size' to get to > the cap-id.  > ...ops..sorry....that's on me I quickly extended Peng patch to address also SMC and missed this...I'l review... Thanks for havig a look ! Cristian