aboutsummaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
authorGravatar Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> 2024-04-30 12:59:30 +0300
committerGravatar Greg Kroah-Hartman <gregkh@linuxfoundation.org> 2024-05-04 18:11:58 +0200
commita47cf07f60dcb02d01daa19ecf2d5775d6cd12db (patch)
tree1cb413dbaba31b4490d7d42dd9484fd956277b4e /drivers/tty
parentdt-bindings: serial: brcm,bcm2835-aux-uart: convert to dtschema (diff)
downloadlinux-a47cf07f60dcb02d01daa19ecf2d5775d6cd12db.tar.gz
linux-a47cf07f60dcb02d01daa19ecf2d5775d6cd12db.tar.bz2
linux-a47cf07f60dcb02d01daa19ecf2d5775d6cd12db.zip
serial: core: Call device_set_awake_path() for console port
In case the UART port is used as a console, no_console_suspend is available in bootargs and UART port is part of a software-controlled power domain we need to call device_set_awake_path(). This lets the power domain core code know that this domain should not be powered off during system suspend. Otherwise, the UART port power domain is turned off, nothing is printed while suspending and the suspend/resume process is blocked. This was detected on the Renesas RZ/G3S SoC while adding support for power domains. Based on code investigation (on v6.9-rc5), this issue is present on other SoCs (e.g., Renesas R-Mobile A1 [1], IMX8QXP [2]) and different SoCs have particular implementation to handle it. Due to this the patch added the call of device_set_awake_path() in uart_suspend_port() instead of having it in the platform specific UART driver. [1] drivers/pmdomain/renesas/rmobile-sysc.c:116 [2] drivers/pmdomain/imx/scu-pd.c:357 Suggested-by: Ulf Hansson <ulf.hansson@linaro.org> Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Tony Lindgren <tony.lindgren@linux.intel.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com> Link: https://lore.kernel.org/r/20240430095930.2806067-1-claudiu.beznea.uj@bp.renesas.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/serial_core.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 8a76f378c445..84ae70d52b05 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -2408,6 +2408,7 @@ int uart_suspend_port(struct uart_driver *drv, struct uart_port *uport)
uport->ops->stop_rx(uport);
uart_port_unlock_irq(uport);
}
+ device_set_awake_path(uport->dev);
goto unlock;
}