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

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=S32V234RM



Signed-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.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8d41ab87
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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
+15 −0
Original line number Original line Diff line number Diff line
@@ -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
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+942 −0

File added.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Original line Diff line number Diff line
@@ -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 */