@@ -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);