[PATCH/RFC 0/3] pmdomain: renesas: rmobile-sysc: Remove serial console handling
From: Geert Uytterhoeven
Date: Mon May 27 2024 - 08:41:55 EST
Hi all,
Since commit a47cf07f60dcb02d ("serial: core: Call
device_set_awake_path() for console port"), the serial driver properly
handles the case where the serial console is part of the awake path, and
it looked like we could start removing special serial console handling
from PM Domain drivers like the R-Mobile SYSC PM Domain driver.
Unfortunately the devil is in the details, as usual...
Earlycon relies on the serial port to be initialized by the firmware
and/or bootloader. Linux is not aware of any hardware dependencies that
must be met to keep the port working, and thus cannot guarantee they
stay met, until the full serial driver takes over.
E.g. all unused clocks and unused PM Domains are disabled in a late
initcall. As this happens after the full serial driver has taken over,
the serial port's clock and/or PM Domain are no longer deemed unused,
and this is typically not a problem.
However, if the serial port's clock or PM Domain is shared with another
device, and that other device is runtime-suspended before the full
serial driver has probed, the serial port's clock and/or PM Domain will
be disabled inadvertently. Any subsequent serial console output will
cause a crash or system lock-up. E.g. on R/SH-Mobile SoCs, the serial
ports share their PM Domain with several other I/O devices. After the
use of pwm (Armadillo-800-EVA) or i2c (KZM-A9-GT) during early boot,
before the full serial driver takes over, the PM Domain containing the
early serial port is powered down, causing a lock-up when booted with
"earlycon".
This RFC patch series aims to provide a mechanism for handling this, and
to fix it for the PM Domain case:
1. The first patch provides a mechanism to let the clock and/or PM
Domain subsystem or drivers handle this, by exporting the clock and
PM Domain dependencies for the serial port, as available in the
system's device tree,
2. The second patch introduces a new flag to handle a PM domain that
must be kept powered-on during early boot, and by setting this flag
if the PM Domain contains the serial console (originally I handled
this inside rmobile-sysc, but it turned out to be easy to
generalize this to other platforms in the core PM Domain code).
3. The third patch removes the no longer needed special console
handling from the R-Mobile SYSC PM Domain driver.
I did not fix the similar clock issue, as it is more complex (there can
be multiple clocks, and each clock provider can have its own value of
#clock-cells), and I do not need it for Renesas ARM platforms.
This has been tested on the APE6-EVM, Armadillo-800-EVA, and KZM-A9-GT
development boards, with and without earlycon, including s2ram with and
without no_console_suspend.
Notes:
- This should not be needed on RZ/G3S, where each serial port device
has its own PM Domain,
- drivers/clk/imx/clk.c and drivers/pmdomain/imx/scu-pd.c have special
handling for the of_stdout device, but is probably not affected, as
each serial port seems to share its PM Domain only with the serial
port's clock controller.
Thanks for your comments!
Geert Uytterhoeven (3):
earlycon: Export clock and PM Domain info from FDT
pmdomain: core: Avoid earlycon power-down
pmdomain: renesas: rmobile-sysc: Remove serial console handling
drivers/pmdomain/core.c | 24 ++++++++++++++++--
drivers/pmdomain/renesas/rmobile-sysc.c | 33 +------------------------
drivers/tty/serial/earlycon.c | 14 ++++++++++-
include/linux/pm_domain.h | 4 +++
include/linux/serial_core.h | 10 ++++++++
5 files changed, 50 insertions(+), 35 deletions(-)
--
2.34.1
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
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