2022-01-04 06:26:45

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support

From: Peng Fan <[email protected]>

This patchset includes a few fixes for low power and i.MX8 SECO MU support

Franck LENORMAND (1):
mailbox: imx: add i.MX8 SECO MU support

Peng Fan (2):
dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support
mailbox: imx: introduce rxdb callback

Ranjani Vaidyanathan (2):
mailbox: imx: Add support for identifying SCU wakeup source from sysfs
mailbox: imx: enlarge timeout while reading/writing messages to SCFW

Robin Gong (2):
mailbox: imx: fix wakeup failure from freeze mode
mailbox: imx: fix crash in resume on i.mx8ulp

.../devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
drivers/mailbox/imx-mailbox.c | 249 +++++++++++++++++-
2 files changed, 243 insertions(+), 7 deletions(-)

--
2.25.1



2022-01-04 06:26:51

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 1/7] mailbox: imx: fix wakeup failure from freeze mode

From: Robin Gong <[email protected]>

Since IRQF_NO_SUSPEND used for imx mailbox driver, that means this irq
can't be used for wakeup source so that can't wakeup from freeze mode.
Add pm_system_wakeup() to wakeup from freeze mode.

Fixes: b7b2796b9b31e("mailbox: imx: ONLY IPC MU needs IRQF_NO_SUSPEND flag")
Reviewed-by: Jacky Bai <[email protected]>
Reviewed-by: Peng Fan <[email protected]>
Signed-off-by: Robin Gong <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index ffe36a6bef9e..b3a2772f0aa1 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/pm_runtime.h>
+#include <linux/suspend.h>
#include <linux/slab.h>

#define IMX_MU_CHANS 16
@@ -76,6 +77,7 @@ struct imx_mu_priv {
const struct imx_mu_dcfg *dcfg;
struct clk *clk;
int irq;
+ bool suspend;

u32 xcr[4];

@@ -334,6 +336,9 @@ static irqreturn_t imx_mu_isr(int irq, void *p)
return IRQ_NONE;
}

+ if (priv->suspend)
+ pm_system_wakeup();
+
return IRQ_HANDLED;
}

@@ -702,6 +707,8 @@ static int __maybe_unused imx_mu_suspend_noirq(struct device *dev)
priv->xcr[i] = imx_mu_read(priv, priv->dcfg->xCR[i]);
}

+ priv->suspend = true;
+
return 0;
}

@@ -723,6 +730,8 @@ static int __maybe_unused imx_mu_resume_noirq(struct device *dev)
imx_mu_write(priv, priv->xcr[i], priv->dcfg->xCR[i]);
}

+ priv->suspend = false;
+
return 0;
}

--
2.25.1


2022-01-04 06:27:01

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 2/7] mailbox: imx: fix crash in resume on i.mx8ulp

From: Robin Gong <[email protected]>

check 'priv->clk' before 'imx_mu_read()' otherwise crash happens on
i.mx8ulp, since clock not enabled.

Fixes: 4f0b776ef5831 ("mailbox: imx-mailbox: support i.MX8ULP MU")
Reviewed-by: Jacky Bai <[email protected]>
Signed-off-by: Robin Gong <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index b3a2772f0aa1..76d7d399790f 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -725,7 +725,7 @@ static int __maybe_unused imx_mu_resume_noirq(struct device *dev)
* send failed, may lead to system freeze. This issue
* is observed by testing freeze mode suspend.
*/
- if (!imx_mu_read(priv, priv->dcfg->xCR[0]) && !priv->clk) {
+ if (!priv->clk && !imx_mu_read(priv, priv->dcfg->xCR[0])) {
for (i = 0; i < IMX_MU_xCR_MAX; i++)
imx_mu_write(priv, priv->xcr[i], priv->dcfg->xCR[i]);
}
--
2.25.1


2022-01-04 06:27:07

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 3/7] mailbox: imx: Add support for identifying SCU wakeup source from sysfs

From: Ranjani Vaidyanathan <[email protected]>

Record SCU wakeup interrupt in /sys/power/pm_wakeup_irq

Signed-off-by: Ranjani Vaidyanathan <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index 76d7d399790f..1f44ee11054d 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -337,7 +337,7 @@ static irqreturn_t imx_mu_isr(int irq, void *p)
}

if (priv->suspend)
- pm_system_wakeup();
+ pm_system_irq_wakeup(priv->irq);

return IRQ_HANDLED;
}
--
2.25.1


2022-01-04 06:27:09

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 5/7] dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support

From: Peng Fan <[email protected]>

Similar to i.MX8QM/QXP SCU, i.MX8 SECO MU is dedicated for
communication between SECO and Cortex-A cores from hardware design,
it could not be reused for other purpose. To use SECO MU more
effectivly, add "fsl,imx8-mu-seco" compatile to support fast IPC.

Signed-off-by: Peng Fan <[email protected]>
---
Documentation/devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/mailbox/fsl,mu.yaml b/Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
index a337bcd80c4a..f865b806ae6a 100644
--- a/Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
+++ b/Documentation/devicetree/bindings/mailbox/fsl,mu.yaml
@@ -28,6 +28,7 @@ properties:
- const: fsl,imx7ulp-mu
- const: fsl,imx8ulp-mu
- const: fsl,imx8-mu-scu
+ - const: fsl,imx8-mu-seco
- const: fsl,imx8ulp-mu-s4
- items:
- enum:
--
2.25.1


2022-01-04 06:27:13

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 4/7] mailbox: imx: enlarge timeout while reading/writing messages to SCFW

From: Ranjani Vaidyanathan <[email protected]>

Mailbox driver needs to wait and read all the words in response to a
SCFW API call, else the protocol gets messed up and results in kernel hang.
When the responses are longer than 3 words its possible that SCFW will
take some time to fill up the rest of the words in the MU, a timeout of
100us is arbritrary and too short. While waiting for Linux to consume the
first 3 words of the response SCFW can be busy doing other stuff and hence
Linux needs to wait for the rest of the words.
Similar restriction applies when writing messages that are longer than
3 words.
This patch increases the timeout to 5secs while waiting for response
or writing long messages to SCFW.

Signed-off-by: Ranjani Vaidyanathan <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index 1f44ee11054d..e8a212d0da2f 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -218,7 +218,7 @@ static int imx_mu_specific_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *
ret = readl_poll_timeout(priv->base + priv->dcfg->xSR[IMX_MU_TSR],
xsr,
xsr & IMX_MU_xSR_TEn(priv->dcfg->type, i % num_tr),
- 0, 100);
+ 0, 5 * USEC_PER_SEC);
if (ret) {
dev_err(priv->dev, "Send data index: %d timeout\n", i);
return ret;
@@ -263,7 +263,8 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv *

for (i = 1; i < size; i++) {
ret = readl_poll_timeout(priv->base + priv->dcfg->xSR[IMX_MU_RSR], xsr,
- xsr & IMX_MU_xSR_RFn(priv->dcfg->type, i % 4), 0, 100);
+ xsr & IMX_MU_xSR_RFn(priv->dcfg->type, i % 4), 0,
+ 5 * USEC_PER_SEC);
if (ret) {
dev_err(priv->dev, "timeout read idx %d\n", i);
return ret;
--
2.25.1


2022-01-04 06:27:15

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 6/7] mailbox: imx: introduce rxdb callback

From: Peng Fan <[email protected]>

Add a rxdb callback to prepare for i.MX8 SECO MU rxdb which has a
different logic.

Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index e8a212d0da2f..a727eee49563 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -93,6 +93,7 @@ enum imx_mu_type {
struct imx_mu_dcfg {
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 (*rxdb)(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp);
void (*init)(struct imx_mu_priv *priv);
enum imx_mu_type type;
u32 xTR; /* Transmit Register0 */
@@ -179,6 +180,16 @@ static int imx_mu_generic_rx(struct imx_mu_priv *priv,
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)
{
u32 *arg = data;
@@ -329,9 +340,7 @@ static irqreturn_t imx_mu_isr(int irq, void *p)
priv->dcfg->rx(priv, cp);
} else if ((val == IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx)) &&
(cp->type == IMX_MU_TYPE_RXDB)) {
- imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx),
- priv->dcfg->xSR[IMX_MU_GSR]);
- mbox_chan_received_data(chan, NULL);
+ priv->dcfg->rxdb(priv, cp);
} else {
dev_warn_ratelimited(priv->dev, "Not handled interrupt\n");
return IRQ_NONE;
@@ -639,6 +648,7 @@ static int imx_mu_remove(struct platform_device *pdev)
static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {
.tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx,
+ .rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic,
.xTR = 0x0,
.xRR = 0x10,
@@ -649,6 +659,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {
static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = {
.tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx,
+ .rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic,
.xTR = 0x20,
.xRR = 0x40,
@@ -659,7 +670,9 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx7ulp = {
static const struct imx_mu_dcfg imx_mu_cfg_imx8ulp = {
.tx = imx_mu_generic_tx,
.rx = imx_mu_generic_rx,
+ .rxdb = imx_mu_generic_rxdb,
.init = imx_mu_init_generic,
+ .rxdb = imx_mu_generic_rxdb,
.type = IMX_MU_V2,
.xTR = 0x200,
.xRR = 0x280,
@@ -682,6 +695,7 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx8_scu = {
.tx = imx_mu_specific_tx,
.rx = imx_mu_specific_rx,
.init = imx_mu_init_specific,
+ .rxdb = imx_mu_generic_rxdb,
.xTR = 0x0,
.xRR = 0x10,
.xSR = {0x20, 0x20, 0x20, 0x20},
--
2.25.1


2022-01-04 06:27:19

by Peng Fan (OSS)

[permalink] [raw]
Subject: [PATCH 7/7] mailbox: imx: add i.MX8 SECO MU support

From: Franck LENORMAND <[email protected]>

i.MX8/8X SECO firmware IPC is an implementation of passing messages.
But current imx-mailbox driver only support one word message,
i.MX8/8X linux side firmware has to request four TX, four RX and a
TXDB to support IPC to SECO firmware. This is low efficent and
more interrupts triggered compared with one TX and one RX.

To make SECO MU work,
- parse the size of msg.
- Only enable TR0/RR0 interrupt for transmit/receive message.
- For TX/RX, only support one TX channel and one RX channel
- For RX, support receive msg of any size, limited by hardcoded value
of 30.

Signed-off-by: Franck LENORMAND <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
---
drivers/mailbox/imx-mailbox.c | 213 +++++++++++++++++++++++++++++++++-
1 file changed, 212 insertions(+), 1 deletion(-)

diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index a727eee49563..d70f730ff47e 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -9,6 +9,7 @@
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/iopoll.h>
+#include <linux/jiffies.h>
#include <linux/kernel.h>
#include <linux/mailbox_controller.h>
#include <linux/module.h>
@@ -24,6 +25,9 @@
#define IMX_MU_S4_CHANS 2
#define IMX_MU_CHAN_NAME_SIZE 20

+#define IMX_MU_SECO_TX_TOUT (msecs_to_jiffies(3000))
+#define IMX_MU_SECO_RX_TOUT (msecs_to_jiffies(3000))
+
enum imx_mu_chan_type {
IMX_MU_TYPE_TX, /* Tx */
IMX_MU_TYPE_RX, /* Rx */
@@ -48,7 +52,7 @@ enum imx_mu_xsr {

struct imx_sc_rpc_msg_max {
struct imx_sc_rpc_msg hdr;
- u32 data[7];
+ u32 data[30];
};

struct imx_s4_rpc_msg_max {
@@ -131,6 +135,55 @@ static u32 imx_mu_read(struct imx_mu_priv *priv, u32 offs)
return ioread32(priv->base + offs);
}

+static int imx_mu_tx_waiting_write(struct imx_mu_priv *priv, u32 val, u32 idx)
+{
+ u64 timeout_time = get_jiffies_64() + IMX_MU_SECO_TX_TOUT;
+ u32 status;
+ u32 can_write;
+
+ dev_dbg(priv->dev, "Trying to write %.8x to idx %d\n", val, idx);
+
+ do {
+ status = imx_mu_read(priv, priv->dcfg->xSR[IMX_MU_TSR]);
+ can_write = status & IMX_MU_xSR_TEn(priv->dcfg->type, idx % 4);
+ } while (!can_write && time_is_after_jiffies64(timeout_time));
+
+ if (!can_write) {
+ dev_err(priv->dev, "timeout trying to write %.8x at %d(%.8x)\n",
+ val, idx, status);
+ return -ETIME;
+ }
+
+ imx_mu_write(priv, val, priv->dcfg->xTR + (idx % 4) * 4);
+
+ return 0;
+}
+
+static int imx_mu_rx_waiting_read(struct imx_mu_priv *priv, u32 *val, u32 idx)
+{
+ u64 timeout_time = get_jiffies_64() + IMX_MU_SECO_RX_TOUT;
+ u32 status;
+ u32 can_read;
+
+ dev_dbg(priv->dev, "Trying to read from idx %d\n", idx);
+
+ do {
+ status = imx_mu_read(priv, priv->dcfg->xSR[IMX_MU_RSR]);
+ can_read = status & IMX_MU_xSR_RFn(priv->dcfg->type, idx % 4);
+ } while (!can_read && time_is_after_jiffies64(timeout_time));
+
+ if (!can_read) {
+ dev_err(priv->dev, "timeout trying to read idx %d (%.8x)\n",
+ idx, status);
+ return -ETIME;
+ }
+
+ *val = imx_mu_read(priv, priv->dcfg->xRR + (idx % 4) * 4);
+ dev_dbg(priv->dev, "Read %.8x\n", *val);
+
+ return 0;
+}
+
static u32 imx_mu_xcr_rmw(struct imx_mu_priv *priv, enum imx_mu_xcr type, u32 set, u32 clr)
{
unsigned long flags;
@@ -289,6 +342,125 @@ static int imx_mu_specific_rx(struct imx_mu_priv *priv, struct imx_mu_con_priv *
return 0;
}

+static int imx_mu_seco_tx(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp,
+ void *data)
+{
+ struct imx_sc_rpc_msg_max *msg = data;
+ u32 *arg = data;
+ u32 byte_size;
+ int err;
+ int i;
+
+ dev_dbg(priv->dev, "Sending message\n");
+
+ switch (cp->type) {
+ case IMX_MU_TYPE_TXDB:
+ byte_size = msg->hdr.size * sizeof(u32);
+ if (byte_size > sizeof(*msg)) {
+ /*
+ * The real message size can be different to
+ * struct imx_sc_rpc_msg_max size
+ */
+ dev_err(priv->dev,
+ "Exceed max msg size (%zu) on TX, got: %i\n",
+ sizeof(*msg), byte_size);
+ return -EINVAL;
+ }
+
+ print_hex_dump_debug("from client ", DUMP_PREFIX_OFFSET, 4, 4,
+ data, byte_size, false);
+
+ /* Send first word */
+ dev_dbg(priv->dev, "Sending header\n");
+ imx_mu_write(priv, *arg++, priv->dcfg->xTR);
+
+ /* Send signaling */
+ dev_dbg(priv->dev, "Sending signaling\n");
+ imx_mu_xcr_rmw(priv, IMX_MU_GCR,
+ IMX_MU_xCR_GIRn(priv->dcfg->type, cp->idx), 0);
+
+ /* Send words to fill the mailbox */
+ for (i = 1; i < 4 && i < msg->hdr.size; i++) {
+ dev_dbg(priv->dev, "Sending word %d\n", i);
+ imx_mu_write(priv, *arg++,
+ priv->dcfg->xTR + (i % 4) * 4);
+ }
+
+ /* Send rest of message waiting for remote read */
+ for (; i < msg->hdr.size; i++) {
+ dev_dbg(priv->dev, "Sending word %d\n", i);
+ err = imx_mu_tx_waiting_write(priv, *arg++, i);
+ if (err) {
+ dev_err(priv->dev, "Timeout tx %d\n", i);
+ return err;
+ }
+ }
+
+ /* Simulate hack for mbox framework */
+ tasklet_schedule(&cp->txdb_tasklet);
+
+ break;
+ default:
+ dev_warn_ratelimited(priv->dev,
+ "Send data on wrong channel type: %d\n",
+ cp->type);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int imx_mu_seco_rxdb(struct imx_mu_priv *priv, struct imx_mu_con_priv *cp)
+{
+ struct imx_sc_rpc_msg_max msg;
+ u32 *data = (u32 *)&msg;
+ u32 byte_size;
+ int err = 0;
+ int i;
+
+ dev_dbg(priv->dev, "Receiving message\n");
+
+ /* Read header */
+ dev_dbg(priv->dev, "Receiving header\n");
+ *data++ = imx_mu_read(priv, priv->dcfg->xRR);
+ byte_size = msg.hdr.size * sizeof(u32);
+ if (byte_size > sizeof(msg)) {
+ dev_err(priv->dev, "Exceed max msg size (%zu) on RX, got: %i\n",
+ sizeof(msg), byte_size);
+ err = -EINVAL;
+ goto error;
+ }
+
+ /* Read message waiting they are written */
+ for (i = 1; i < msg.hdr.size; i++) {
+ dev_dbg(priv->dev, "Receiving word %d\n", i);
+ err = imx_mu_rx_waiting_read(priv, data++, i);
+ if (err) {
+ dev_err(priv->dev, "Timeout rx %d\n", i);
+ goto error;
+ }
+ }
+
+ /* Clear GIP */
+ imx_mu_write(priv, IMX_MU_xSR_GIPn(priv->dcfg->type, cp->idx),
+ priv->dcfg->xSR[IMX_MU_GSR]);
+
+ print_hex_dump_debug("to client ", DUMP_PREFIX_OFFSET, 4, 4,
+ &msg, byte_size, false);
+
+ /* send data to client */
+ dev_dbg(priv->dev, "Sending message to client\n");
+ mbox_chan_received_data(cp->chan, (void *)&msg);
+
+ goto exit;
+
+error:
+ mbox_chan_received_data(cp->chan, ERR_PTR(err));
+
+exit:
+ return err;
+}
+
static void imx_mu_txdb_tasklet(unsigned long data)
{
struct imx_mu_con_priv *cp = (struct imx_mu_con_priv *)data;
@@ -494,6 +666,27 @@ static struct mbox_chan * imx_mu_xlate(struct mbox_controller *mbox,
return &mbox->chans[chan];
}

+static struct mbox_chan *imx_mu_seco_xlate(struct mbox_controller *mbox,
+ const struct of_phandle_args *sp)
+{
+ u32 type;
+
+ if (sp->args_count < 1) {
+ dev_err(mbox->dev, "Invalid argument count %d\n", sp->args_count);
+ return ERR_PTR(-EINVAL);
+ }
+
+ type = sp->args[0]; /* channel type */
+
+ /* Only supports TXDB and RXDB */
+ if (type == IMX_MU_TYPE_TX || type == IMX_MU_TYPE_RX) {
+ dev_err(mbox->dev, "Invalid type: %d\n", type);
+ return ERR_PTR(-EINVAL);
+ }
+
+ return imx_mu_xlate(mbox, sp);
+}
+
static void imx_mu_init_generic(struct imx_mu_priv *priv)
{
unsigned int i;
@@ -544,6 +737,12 @@ static void imx_mu_init_specific(struct imx_mu_priv *priv)
imx_mu_write(priv, 0, priv->dcfg->xCR[i]);
}

+static void imx_mu_init_seco(struct imx_mu_priv *priv)
+{
+ imx_mu_init_generic(priv);
+ priv->mbox.of_xlate = imx_mu_seco_xlate;
+}
+
static int imx_mu_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -702,12 +901,24 @@ static const struct imx_mu_dcfg imx_mu_cfg_imx8_scu = {
.xCR = {0x24, 0x24, 0x24, 0x24},
};

+static const struct imx_mu_dcfg imx_mu_cfg_imx8_seco = {
+ .tx = imx_mu_seco_tx,
+ .rx = imx_mu_generic_rx,
+ .rxdb = imx_mu_seco_rxdb,
+ .init = imx_mu_init_seco,
+ .xTR = 0x0,
+ .xRR = 0x10,
+ .xSR = {0x20, 0x20, 0x20, 0x20},
+ .xCR = {0x24, 0x24, 0x24, 0x24},
+};
+
static const struct of_device_id imx_mu_dt_ids[] = {
{ .compatible = "fsl,imx7ulp-mu", .data = &imx_mu_cfg_imx7ulp },
{ .compatible = "fsl,imx6sx-mu", .data = &imx_mu_cfg_imx6sx },
{ .compatible = "fsl,imx8ulp-mu", .data = &imx_mu_cfg_imx8ulp },
{ .compatible = "fsl,imx8ulp-mu-s4", .data = &imx_mu_cfg_imx8ulp_s4 },
{ .compatible = "fsl,imx8-mu-scu", .data = &imx_mu_cfg_imx8_scu },
+ { .compatible = "fsl,imx8-mu-seco", .data = &imx_mu_cfg_imx8_seco },
{ },
};
MODULE_DEVICE_TABLE(of, imx_mu_dt_ids);
--
2.25.1


2022-01-04 23:22:22

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH 3/7] mailbox: imx: Add support for identifying SCU wakeup source from sysfs

Hi "Peng,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on shawnguo/for-next]
[also build test ERROR on robh/for-next linus/master v5.16-rc8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/0day-ci/linux/commits/Peng-Fan-OSS/mailbox-imx-misc-fix-and-SECO-MU-support/20220104-142853
base: https://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git for-next
config: mips-allmodconfig (https://download.01.org/0day-ci/archive/20220105/[email protected]/config)
compiler: mips-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/565bba9e401bda77a3c936df0262681cd2622d80
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Peng-Fan-OSS/mailbox-imx-misc-fix-and-SECO-MU-support/20220104-142853
git checkout 565bba9e401bda77a3c936df0262681cd2622d80
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=mips SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>, old ones prefixed by <<):

>> ERROR: modpost: "pm_system_irq_wakeup" [drivers/mailbox/imx-mailbox.ko] undefined!

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

2022-01-12 01:03:32

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH 5/7] dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support

On Tue, 04 Jan 2022 14:25:45 +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <[email protected]>
>
> Similar to i.MX8QM/QXP SCU, i.MX8 SECO MU is dedicated for
> communication between SECO and Cortex-A cores from hardware design,
> it could not be reused for other purpose. To use SECO MU more
> effectivly, add "fsl,imx8-mu-seco" compatile to support fast IPC.
>
> Signed-off-by: Peng Fan <[email protected]>
> ---
> Documentation/devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
> 1 file changed, 1 insertion(+)
>

Acked-by: Rob Herring <[email protected]>

2022-01-26 20:33:23

by Peng Fan

[permalink] [raw]
Subject: RE: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support

> Subject: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support

Ping..

Thanks,
Peng.

>
> From: Peng Fan <[email protected]>
>
> This patchset includes a few fixes for low power and i.MX8 SECO MU support
>
> Franck LENORMAND (1):
> mailbox: imx: add i.MX8 SECO MU support
>
> Peng Fan (2):
> dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support
> mailbox: imx: introduce rxdb callback
>
> Ranjani Vaidyanathan (2):
> mailbox: imx: Add support for identifying SCU wakeup source from sysfs
> mailbox: imx: enlarge timeout while reading/writing messages to SCFW
>
> Robin Gong (2):
> mailbox: imx: fix wakeup failure from freeze mode
> mailbox: imx: fix crash in resume on i.mx8ulp
>
> .../devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
> drivers/mailbox/imx-mailbox.c | 249
> +++++++++++++++++-
> 2 files changed, 243 insertions(+), 7 deletions(-)
>
> --
> 2.25.1

2022-02-01 09:04:44

by Jassi Brar

[permalink] [raw]
Subject: Re: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support

On Wed, Jan 26, 2022 at 2:28 AM Peng Fan <[email protected]> wrote:
>
> > Subject: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support
>
> Ping..
>
This adds new features, so it will go in the next release.
Meanwhile you may want to fix the issue in 3/7 reported by lkp test bot.

thanks.




> Thanks,
> Peng.
>
> >
> > From: Peng Fan <[email protected]>
> >
> > This patchset includes a few fixes for low power and i.MX8 SECO MU support
> >
> > Franck LENORMAND (1):
> > mailbox: imx: add i.MX8 SECO MU support
> >
> > Peng Fan (2):
> > dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support
> > mailbox: imx: introduce rxdb callback
> >
> > Ranjani Vaidyanathan (2):
> > mailbox: imx: Add support for identifying SCU wakeup source from sysfs
> > mailbox: imx: enlarge timeout while reading/writing messages to SCFW
> >
> > Robin Gong (2):
> > mailbox: imx: fix wakeup failure from freeze mode
> > mailbox: imx: fix crash in resume on i.mx8ulp
> >
> > .../devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
> > drivers/mailbox/imx-mailbox.c | 249
> > +++++++++++++++++-
> > 2 files changed, 243 insertions(+), 7 deletions(-)
> >
> > --
> > 2.25.1
>

2022-02-09 06:30:44

by Peng Fan

[permalink] [raw]
Subject: RE: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support

> Subject: Re: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support
>
> On Wed, Jan 26, 2022 at 2:28 AM Peng Fan <[email protected]> wrote:
> >
> > > Subject: [PATCH 0/7] mailbox: imx: misc fix and SECO MU support
> >
> > Ping..
> >
> This adds new features, so it will go in the next release.
> Meanwhile you may want to fix the issue in 3/7 reported by lkp test bot.

Just sent out V2. Patch 3/7 is dropped in v2 because it breaks module build as
reported by lkp test bot. Will submit a separate patch for it later.

Thanks,
Peng.

>
> thanks.
>
>
>
>
> > Thanks,
> > Peng.
> >
> > >
> > > From: Peng Fan <[email protected]>
> > >
> > > This patchset includes a few fixes for low power and i.MX8 SECO MU
> support
> > >
> > > Franck LENORMAND (1):
> > > mailbox: imx: add i.MX8 SECO MU support
> > >
> > > Peng Fan (2):
> > > dt-bindings: mailbox: imx-mu: add i.MX8 SECO MU support
> > > mailbox: imx: introduce rxdb callback
> > >
> > > Ranjani Vaidyanathan (2):
> > > mailbox: imx: Add support for identifying SCU wakeup source from
> sysfs
> > > mailbox: imx: enlarge timeout while reading/writing messages to
> SCFW
> > >
> > > Robin Gong (2):
> > > mailbox: imx: fix wakeup failure from freeze mode
> > > mailbox: imx: fix crash in resume on i.mx8ulp
> > >
> > > .../devicetree/bindings/mailbox/fsl,mu.yaml | 1 +
> > > drivers/mailbox/imx-mailbox.c | 249
> > > +++++++++++++++++-
> > > 2 files changed, 243 insertions(+), 7 deletions(-)
> > >
> > > --
> > > 2.25.1
> >