From: Iuliana Prodan <iuliana.prodan@xxxxxxx> 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@xxxxxxx> Reviewed-by: Daniel Baluta <daniel.baluta@xxxxxxx> --- 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); +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; + 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; + /* + * If there is no IPC between the cores, + * then no need to initialize mailbox. + */ + if (priv->flags & REMOTE_SKIP_WAIT) + return 0; + 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; + 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; + dev_set_drvdata(dev, rproc); INIT_WORK(&priv->rproc_work, imx_dsp_rproc_vq_work); -- 2.17.1