Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45c054d0 authored by Paul Walmsley's avatar Paul Walmsley Committed by Greg Kroah-Hartman
Browse files

tty: serial: add driver for the SiFive UART

Add a serial driver for the SiFive UART, found on SiFive FU540 devices
(among others).

The underlying serial IP block is relatively basic, and currently does
not support serial break detection.  Further information on the IP
block can be found in the documentation and Chisel sources:

    https://static.dev.sifive.com/FU540-C000-v1.0.pdf

    https://github.com/sifive/sifive-blocks/tree/master/src/main/scala/devices/uart



This driver was written in collaboration with Wesley Terpstra
<wesley@sifive.com>.

Tested on a SiFive HiFive Unleashed A00 board, using BBL and the open-
source FSBL (using a DT file based on what's targeted for mainline).

This revision incorporates changes based on comments by Julia Lawall
<julia.lawall@lip6.fr>, Emil Renner Berthing <kernel@esmil.dk>, and
Andreas Schwab <schwab@suse.de>.  Thanks also to Andreas for testing
the driver with his userspace and reporting a bug with the
set_termios implementation.

Signed-off-by: default avatarPaul Walmsley <paul.walmsley@sifive.com>
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Palmer Dabbelt <palmer@sifive.com>
Cc: Wesley Terpstra <wesley@sifive.com>
Cc: linux-serial@vger.kernel.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: Julia Lawall <julia.lawall@lip6.fr>
Cc: Emil Renner Berthing <kernel@esmil.dk>
Cc: Andreas Schwab <schwab@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e5c8fe55
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -1094,6 +1094,30 @@ config SERIAL_OMAP_CONSOLE
	  your boot loader about how to pass options to the kernel at
	  boot time.)

config SERIAL_SIFIVE
	tristate "SiFive UART support"
	depends on OF
	select SERIAL_CORE
	help
	  Select this option if you are building a kernel for a device that
	  contains a SiFive UART IP block.  This type of UART is present on
	  SiFive FU540 SoCs, among others.

config SERIAL_SIFIVE_CONSOLE
	bool "Console on SiFive UART"
	depends on SERIAL_SIFIVE=y
	select SERIAL_CORE_CONSOLE
	help
	  Select this option if you would like to use a SiFive UART as the
	  system console.

	  Even if you say Y here, the currently visible virtual console
	  (/dev/tty0) will still be used as the system console by default, but
	  you can alter that using a kernel command line option such as
	  "console=ttySIFx". (Try "man bootparam" or see the documentation of
	  your boot loader about how to pass options to the kernel at
	  boot time.)

config SERIAL_LANTIQ
	bool "Lantiq serial driver"
	depends on LANTIQ
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ obj-$(CONFIG_SERIAL_MPS2_UART) += mps2-uart.o
obj-$(CONFIG_SERIAL_OWL)	+= owl-uart.o
obj-$(CONFIG_SERIAL_RDA)	+= rda-uart.o
obj-$(CONFIG_SERIAL_MILBEAUT_USIO) += milbeaut_usio.o
obj-$(CONFIG_SERIAL_SIFIVE)	+= sifive.o

# GPIOLIB helpers for modem control lines
obj-$(CONFIG_SERIAL_MCTRL_GPIO)	+= serial_mctrl_gpio.o
+1056 −0

File added.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -290,4 +290,7 @@
/* Socionext Milbeaut UART */
#define PORT_MLB_USIO	119

/* SiFive UART */
#define PORT_SIFIVE_V0	120

#endif /* _UAPILINUX_SERIAL_CORE_H */