[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e71ec0d8-300a-4e43-9e67-15828f11ccb4@ti.com>
Date: Thu, 23 Oct 2025 10:08:12 +0530
From: Beleswar Prasad Padhi <b-padhi@...com>
To: Andrew Davis <afd@...com>, <jassisinghbrar@...il.com>,
<linux-kernel@...r.kernel.org>
CC: <hiagofranco@...il.com>, <hnagalla@...com>, <u-kumar1@...com>
Subject: Re: [RFC PATCH] mailbox: omap-mailbox: Flush out pending msgs before
entering suspend
Hi Andrew,
On 22/10/25 21:37, Andrew Davis wrote:
> On 10/22/25 5:20 AM, Beleswar Padhi wrote:
>> There may be pending messages in the mailbox FIFO that are not consumed
>> by the remote processor for various reasons; the remote processor may
>> already be powered off or may be in a bad state. Instead of aborting
>> suspend because of these pending messages, flush the FIFOs and proceed
>> with suspend. Pending messages could also be restored in the resume
>> context, but since remote processors are typically rebooted during
>> suspend/resume today, there is no point in restoring stale messages.
>>
>> Signed-off-by: Beleswar Padhi <b-padhi@...com>
>> ---
>> drivers/mailbox/omap-mailbox.c | 11 ++++-------
>> 1 file changed, 4 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/mailbox/omap-mailbox.c b/drivers/mailbox/omap-mailbox.c
>> index 680243751d62..5e6373911630 100644
>> --- a/drivers/mailbox/omap-mailbox.c
>> +++ b/drivers/mailbox/omap-mailbox.c
>> @@ -341,13 +341,10 @@ static int omap_mbox_suspend(struct device *dev)
>> 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;
>> - }
>> - }
>> + /* Flush out pending mbox messages before entering suspend */
>> + for (fifo = 0; fifo < mdev->num_fifos; fifo++)
>> + while (mbox_read_reg(mdev, MAILBOX_MSGSTATUS(fifo)) != 0)
>> + mbox_read_reg(mdev, MAILBOX_MESSAGE(fifo));
>
> I'm still not convinced just throwing out messages is the correct thing
> to do here, but for now at very least let's print some warning here when
> messages get zapped.
I am also considering:
1. Mailbox queues for RTOS-RTOS communication could be
firewalled for safety/FFI usecases. In that case, the above flush
would result in an exception.
2. This driver is common to OMAP SoCs which supported proper
suspend/resume, meaning those rprocs could consume pending
messages in resume. So clearing out messages from Linux
might not be the best thing to do here.
What else can we do here? Should we just fallback to letting
Linux see only it's required queues for IPC? By setting
"ti,mbox-num-fifos = <4>"?
Thanks,
Beleswar
>
> Andrew
>
>> for (usr = 0; usr < mdev->num_users; usr++) {
>> reg = MAILBOX_IRQENABLE(mdev->intr_type, usr);
>
Powered by blists - more mailing lists