All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cristian Marussi <cristian.marussi@arm.com>
To: Nikunj Kela <quic_nkela@quicinc.com>
Cc: Cristian Marussi <cristian.marussi@arm.com>,
	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 <peng.fan@nxp.com>
Subject: Re: [PATCH 1/8] firmware: arm_scmi: Introduce setup_shmem_iomap
Date: Mon, 8 Jul 2024 10:26:16 +0100	[thread overview]
Message-ID: <ZouwuI72TUxUGv1S@pluto> (raw)
In-Reply-To: <aac97774-29e2-453a-995e-287b62e3e836@quicinc.com>

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 <peng.fan@nxp.com>
> >
> > 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 <peng.fan@nxp.com>
> > [ Cristian: make use of the new helper also in smc.c ]
> > Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
> > ---
> >  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 <linux/ktime.h>
> >  #include <linux/io.h>
> > +#include <linux/of.h>
> > +#include <linux/of_address.h>
> >  #include <linux/processor.h>
> >  #include <linux/types.h>
> >  
> > @@ -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

  reply	other threads:[~2024-07-08  9:26 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-07  0:20 [PATCH 0/8] Make SCMI transport as standalone drivers Cristian Marussi
2024-07-07  0:20 ` [PATCH 1/8] firmware: arm_scmi: Introduce setup_shmem_iomap Cristian Marussi
2024-07-07 16:48   ` Nikunj Kela
2024-07-08  9:26     ` Cristian Marussi [this message]
2024-07-08  2:19   ` kernel test robot
2024-07-07  0:20 ` [PATCH 2/8] firmware: arm_scmi: Introduce packet handling helpers Cristian Marussi
2024-07-08  3:59   ` kernel test robot
2024-07-07  0:20 ` [PATCH 3/8] firmware: arm_scmi: Add support for standalone transport drivers Cristian Marussi
2024-07-07  0:20 ` [PATCH 4/8] firmware: arm_scmi: Make MBOX transport a standalone driver Cristian Marussi
2024-07-07  0:20 ` [PATCH 5/8] firmware: arm_scmi: Make SMC " Cristian Marussi
2024-07-07 16:03   ` kernel test robot
2024-07-07 16:52   ` Nikunj Kela
2024-07-08 14:27     ` Cristian Marussi
2024-07-08 15:23       ` Nikunj Kela
2024-07-08 15:47         ` Cristian Marussi
2024-07-08 17:59           ` Nikunj Kela
2024-07-09 10:33             ` Cristian Marussi
2024-10-15 16:31             ` Cristian Marussi
2024-07-09 12:45   ` kernel test robot
2024-07-10  3:37   ` kernel test robot
2024-07-07  0:20 ` [PATCH 6/8] firmware: arm_scmi: Make OPTEE " Cristian Marussi
2024-07-09  2:21   ` Dan Carpenter
2024-07-09  9:55     ` Cristian Marussi
2024-07-07  0:20 ` [PATCH 7/8] firmware: arm_scmi: Make VirtIO " Cristian Marussi
2024-07-08  5:53   ` kernel test robot
2024-07-07  0:20 ` [PATCH 8/8] firmware: arm_scmi: Remove legacy transport-layer code Cristian Marussi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZouwuI72TUxUGv1S@pluto \
    --to=cristian.marussi@arm.com \
    --cc=arm-scmi@vger.kernel.org \
    --cc=dan.carpenter@linaro.org \
    --cc=etienne.carriere@foss.st.com \
    --cc=f.fainelli@gmail.com \
    --cc=james.quinlan@broadcom.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.simek@amd.com \
    --cc=peng.fan@nxp.com \
    --cc=peng.fan@oss.nxp.com \
    --cc=ptosi@google.com \
    --cc=quic_nkela@quicinc.com \
    --cc=quic_sibis@quicinc.com \
    --cc=souvik.chakravarty@arm.com \
    --cc=sudeep.holla@arm.com \
    --cc=vincent.guittot@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.