Thread (11 messages) 11 messages, 3 authors, 2021-10-15

Re: [PATCH 1/4] serial: core: Add wakeup() and start_pending_tx() for power management

From: Andy Shevchenko <hidden>
Date: 2021-09-30 07:11:36
Also in: linux-omap, lkml

On Thu, Sep 30, 2021 at 9:30 AM Tony Lindgren [off-list ref] wrote:
If the serial driver implements PM runtime with autosuspend, the port may
be powered down on TX. To wake up the port, let's add new wakeup() call
for serial drivers to implement as needed. We can call wakeup() from
__uart_start() and flow control related functions before attempting to
write to the serial port registers.

Let's keep track of the serial port with a new runtime_suspended flag
that the device driver runtime PM suspend and resume can manage with
atomic_set(). This is because only the device driver knows what the
device runtime PM state as in Documentation/power/runtime_pm.rst
under "9. Autosuspend, or automatically-delayed suspend" for locking.

To allow the serial port drivers to send out pending tx on runtime PM
resume, let's add start_pending_tx() as suggested by Johan Hovold
[off-list ref].
...
+  wakeup(port)
+       Wake up port if it has been runtime PM suspended.
+
+       Locking: port->lock taken.
+
+       Interrupts: locally disabled.
+       This call must not sleep
If it's suspended via ACPI methods, it can't be resumed here, right?
Only what we can do is to schedule a resume, but it means we may not
access registers immediately after and we have to be sure that the
device is resumed.

Dead end?

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help