[<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