Commit 315d2e56 authored by Peng Fan's avatar Peng Fan Committed by Jassi Brar

mailbox: imx: introduce rxdb callback

Add a rxdb callback to prepare for i.MX8 SECO MU rxdb which has a
different logic.
Signed-off-by: default avatarPeng Fan <peng.fan@nxp.com>
Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
parent 960dcc15
...@@ -93,6 +93,7 @@ enum imx_mu_type { ...@@ -93,6 +93,7 @@ enum imx_mu_type {
struct imx_mu_dcfg { struct imx_mu_dcfg {
int (*tx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data); int (*tx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data);
int (*rx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp); int (*rx)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
int (*rxdb)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
void (*init)(struct imx_mu_priv *priv); void (*init)(struct imx_mu_priv *priv);
enum imx_mu_type type; enum imx_mu_type type;
u32 xTR; /* Transmit Register0 */ u32 xTR; /* Transmit Register0 */
...@@ -179,6 +180,16 @@ static int imx_mu_generic_rx(struct imx_mu_priv *priv, ...@@ -179,6 +180,16 @@ static int imx_mu_generic_rx(struct imx_mu_priv *priv,
return 0; return 0;
} }
static int imx_mu_generic_rxdb(struct imx_mu_priv *priv,
struct imx_mu_con_priv *cp)
{
imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx),
priv->dcfg->xSR[IMX_MU_GSR]);
mbox_chan_received_data(cp->chan, NULL);
return 0;
}
static int imx_mu_specific_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data) static int imx_mu_specific_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp, void *data)
{ {
u32 *arg = data; u32 *arg = data;
...@@ -329,9 +340,7 @@ static irqreturn_t imx_mu_isr(int irq, void *p) ...@@ -329,9 +340,7 @@ static irqreturn_t imx_mu_isr(int irq, void *p)
priv->dcfg->rx(priv, cp); priv->dcfg->rx(priv, cp);
} else if ((val == IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) && } else if ((val == IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) &&
(cp->type == IMX_MU_TYPE_RXDB)) { (cp->type == IMX_MU_TYPE_RXDB)) {
imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx), priv->dcfg->rxdb(priv, cp);
priv->dcfg->xSR[IMX_MU_GSR]);
mbox_chan_received_data(chan, NULL);
} else { } else {
dev_warn_ratelimited(priv->dev, "Not handled interrupt\n"); dev_warn_ratelimited(priv->dev, "Not handled interrupt\n");
return IRQ_NONE; return IRQ_NONE;
...@@ -639,6 +648,7 @@ static int imx_mu_remove(struct platform_device *pdev) ...@@ -639,6 +648,7 @@ static int imx_mu_remove(struct platform_device *pdev)
static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = { static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {
.tx = imx_mu_generic_tx, .tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx, .rx = imx_mu_generic_rx,
.rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic, .init = imx_mu_init_generic,
.xTR = 0x0, .xTR = 0x0,
.xRR = 0x10, .xRR = 0x10,
...@@ -649,6 +659,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = { ...@@ -649,6 +659,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {
static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = { static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = {
.tx = imx_mu_generic_tx, .tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx, .rx = imx_mu_generic_rx,
.rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic, .init = imx_mu_init_generic,
.xTR = 0x20, .xTR = 0x20,
.xRR = 0x40, .xRR = 0x40,
...@@ -659,7 +670,9 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = { ...@@ -659,7 +670,9 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = {
static const struct imx_mu_dcfg imx_mu_cfg_imx8ulp = { static const struct imx_mu_dcfg imx_mu_cfg_imx8ulp = {
.tx = imx_mu_generic_tx, .tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx, .rx = imx_mu_generic_rx,
.rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic, .init = imx_mu_init_generic,
.rxdb = imx_mu_generic_rxdb,
.type = IMX_MU_V2, .type = IMX_MU_V2,
.xTR = 0x200, .xTR = 0x200,
.xRR = 0x280, .xRR = 0x280,
...@@ -682,6 +695,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx8_scu = { ...@@ -682,6 +695,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx8_scu = {
.tx = imx_mu_specific_tx, .tx = imx_mu_specific_tx,
.rx = imx_mu_specific_rx, .rx = imx_mu_specific_rx,
.init = imx_mu_init_specific, .init = imx_mu_init_specific,
.rxdb = imx_mu_generic_rxdb,
.xTR = 0x0, .xTR = 0x0,
.xRR = 0x10, .xRR = 0x10,
.xSR = {0x20, 0x20, 0x20, 0x20}, .xSR = {0x20, 0x20, 0x20, 0x20},
......
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