Commit d9dbd714 authored by Peng Fan's avatar Peng Fan Committed by Mathieu Poirier

remoteproc: imx_rproc: Allow setting of the mailbox transmit mode

Current mailbox is blocking by default, but there are cases where we don't
need to wait for a response.

Linux just needs to send data to the remote processor, so let's
allow tx_block mode to be set (true/false) depending on usecase.

No functional changes.
Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Reviewed-by: default avatarDaniel Baluta <daniel.baluta@nxp.com>
Link: https://lore.kernel.org/r/20240822-imx_rproc-v3-1-6d943723945d@nxp.comSigned-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
parent 8fa052c2
...@@ -90,7 +90,7 @@ struct imx_rproc_mem { ...@@ -90,7 +90,7 @@ struct imx_rproc_mem {
#define ATT_CORE_MASK 0xffff #define ATT_CORE_MASK 0xffff
#define ATT_CORE(I) BIT((I)) #define ATT_CORE(I) BIT((I))
static int imx_rproc_xtr_mbox_init(struct rproc *rproc); static int imx_rproc_xtr_mbox_init(struct rproc *rproc, bool tx_block);
static void imx_rproc_free_mbox(struct rproc *rproc); static void imx_rproc_free_mbox(struct rproc *rproc);
struct imx_rproc { struct imx_rproc {
...@@ -369,7 +369,7 @@ static int imx_rproc_start(struct rproc *rproc) ...@@ -369,7 +369,7 @@ static int imx_rproc_start(struct rproc *rproc)
struct arm_smccc_res res; struct arm_smccc_res res;
int ret; int ret;
ret = imx_rproc_xtr_mbox_init(rproc); ret = imx_rproc_xtr_mbox_init(rproc, true);
if (ret) if (ret)
return ret; return ret;
...@@ -629,7 +629,7 @@ static void imx_rproc_kick(struct rproc *rproc, int vqid) ...@@ -629,7 +629,7 @@ static void imx_rproc_kick(struct rproc *rproc, int vqid)
static int imx_rproc_attach(struct rproc *rproc) static int imx_rproc_attach(struct rproc *rproc)
{ {
return imx_rproc_xtr_mbox_init(rproc); return imx_rproc_xtr_mbox_init(rproc, true);
} }
static int imx_rproc_detach(struct rproc *rproc) static int imx_rproc_detach(struct rproc *rproc)
...@@ -794,7 +794,7 @@ static void imx_rproc_rx_callback(struct mbox_client *cl, void *msg) ...@@ -794,7 +794,7 @@ static void imx_rproc_rx_callback(struct mbox_client *cl, void *msg)
queue_work(priv->workqueue, &priv->rproc_work); queue_work(priv->workqueue, &priv->rproc_work);
} }
static int imx_rproc_xtr_mbox_init(struct rproc *rproc) static int imx_rproc_xtr_mbox_init(struct rproc *rproc, bool tx_block)
{ {
struct imx_rproc *priv = rproc->priv; struct imx_rproc *priv = rproc->priv;
struct device *dev = priv->dev; struct device *dev = priv->dev;
...@@ -817,7 +817,7 @@ static int imx_rproc_xtr_mbox_init(struct rproc *rproc) ...@@ -817,7 +817,7 @@ static int imx_rproc_xtr_mbox_init(struct rproc *rproc)
cl = &priv->cl; cl = &priv->cl;
cl->dev = dev; cl->dev = dev;
cl->tx_block = true; cl->tx_block = tx_block;
cl->tx_tout = 100; cl->tx_tout = 100;
cl->knows_txdone = false; cl->knows_txdone = false;
cl->rx_callback = imx_rproc_rx_callback; cl->rx_callback = imx_rproc_rx_callback;
...@@ -1083,7 +1083,7 @@ static int imx_rproc_probe(struct platform_device *pdev) ...@@ -1083,7 +1083,7 @@ static int imx_rproc_probe(struct platform_device *pdev)
INIT_WORK(&priv->rproc_work, imx_rproc_vq_work); INIT_WORK(&priv->rproc_work, imx_rproc_vq_work);
ret = imx_rproc_xtr_mbox_init(rproc); ret = imx_rproc_xtr_mbox_init(rproc, true);
if (ret) if (ret)
goto err_put_wkq; goto err_put_wkq;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment