[PATCH] serial: sh-sci: Call device_set_wakeup_path() for serial console

Claudiu posted 1 patch 2 years, 2 months ago
drivers/tty/serial/sh-sci.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
[PATCH] serial: sh-sci: Call device_set_wakeup_path() for serial console
Posted by Claudiu 2 years, 2 months ago
From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

In case the SCI is used as a UART console, no_console_suspend is
available in bootargs and SCI is part of a software-controlled power
domain we need to call device_set_wakeup_path(). This lets the power
domain core code knows that this domain should not be powered off
durring system suspend. Otherwise, the SCI power domain is turned off,
nothing is printed while suspending and the suspend/resume process is
blocked. This was detected on the RZ/G3S SoC while adding support
for power domains.

Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
---
 drivers/tty/serial/sh-sci.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 97031db26ae4..57a7f18e16e4 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -3441,8 +3441,12 @@ static __maybe_unused int sci_suspend(struct device *dev)
 {
 	struct sci_port *sport = dev_get_drvdata(dev);
 
-	if (sport)
+	if (sport) {
+		if (uart_console(&sport->port) && !console_suspend_enabled)
+			device_set_wakeup_path(dev);
+
 		uart_suspend_port(&sci_uart_driver, &sport->port);
+	}
 
 	return 0;
 }
-- 
2.39.2
Re: [PATCH] serial: sh-sci: Call device_set_wakeup_path() for serial console
Posted by Geert Uytterhoeven 2 years, 2 months ago
Hi Claudiu,

CC Peng

Thanks for your patch!

On Mon, Apr 22, 2024 at 1:11 PM Claudiu <claudiu.beznea@tuxon.dev> wrote:
> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>
> In case the SCI is used as a UART console, no_console_suspend is
> available in bootargs and SCI is part of a software-controlled power
> domain we need to call device_set_wakeup_path(). This lets the power
> domain core code knows that this domain should not be powered off

know

> durring system suspend. Otherwise, the SCI power domain is turned off,

during

> nothing is printed while suspending and the suspend/resume process is
> blocked. This was detected on the RZ/G3S SoC while adding support
> for power domains.
>
> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> ---
>  drivers/tty/serial/sh-sci.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> index 97031db26ae4..57a7f18e16e4 100644
> --- a/drivers/tty/serial/sh-sci.c
> +++ b/drivers/tty/serial/sh-sci.c
> @@ -3441,8 +3441,12 @@ static __maybe_unused int sci_suspend(struct device *dev)
>  {
>         struct sci_port *sport = dev_get_drvdata(dev);
>
> -       if (sport)
> +       if (sport) {
> +               if (uart_console(&sport->port) && !console_suspend_enabled)
> +                       device_set_wakeup_path(dev);

device_set_awake_path(), as of commit 10bb4e4ab7dd3898 ("PM: sleep:
Add helpers to allow a device to remain powered-on") in v6.6
(although I'm still a bit puzzled about the difference).

> +
>                 uart_suspend_port(&sci_uart_driver, &sport->port);

I think it would be better to make this more general, and move the call
to the existing console_suspend_enabled handling in uart_suspend_port().

> +       }
>
>         return 0;
>  }

If this works, we can remove the console_suspend_enabled handling
from drivers/pmdomain/renesas/rmobile-sysc.c, and revert commit
309864dcf92b76fc ("genpd: imx: scu-pd: do not power off console if
no_console_suspend").

Gr{oetje,eeting}s,

                        Geert


--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Re: [PATCH] serial: sh-sci: Call device_set_wakeup_path() for serial console
Posted by claudiu beznea 2 years, 2 months ago
Hi, Geert,

On 23.04.2024 10:27, Geert Uytterhoeven wrote:
> Hi Claudiu,
> 
> CC Peng
> 
> Thanks for your patch!
> 
> On Mon, Apr 22, 2024 at 1:11 PM Claudiu <claudiu.beznea@tuxon.dev> wrote:
>> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>
>> In case the SCI is used as a UART console, no_console_suspend is
>> available in bootargs and SCI is part of a software-controlled power
>> domain we need to call device_set_wakeup_path(). This lets the power
>> domain core code knows that this domain should not be powered off
> 
> know
> 
>> durring system suspend. Otherwise, the SCI power domain is turned off,
> 
> during
> 
>> nothing is printed while suspending and the suspend/resume process is
>> blocked. This was detected on the RZ/G3S SoC while adding support
>> for power domains.
>>
>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>> ---
>>  drivers/tty/serial/sh-sci.c | 6 +++++-
>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
>> index 97031db26ae4..57a7f18e16e4 100644
>> --- a/drivers/tty/serial/sh-sci.c
>> +++ b/drivers/tty/serial/sh-sci.c
>> @@ -3441,8 +3441,12 @@ static __maybe_unused int sci_suspend(struct device *dev)
>>  {
>>         struct sci_port *sport = dev_get_drvdata(dev);
>>
>> -       if (sport)
>> +       if (sport) {
>> +               if (uart_console(&sport->port) && !console_suspend_enabled)
>> +                       device_set_wakeup_path(dev);
> 
> device_set_awake_path(), as of commit 10bb4e4ab7dd3898 ("PM: sleep:
> Add helpers to allow a device to remain powered-on") in v6.6
> (although I'm still a bit puzzled about the difference).

Ok, I wasn't aware of it. I'll switch to this one.

> 
>> +
>>                 uart_suspend_port(&sci_uart_driver, &sport->port);
> 
> I think it would be better to make this more general, and move the call
> to the existing console_suspend_enabled handling in uart_suspend_port().

Ok, I'll try this way.

> 
>> +       }
>>
>>         return 0;
>>  }
> 
> If this works, we can remove the console_suspend_enabled handling
> from drivers/pmdomain/renesas/rmobile-sysc.c, and revert commit
> 309864dcf92b76fc ("genpd: imx: scu-pd: do not power off console if
> no_console_suspend").

OK, first I'll go with this patch and after things settles down with it
I'll propose changes for rmobile-sysc and imx. Is this ok for you?

Thank you,
Claudiu Beznea

> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
Re: [PATCH] serial: sh-sci: Call device_set_wakeup_path() for serial console
Posted by Geert Uytterhoeven 2 years, 2 months ago
Hi Claudiu,

On Tue, Apr 23, 2024 at 2:47 PM claudiu beznea <claudiu.beznea@tuxon.dev> wrote:
> On 23.04.2024 10:27, Geert Uytterhoeven wrote:
> > On Mon, Apr 22, 2024 at 1:11 PM Claudiu <claudiu.beznea@tuxon.dev> wrote:
> >> From: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> >>
> >> In case the SCI is used as a UART console, no_console_suspend is
> >> available in bootargs and SCI is part of a software-controlled power
> >> domain we need to call device_set_wakeup_path(). This lets the power
> >> domain core code knows that this domain should not be powered off
> >
> > know
> >
> >> durring system suspend. Otherwise, the SCI power domain is turned off,
> >
> > during
> >
> >> nothing is printed while suspending and the suspend/resume process is
> >> blocked. This was detected on the RZ/G3S SoC while adding support
> >> for power domains.
> >>
> >> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

> > If this works, we can remove the console_suspend_enabled handling
> > from drivers/pmdomain/renesas/rmobile-sysc.c, and revert commit
> > 309864dcf92b76fc ("genpd: imx: scu-pd: do not power off console if
> > no_console_suspend").
>
> OK, first I'll go with this patch and after things settles down with it
> I'll propose changes for rmobile-sysc and imx. Is this ok for you?

I have already made these changes to rmobile-sysc locally to test
your patch ;-)

It works fine on R-Mobile APE6, so
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds