From: Thomas Richard <thomas.richard@bootlin.com>
To: Tony Lindgren <tony@atomide.com>
Cc: linux-pm@vger.kernel.org, linux-serial@vger.kernel.org,
Gregory CLEMENT <gregory.clement@bootlin.com>,
Kumar Udit <u-kumar1@ti.com>, Dhruva Gole <d-gole@ti.com>
Subject: Re: serial: 8250_omap: suspend issue with console_suspend disabled
Date: Mon, 9 Oct 2023 17:13:52 +0200 [thread overview]
Message-ID: <a5bee830-07af-426b-94ac-3574cba34bec@bootlin.com> (raw)
In-Reply-To: <20230920053828.GD5282@atomide.com>
On 9/20/23 07:38, Tony Lindgren wrote:
> Hi,
>
> * Thomas Richard <thomas.richard@bootlin.com> [230915 09:57]:
>> The regression was introduced in commit 20a41a62618d "serial: 8250_omap:
>> Use force_suspend and resume for system suspend"
> ...
>
>> --- a/drivers/tty/serial/8250/8250_omap.c
>> +++ b/drivers/tty/serial/8250/8250_omap.c
>> @@ -1630,7 +1630,7 @@ static int omap8250_suspend(struct device *dev)
>> err = pm_runtime_force_suspend(dev);
>> flush_work(&priv->qos_work);
>>
>> - return err;
>> + return 0;
>> }
>
> Maybe we can now just simplify things a bit here with the patch below.
> Care to give it a try, it's compile tested only so far.
>
>> Once the omap8250_suspend doesn't return an error, the suspend sequence
>> can continue, but I get an other issue.
>> This issue is not related to commit 20a41a62618d, it has already been
>> present.
>> The power domain of the console is powered-off, so no more messages are
>> printed, and the SoC is stucked.
>> As the uart port is used as console, we don't want to power-off it.
>> My workaround is to set the corresponding power domain to
>> GENPD_FLAG_ALWAYS_ON, so the uart port is not powered-off.
>
> The runtime PM usage count should keep the related power domain on though,
> sounds like this issue somewhere else if the power domains get force
> suspended with runtime PM usage count?
If I understand correctly, there are 2 solutions to keep the power
domain on through.
The first one is to set the flag GENPD_FLAG_ALWAYS_ON for the power domain.
The second one is to set the wakup_path of the device (using
device_set_wakeup_path) and set the flag GENPD_FLAG_ACTIVE_WAKEUP to the
power domain.
I didn't found any flag or option to say that the device is not
suspended, but it is not an error, so we don't want to poweroff the
power domain.
Regards,
Thomas
>
> Regards,
>
> Tony
>
> 8< ------------------------------
> diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
> --- a/drivers/tty/serial/8250/8250_omap.c
> +++ b/drivers/tty/serial/8250/8250_omap.c
> @@ -1617,7 +1617,7 @@ 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;
> + int err = 0;
>
> serial8250_suspend_port(priv->line);
>
> @@ -1627,7 +1627,8 @@ static int omap8250_suspend(struct device *dev)
> if (!device_may_wakeup(dev))
> priv->wer = 0;
> serial_out(up, UART_OMAP_WER, priv->wer);
> - err = pm_runtime_force_suspend(dev);
> + if (uart_console(&up->port) && console_suspend_enabled)
> + err = pm_runtime_force_suspend(dev);
> flush_work(&priv->qos_work);
>
> return err;
> @@ -1636,11 +1637,15 @@ static int omap8250_suspend(struct device *dev)
> static int omap8250_resume(struct device *dev)
> {
> struct omap8250_priv *priv = dev_get_drvdata(dev);
> + struct uart_8250_port *up = serial8250_get_port(priv->line);
> int err;
>
> - err = pm_runtime_force_resume(dev);
> - if (err)
> - return err;
> + if (uart_console(&up->port) && console_suspend_enabled) {
> + err = pm_runtime_force_resume(dev);
> + if (err)
> + return err;
> + }
> +
> serial8250_resume_port(priv->line);
> /* Paired with pm_runtime_resume_and_get() in omap8250_suspend() */
> pm_runtime_mark_last_busy(dev);
> @@ -1717,16 +1722,6 @@ static int omap8250_runtime_suspend(struct device *dev)
>
> if (priv->line >= 0)
> up = serial8250_get_port(priv->line);
> - /*
> - * 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;
> - }
>
> if (priv->habit & UART_ERRATA_CLOCK_DISABLE) {
> int ret;
next prev parent reply other threads:[~2023-10-09 15:14 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-15 9:56 serial: 8250_omap: suspend issue with console_suspend disabled Thomas Richard
2023-09-20 4:59 ` Kumar, Udit
2023-09-20 5:38 ` Tony Lindgren
2023-09-21 7:58 ` Thomas Richard
2023-09-25 13:03 ` Thomas Richard
2023-09-25 15:26 ` Tony Lindgren
2023-09-26 6:14 ` Tony Lindgren
2023-10-09 15:13 ` Thomas Richard [this message]
2023-10-10 6:51 ` Tony Lindgren
2023-10-10 9:37 ` Thomas Richard
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=a5bee830-07af-426b-94ac-3574cba34bec@bootlin.com \
--to=thomas.richard@bootlin.com \
--cc=d-gole@ti.com \
--cc=gregory.clement@bootlin.com \
--cc=linux-pm@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=tony@atomide.com \
--cc=u-kumar1@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).