All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: "Iuliana Prodan (OSS)" <iuliana.prodan@oss.nxp.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	"S.J. Wang" <shengjiu.wang@nxp.com>,
	Fabio Estevam <festevam@gmail.com>,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Iuliana Prodan <iuliana.prodan@nxp.com>,
	linux-imx <linux-imx@nxp.com>,
	linux-remoteproc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Pengutronix Kernel Team <kernel@pengutronix.de>
Subject: Re: [RESEND PATCH v4] remoteproc: imx_dsp_rproc: add module parameter to ignore ready flag from remote processor
Date: Wed, 15 Feb 2023 10:58:10 -0700	[thread overview]
Message-ID: <20230215175810.GA441246@p14s> (raw)
In-Reply-To: <20230214163744.16377-1-iuliana.prodan@oss.nxp.com>

Hi Iuliana,

First and foremost, you were correct to remind me of this patch - it had slipped
through.  I got mixed up with your other patch[1], which has the same title
preprend and the same revision.  That one is on my list of patches to review and
I should get to it later this week or early next week.

Please see below for comments on this patch.

[1]. [PATCH v4] remoteproc: imx_dsp_rproc: add custom memory copy implementation for i.MX DSP Cores

On Tue, Feb 14, 2023 at 06:37:44PM +0200, Iuliana Prodan (OSS) wrote:
> From: Iuliana Prodan <iuliana.prodan@nxp.com>
> 
> There are cases when we want to test a simple "hello world"
> application on the DSP and we don't have IPC between the cores.
> Therefore, do not wait for a confirmation from the remote processor
> at start.
> 
> Added "ignore_dsp_ready" flag while inserting the module to ignore
> remote processor reply after start.
> By default, this is off - do not ignore reply from rproc.
> 
> Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
> ---
> Changes since v3
> - do not instantiate static var to 0, this is done by default
> - do not initialize mailbox if not IPC between the core
> 
> Changes since v2
> - s/ignoreready/ignore_dsp_ready
> 
> Changes since v1
> - change BIT(31) to BIT(1) for REMOTE_SKIP_WAIT
> 
> ---
>  drivers/remoteproc/imx_dsp_rproc.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/remoteproc/imx_dsp_rproc.c b/drivers/remoteproc/imx_dsp_rproc.c
> index 95da1cbefacf..fb69f4e8ee96 100644
> --- a/drivers/remoteproc/imx_dsp_rproc.c
> +++ b/drivers/remoteproc/imx_dsp_rproc.c
> @@ -26,9 +26,18 @@
>  #include "remoteproc_elf_helpers.h"
>  #include "remoteproc_internal.h"
>  
> +/*
> + * Module parameters
> + */
> +static unsigned int imx_dsp_rproc_ignore_ready;
> +module_param_named(ignore_dsp_ready, imx_dsp_rproc_ignore_ready, int, 0644);

This patch is about introducing a mode where the mailboxes aren't used... Why
not simply name the parameter "no_mailboxes"?

> +MODULE_PARM_DESC(ignore_dsp_ready,
> +		 "Ignore remote proc reply after start, default is 0 (off).");
> +
>  #define DSP_RPROC_CLK_MAX			5
>  
>  #define REMOTE_IS_READY				BIT(0)
> +#define REMOTE_SKIP_WAIT			BIT(1)
>  #define REMOTE_READY_WAIT_MAX_RETRIES		500
>  
>  /* att flags */
> @@ -282,6 +291,10 @@ static int imx_dsp_rproc_ready(struct rproc *rproc)
>  	struct imx_dsp_rproc *priv = rproc->priv;
>  	int i;
>  
> +	/* No IPC between the cores */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return 0;
> +

This isn't needed since priv->rxdb_ch is NULL when mailboxes have not been
initialized.

>  	if (!priv->rxdb_ch)
>  		return 0;
>  
> @@ -503,6 +516,13 @@ static int imx_dsp_rproc_mbox_init(struct imx_dsp_rproc *priv)
>  	struct mbox_client *cl;
>  	int ret;

I suggest to rename imx_dsp_rproc_mbox_init() to imx_dsp_rproc_mbox_alloc(),
introduce a new function called imx_dsp_rproc_mbox_no_alloc() that simply
returns 0 and make imx_dsp_rproc_mbox_init() a function pointer.

See imx_dsp_rproc_probe() for the rest of the solution...

>  
> +	/*
> +	 * If there is no IPC between the cores,
> +	 * then no need to initialize mailbox.
> +	 */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return 0;

Remove this.

> +
>  	if (!of_get_property(dev->of_node, "mbox-names", NULL))
>  		return 0;
>  
> @@ -562,6 +582,10 @@ static int imx_dsp_rproc_mbox_init(struct imx_dsp_rproc *priv)
>  
>  static void imx_dsp_rproc_free_mbox(struct imx_dsp_rproc *priv)
>  {
> +	/* No IPC between the cores */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return;
> +

This isn't needed since mbox_free_channel() is able to handle a NULL parameter,
which is the case when imx_dsp_rproc_mbox_init() hasn't been called.

>  	mbox_free_channel(priv->tx_ch);
>  	mbox_free_channel(priv->rx_ch);
>  	mbox_free_channel(priv->rxdb_ch);
> @@ -903,6 +927,9 @@ static int imx_dsp_rproc_probe(struct platform_device *pdev)
>  	priv->rproc = rproc;
>  	priv->dsp_dcfg = dsp_dcfg;
>  
> +	if (imx_dsp_rproc_ignore_ready)
> +		priv->flags |= REMOTE_SKIP_WAIT;
> +

        if (no_mailboxes)
                imx_dsp_rproc_mbox_init = imx_dsp_rproc_mbox_no_alloc;
        else
                imx_dsp_rproc_mbox_init = imx_dsp_rproc_mbox_alloc;

That way we don't introduce a new flag, there is no new conditionals peppered
throughout the code and calls to imx_dsp_rproc_mbox_init() remain unchainged.

Thanks,
Mathieu

>  	dev_set_drvdata(dev, rproc);
>  
>  	INIT_WORK(&priv->rproc_work, imx_dsp_rproc_vq_work);
> -- 
> 2.17.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: "Iuliana Prodan (OSS)" <iuliana.prodan@oss.nxp.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	"S.J. Wang" <shengjiu.wang@nxp.com>,
	Fabio Estevam <festevam@gmail.com>,
	Daniel Baluta <daniel.baluta@nxp.com>,
	Iuliana Prodan <iuliana.prodan@nxp.com>,
	linux-imx <linux-imx@nxp.com>,
	linux-remoteproc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Pengutronix Kernel Team <kernel@pengutronix.de>
Subject: Re: [RESEND PATCH v4] remoteproc: imx_dsp_rproc: add module parameter to ignore ready flag from remote processor
Date: Wed, 15 Feb 2023 10:58:10 -0700	[thread overview]
Message-ID: <20230215175810.GA441246@p14s> (raw)
In-Reply-To: <20230214163744.16377-1-iuliana.prodan@oss.nxp.com>

Hi Iuliana,

First and foremost, you were correct to remind me of this patch - it had slipped
through.  I got mixed up with your other patch[1], which has the same title
preprend and the same revision.  That one is on my list of patches to review and
I should get to it later this week or early next week.

Please see below for comments on this patch.

[1]. [PATCH v4] remoteproc: imx_dsp_rproc: add custom memory copy implementation for i.MX DSP Cores

On Tue, Feb 14, 2023 at 06:37:44PM +0200, Iuliana Prodan (OSS) wrote:
> From: Iuliana Prodan <iuliana.prodan@nxp.com>
> 
> There are cases when we want to test a simple "hello world"
> application on the DSP and we don't have IPC between the cores.
> Therefore, do not wait for a confirmation from the remote processor
> at start.
> 
> Added "ignore_dsp_ready" flag while inserting the module to ignore
> remote processor reply after start.
> By default, this is off - do not ignore reply from rproc.
> 
> Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
> ---
> Changes since v3
> - do not instantiate static var to 0, this is done by default
> - do not initialize mailbox if not IPC between the core
> 
> Changes since v2
> - s/ignoreready/ignore_dsp_ready
> 
> Changes since v1
> - change BIT(31) to BIT(1) for REMOTE_SKIP_WAIT
> 
> ---
>  drivers/remoteproc/imx_dsp_rproc.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/remoteproc/imx_dsp_rproc.c b/drivers/remoteproc/imx_dsp_rproc.c
> index 95da1cbefacf..fb69f4e8ee96 100644
> --- a/drivers/remoteproc/imx_dsp_rproc.c
> +++ b/drivers/remoteproc/imx_dsp_rproc.c
> @@ -26,9 +26,18 @@
>  #include "remoteproc_elf_helpers.h"
>  #include "remoteproc_internal.h"
>  
> +/*
> + * Module parameters
> + */
> +static unsigned int imx_dsp_rproc_ignore_ready;
> +module_param_named(ignore_dsp_ready, imx_dsp_rproc_ignore_ready, int, 0644);

This patch is about introducing a mode where the mailboxes aren't used... Why
not simply name the parameter "no_mailboxes"?

> +MODULE_PARM_DESC(ignore_dsp_ready,
> +		 "Ignore remote proc reply after start, default is 0 (off).");
> +
>  #define DSP_RPROC_CLK_MAX			5
>  
>  #define REMOTE_IS_READY				BIT(0)
> +#define REMOTE_SKIP_WAIT			BIT(1)
>  #define REMOTE_READY_WAIT_MAX_RETRIES		500
>  
>  /* att flags */
> @@ -282,6 +291,10 @@ static int imx_dsp_rproc_ready(struct rproc *rproc)
>  	struct imx_dsp_rproc *priv = rproc->priv;
>  	int i;
>  
> +	/* No IPC between the cores */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return 0;
> +

This isn't needed since priv->rxdb_ch is NULL when mailboxes have not been
initialized.

>  	if (!priv->rxdb_ch)
>  		return 0;
>  
> @@ -503,6 +516,13 @@ static int imx_dsp_rproc_mbox_init(struct imx_dsp_rproc *priv)
>  	struct mbox_client *cl;
>  	int ret;

I suggest to rename imx_dsp_rproc_mbox_init() to imx_dsp_rproc_mbox_alloc(),
introduce a new function called imx_dsp_rproc_mbox_no_alloc() that simply
returns 0 and make imx_dsp_rproc_mbox_init() a function pointer.

See imx_dsp_rproc_probe() for the rest of the solution...

>  
> +	/*
> +	 * If there is no IPC between the cores,
> +	 * then no need to initialize mailbox.
> +	 */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return 0;

Remove this.

> +
>  	if (!of_get_property(dev->of_node, "mbox-names", NULL))
>  		return 0;
>  
> @@ -562,6 +582,10 @@ static int imx_dsp_rproc_mbox_init(struct imx_dsp_rproc *priv)
>  
>  static void imx_dsp_rproc_free_mbox(struct imx_dsp_rproc *priv)
>  {
> +	/* No IPC between the cores */
> +	if (priv->flags & REMOTE_SKIP_WAIT)
> +		return;
> +

This isn't needed since mbox_free_channel() is able to handle a NULL parameter,
which is the case when imx_dsp_rproc_mbox_init() hasn't been called.

>  	mbox_free_channel(priv->tx_ch);
>  	mbox_free_channel(priv->rx_ch);
>  	mbox_free_channel(priv->rxdb_ch);
> @@ -903,6 +927,9 @@ static int imx_dsp_rproc_probe(struct platform_device *pdev)
>  	priv->rproc = rproc;
>  	priv->dsp_dcfg = dsp_dcfg;
>  
> +	if (imx_dsp_rproc_ignore_ready)
> +		priv->flags |= REMOTE_SKIP_WAIT;
> +

        if (no_mailboxes)
                imx_dsp_rproc_mbox_init = imx_dsp_rproc_mbox_no_alloc;
        else
                imx_dsp_rproc_mbox_init = imx_dsp_rproc_mbox_alloc;

That way we don't introduce a new flag, there is no new conditionals peppered
throughout the code and calls to imx_dsp_rproc_mbox_init() remain unchainged.

Thanks,
Mathieu

>  	dev_set_drvdata(dev, rproc);
>  
>  	INIT_WORK(&priv->rproc_work, imx_dsp_rproc_vq_work);
> -- 
> 2.17.1
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-02-15 17:58 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-14 16:37 [RESEND PATCH v4] remoteproc: imx_dsp_rproc: add module parameter to ignore ready flag from remote processor Iuliana Prodan (OSS)
2023-02-14 16:37 ` Iuliana Prodan (OSS)
2023-02-14 20:25 ` Mathieu Poirier
2023-02-14 20:25   ` Mathieu Poirier
2023-02-14 22:21   ` Iuliana Prodan
2023-02-14 22:21     ` Iuliana Prodan
2023-02-15 17:58 ` Mathieu Poirier [this message]
2023-02-15 17:58   ` Mathieu Poirier

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=20230215175810.GA441246@p14s \
    --to=mathieu.poirier@linaro.org \
    --cc=andersson@kernel.org \
    --cc=daniel.baluta@nxp.com \
    --cc=festevam@gmail.com \
    --cc=iuliana.prodan@nxp.com \
    --cc=iuliana.prodan@oss.nxp.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=shengjiu.wang@nxp.com \
    /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.