Re: [PATCH 5/6] tty: serial: Add linflexuart driver for S32V234

From: Will Deacon
Date: Thu Aug 08 2019 - 04:08:42 EST


On Fri, Aug 02, 2019 at 07:47:23PM +0000, Stefan-gabriel Mirea wrote:
> Introduce support for LINFlex driver, based on:
> - the version of Freescale LPUART driver after commit b3e3bf2ef2c7 ("Merge
> 4.0-rc7 into tty-next");
> - commit abf1e0a98083 ("tty: serial: fsl_lpuart: lock port on console
> write").
> In this basic version, the driver can be tested using initramfs and relies
> on the clocks and pin muxing set up by U-Boot.
>
> Remarks concerning the earlycon support:
>
> - LinFlexD does not allow character transmissions in the INIT mode (see
> section 47.4.2.1 in the reference manual[1]). Therefore, a mutual
> exclusion between the first linflex_setup_watermark/linflex_set_termios
> executions and linflex_earlycon_putchar was employed and the characters
> normally sent to earlycon during initialization are kept in a buffer and
> sent afterwards.
>
> - Empirically, character transmission is also forbidden within the last 1-2
> ms before entering the INIT mode, so we use an explicit timeout
> (PREINIT_DELAY) between linflex_earlycon_putchar and the first call to
> linflex_setup_watermark.
>
> - U-Boot currently uses the UART FIFO mode, while this driver makes the
> transition to the buffer mode. Therefore, the earlycon putchar function
> matches the U-Boot behavior before initializations and the Linux behavior
> after.
>
> [1] https://www.nxp.com/webapp/Download?colCode=S32V234RM
>
> Signed-off-by: Stoica Cosmin-Stefan <cosmin.stoica@xxxxxxx>
> Signed-off-by: Adrian.Nitu <adrian.nitu@xxxxxxxxxxxxx>
> Signed-off-by: Larisa Grigore <Larisa.Grigore@xxxxxxx>
> Signed-off-by: Ana Nedelcu <B56683@xxxxxxxxxxxxx>
> Signed-off-by: Mihaela Martinas <Mihaela.Martinas@xxxxxxxxxxxxx>
> Signed-off-by: Matthew Nunez <matthew.nunez@xxxxxxx>
> [stefan-gabriel.mirea@xxxxxxx: Reduced for upstreaming and implemented
> earlycon support]
> Signed-off-by: Stefan-Gabriel Mirea <stefan-gabriel.mirea@xxxxxxx>
> ---
> .../admin-guide/kernel-parameters.txt | 6 +
> drivers/tty/serial/Kconfig | 15 +
> drivers/tty/serial/Makefile | 1 +
> drivers/tty/serial/fsl_linflexuart.c | 956 ++++++++++++++++++
> include/uapi/linux/serial_core.h | 3 +
> 5 files changed, 981 insertions(+)
> create mode 100644 drivers/tty/serial/fsl_linflexuart.c
>
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index 46b826fcb5ad..4d545732aadc 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -1090,6 +1090,12 @@
> the framebuffer, pass the 'ram' option so that it is
> mapped with the correct attributes.
>
> + linflex,<addr>
> + Use early console provided by Freescale LinFlex UART
> + serial driver for NXP S32V234 SoCs. A valid base
> + address must be provided, and the serial port must
> + already be setup and configured.

Why isn't earlycon= sufficient for this?

Will