[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <b4966bd8-d7d3-4794-99b6-45425eb0a4d0@ti.com>
Date: Mon, 3 Nov 2025 08:31:44 -0600
From: Andrew Davis <afd@...com>
To: Beleswar Padhi <b-padhi@...com>, <jassisinghbrar@...il.com>,
<linux-kernel@...r.kernel.org>, <hiago.franco@...adex.com>,
<francesco.dolcini@...adex.com>
CC: <hnagalla@...com>, <u-kumar1@...com>, <nm@...com>, <vigneshr@...com>
Subject: Re: [PATCH] mailbox: omap-mailbox: Check for pending msgs only when
mbox is exclusive
On 11/3/25 1:59 AM, Beleswar Padhi wrote:
> On TI K3 devices, the mailbox resides in the Always-On power domain
> (LPSC_main_alwayson) and is shared among multiple processors. The
> mailbox is not solely exclusive to Linux.
>
> Currently, the suspend path checks all FIFO queues for pending messages
> and blocks suspend if any are present. This behavior is unnecessary for
> K3 devices, since some of the FIFOs are used for RTOS<->RTOS
> communication and are independent of Linux.
>
> For FIFOs used in Linux<->RTOS communication, any pending message would
> trigger an interrupt, which naturally prevents suspend from completing.
> Hence, there is no need for the mailbox driver to explicitly check for
> pending messages on K3 platforms.
>
> Introduce a device match flag to indicate whether the mailbox instance
> is exclusive to Linux, and skip the pending message check for
> non-exclusive instances (such as in K3).
>
> Fixes: a49f991e740f ("arm64: dts: ti: k3-am62-verdin: Add missing cfg for TI IPC Firmware")
> Closes: https://lore.kernel.org/all/sid7gtg5vay5qgicsl6smnzwg5mnneoa35cempt5ddwjvedaio@hzsgcx6oo74l/
> Signed-off-by: Beleswar Padhi <b-padhi@...com>
> ---
> Cc: Francesco Dolcini <francesco.dolcini@...adex.com>
> Cc: Hiago De Franco <hiago.franco@...adex.com>
> Please help in testing the patch on Toradex platforms.
>
> Testing Done:
> 1. Tested Boot across all TI K3 EVM/SK boards.
> 2. Tested IPC on all TI K3 J7* EVM/SK boards (& AM62x SK).
> 3. Tested that the patch generates no new warnings/errors.
>
> Changes since RFC:
> 1. Skip checking pending messages instead of flushing
> them explicitly for K3 devices.
>
> Link to RFC Version:
> https://lore.kernel.org/all/20251022102015.1345696-1-b-padhi@ti.com/
>
> drivers/mailbox/omap-mailbox.c | 25 ++++++++++++++++---------
> 1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/mailbox/omap-mailbox.c b/drivers/mailbox/omap-mailbox.c
> index 680243751d62..b90ce9d60a80 100644
> --- a/drivers/mailbox/omap-mailbox.c
> +++ b/drivers/mailbox/omap-mailbox.c
> @@ -68,6 +68,7 @@ struct omap_mbox_fifo {
>
> struct omap_mbox_match_data {
> u32 intr_type;
> + bool is_exclusive;
> };
>
> struct omap_mbox_device {
> @@ -336,16 +337,21 @@ static const struct mbox_chan_ops omap_mbox_chan_ops = {
> static int omap_mbox_suspend(struct device *dev)
> {
> struct omap_mbox_device *mdev = dev_get_drvdata(dev);
> + const struct omap_mbox_match_data *mbox_dev_data;
> u32 usr, fifo, reg;
>
> + mbox_dev_data = of_device_get_match_data(dev);
Fetch and store this in probe in the mdev struct, no need to re-fetch this every
time we suspend. Also use device_get_match_data().
Andrew
> +
> if (pm_runtime_status_suspended(dev))
> return 0;
>
> - for (fifo = 0; fifo < mdev->num_fifos; fifo++) {
> - if (mbox_read_reg(mdev, MAILBOX_MSGSTATUS(fifo))) {
> - dev_err(mdev->dev, "fifo %d has unexpected unread messages\n",
> - fifo);
> - return -EBUSY;
> + if (mbox_dev_data->is_exclusive) {
> + for (fifo = 0; fifo < mdev->num_fifos; fifo++) {
> + if (mbox_read_reg(mdev, MAILBOX_MSGSTATUS(fifo))) {
> + dev_err(mdev->dev, "fifo %d has unexpected unread messages\n",
> + fifo);
> + return -EBUSY;
> + }
> }
> }
>
> @@ -378,8 +384,9 @@ static const struct dev_pm_ops omap_mbox_pm_ops = {
> SET_SYSTEM_SLEEP_PM_OPS(omap_mbox_suspend, omap_mbox_resume)
> };
>
> -static const struct omap_mbox_match_data omap2_data = { MBOX_INTR_CFG_TYPE1 };
> -static const struct omap_mbox_match_data omap4_data = { MBOX_INTR_CFG_TYPE2 };
> +static const struct omap_mbox_match_data omap2_data = { MBOX_INTR_CFG_TYPE1, true };
> +static const struct omap_mbox_match_data omap4_data = { MBOX_INTR_CFG_TYPE2, true };
> +static const struct omap_mbox_match_data am654_data = { MBOX_INTR_CFG_TYPE2, false };
>
> static const struct of_device_id omap_mailbox_of_match[] = {
> {
> @@ -396,11 +403,11 @@ static const struct of_device_id omap_mailbox_of_match[] = {
> },
> {
> .compatible = "ti,am654-mailbox",
> - .data = &omap4_data,
> + .data = &am654_data,
> },
> {
> .compatible = "ti,am64-mailbox",
> - .data = &omap4_data,
> + .data = &am654_data,
> },
> {
> /* end */
Powered by blists - more mailing lists