Commit 09864c1c authored by Stefan-gabriel Mirea's avatar Stefan-gabriel Mirea Committed by Greg Kroah-Hartman

tty: serial: Add linflexuart driver for S32V234

Introduce support for LINFlex driver, based on:
- the version of Freescale LPUART driver after commit b3e3bf2e ("Merge
  4.0-rc7 into tty-next");
- commit abf1e0a9 ("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=S32V234RMSigned-off-by: default avatarStoica Cosmin-Stefan <cosmin.stoica@nxp.com>
Signed-off-by: default avatarAdrian.Nitu <adrian.nitu@freescale.com>
Signed-off-by: default avatarLarisa Grigore <Larisa.Grigore@nxp.com>
Signed-off-by: default avatarAna Nedelcu <B56683@freescale.com>
Signed-off-by: default avatarMihaela Martinas <Mihaela.Martinas@freescale.com>
Signed-off-by: default avatarMatthew Nunez <matthew.nunez@nxp.com>
[stefan-gabriel.mirea@nxp.com: Reduced for upstreaming and implemented
                               earlycon support]
Signed-off-by: default avatarStefan-Gabriel Mirea <stefan-gabriel.mirea@nxp.com>
Link: https://lore.kernel.org/r/20190809112853.15846-6-stefan-gabriel.mirea@nxp.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8d41ab87
...@@ -1090,6 +1090,12 @@ ...@@ -1090,6 +1090,12 @@
the framebuffer, pass the 'ram' option so that it is the framebuffer, pass the 'ram' option so that it is
mapped with the correct attributes. 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.
earlyprintk= [X86,SH,ARM,M68k,S390] earlyprintk= [X86,SH,ARM,M68k,S390]
earlyprintk=vga earlyprintk=vga
earlyprintk=sclp earlyprintk=sclp
......
...@@ -1416,6 +1416,21 @@ config SERIAL_FSL_LPUART_CONSOLE ...@@ -1416,6 +1416,21 @@ config SERIAL_FSL_LPUART_CONSOLE
If you have enabled the lpuart serial port on the Freescale SoCs, If you have enabled the lpuart serial port on the Freescale SoCs,
you can make it the console by answering Y to this option. you can make it the console by answering Y to this option.
config SERIAL_FSL_LINFLEXUART
tristate "Freescale linflexuart serial port support"
select SERIAL_CORE
help
Support for the on-chip linflexuart on some Freescale SOCs.
config SERIAL_FSL_LINFLEXUART_CONSOLE
bool "Console on Freescale linflexuart serial port"
depends on SERIAL_FSL_LINFLEXUART=y
select SERIAL_CORE_CONSOLE
select SERIAL_EARLYCON
help
If you have enabled the linflexuart serial port on the Freescale
SoCs, you can make it the console by answering Y to this option.
config SERIAL_CONEXANT_DIGICOLOR config SERIAL_CONEXANT_DIGICOLOR
tristate "Conexant Digicolor CX92xxx USART serial port support" tristate "Conexant Digicolor CX92xxx USART serial port support"
depends on OF depends on OF
......
...@@ -80,6 +80,7 @@ obj-$(CONFIG_SERIAL_EFM32_UART) += efm32-uart.o ...@@ -80,6 +80,7 @@ obj-$(CONFIG_SERIAL_EFM32_UART) += efm32-uart.o
obj-$(CONFIG_SERIAL_ARC) += arc_uart.o obj-$(CONFIG_SERIAL_ARC) += arc_uart.o
obj-$(CONFIG_SERIAL_RP2) += rp2.o obj-$(CONFIG_SERIAL_RP2) += rp2.o
obj-$(CONFIG_SERIAL_FSL_LPUART) += fsl_lpuart.o obj-$(CONFIG_SERIAL_FSL_LPUART) += fsl_lpuart.o
obj-$(CONFIG_SERIAL_FSL_LINFLEXUART) += fsl_linflexuart.o
obj-$(CONFIG_SERIAL_CONEXANT_DIGICOLOR) += digicolor-usart.o obj-$(CONFIG_SERIAL_CONEXANT_DIGICOLOR) += digicolor-usart.o
obj-$(CONFIG_SERIAL_MEN_Z135) += men_z135_uart.o obj-$(CONFIG_SERIAL_MEN_Z135) += men_z135_uart.o
obj-$(CONFIG_SERIAL_SPRD) += sprd_serial.o obj-$(CONFIG_SERIAL_SPRD) += sprd_serial.o
......
This diff is collapsed.
...@@ -290,4 +290,7 @@ ...@@ -290,4 +290,7 @@
/* Sunix UART */ /* Sunix UART */
#define PORT_SUNIX 121 #define PORT_SUNIX 121
/* Freescale Linflex UART */
#define PORT_LINFLEXUART 121
#endif /* _UAPILINUX_SERIAL_CORE_H */ #endif /* _UAPILINUX_SERIAL_CORE_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment