From: Greg KH <gregkh@linuxfoundation.org>
To: Thomas Richard <thomas.richard@bootlin.com>
Cc: linux-serial@vger.kernel.org
Subject: Re: Regression: serial: 8250_omap: error during suspend if no_console_suspend is set
Date: Mon, 18 Sep 2023 09:35:55 +0200 [thread overview]
Message-ID: <2023091839-basil-maybe-46b7@gregkh> (raw)
In-Reply-To: <8a856171-e743-737e-eb9d-42852e4e4f19@bootlin.com>
On Thu, Sep 14, 2023 at 06:26:44PM +0200, Thomas Richard wrote:
> Hi
>
> After switching to Linux 6.6-rc1, i met an issue during suspend to idle
> with 8250_omap driver (no_console_suspend is set).
> The driver fails to suspend the uart port used for the serial console so
> the suspend sequence is stopped.
>
> [ 114.629197] port 2800000.serial:0.0: PM: calling
> pm_runtime_force_suspend+0x0/0x134 @ 114, parent: 2800000.serial:0
> [ 114.639617] port 2800000.serial:0.0: PM:
> pm_runtime_force_suspend+0x0/0x134 returned 0 after 2 usecs
> [ 114.648739] omap8250 2800000.serial: PM: calling
> omap8250_suspend+0x0/0xf4 @ 114, parent: bus@100000
> [ 114.657861] omap8250 2800000.serial: PM: dpm_run_callback():
> omap8250_suspend+0x0/0xf4 returns -16
> [ 114.666808] omap8250 2800000.serial: PM: omap8250_suspend+0x0/0xf4
> returned -16 after 8951 usecs
> [ 114.675580] omap8250 2800000.serial: PM: failed to suspend: error -16
> [ 114.682011] PM: suspend of devices aborted after 675.644 msecs
> [ 114.687833] PM: start suspend of devices aborted after 681.777 msecs
> [ 114.694175] PM: Some devices failed to suspend, or early wake event
> detected
>
> The following sequence is used to suspend to idle:
> $ echo 1 > /sys/power/pm_debug_messages
> $ echo 1 > /sys/power/pm_print_times
> $ echo 8 > /proc/sys/kernel/printk
> $ echo 0 > /sys/module/printk/parameters/console_suspend
> $ echo enabled >
> /sys/devices/platform/bus@100000/2800000.serial/tty/ttyS2/power/wakeup
> $ echo s2idle > /sys/power/mem_sleep
> $ echo mem > /sys/power/state
>
> The regression was introduced in commit 20a41a62618d "serial: 8250_omap:
> Use force_suspend and resume for system suspend"
>
> Before commit 20a41a62618d, omap8250_suspend returned 0.
> Now pm_runtime_force_suspend is called and its return code is used by
> omap8250_suspend.
>
> static int omap8250_suspend(struct device *dev)
> {
> struct omap8250_priv *priv = dev_get_drvdata(dev);
> struct uart_8250_port *up = serial8250_get_port(priv->line);
> int err;
>
> serial8250_suspend_port(priv->line);
>
> err = pm_runtime_resume_and_get(dev);
> if (err)
> return err;
> if (!device_may_wakeup(dev))
> priv->wer = 0;
> serial_out(up, UART_OMAP_WER, priv->wer);
> err = pm_runtime_force_suspend(dev);
> flush_work(&priv->qos_work);
>
> return err;
> }
>
> The pm_runtime_force_suspend function calls omap8250_runtime_suspend
> which returns -EBUSY because console suspend was disabled (which is my
> case), as explained in the code.
>
> /*
> * When using 'no_console_suspend', the console UART must not be
> * suspended. Since driver suspend is managed by runtime suspend,
> * preventing runtime suspend (by returning error) will keep device
> * active during suspend.
> */
> if (priv->is_suspending && !console_suspend_enabled) {
> if (up && uart_console(&up->port))
> return -EBUSY;
> }
>
> The port is used by the console, so we don't want to suspend it (console
> suspend was disabled).
> Of course, if console_suspend is enabled and messages are disabled there
> is no issue.
Do you have a proposed patch to fix this? Or should the original be
reverted?
thanks,
greg k-h
next prev parent reply other threads:[~2023-09-18 7:39 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-14 16:26 Regression: serial: 8250_omap: error during suspend if no_console_suspend is set Thomas Richard
2023-09-18 7:35 ` Greg KH [this message]
2023-09-21 7:37 ` Thomas Richard
2023-09-20 14:36 ` Linux regression tracking #adding (Thorsten Leemhuis)
2023-10-16 8:48 ` Linux regression tracking #update (Thorsten Leemhuis)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2023091839-basil-maybe-46b7@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=linux-serial@vger.kernel.org \
--cc=thomas.richard@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.