# SPDX-License-Identifier: GPL-2.0
#
# The 8250/16550 serial drivers.  You shouldn't be in this list unless
# you somehow have an implicit or explicit dependency on SERIAL_8250.
#

config SERIAL_8250
	tristate "8250/16550 and compatible serial support"
	depends on !S390
	select SERIAL_CORE
	select SERIAL_MCTRL_GPIO if GPIOLIB
	help
	  This selects whether you want to include the driver for the standard
	  serial ports.  The standard answer is Y.  People who might say N
	  here are those that are setting up dedicated Ethernet WWW/FTP
	  servers, or users that have one of the various bus mice instead of a
	  serial mouse and don't intend to use their machine's standard serial
	  port for anything.

	  To compile this driver as a module, choose M here: the
	  module will be called 8250.
	  [WARNING: Do not compile this driver as a module if you are using
	  non-standard serial ports, since the configuration information will
	  be lost when the driver is unloaded.  This limitation may be lifted
	  in the future.]

	  BTW1: If you have a mouseman serial mouse which is not recognized by
	  the X window system, try running gpm first.

	  BTW2: If you intend to use a software modem (also called Winmodem)
	  under Linux, forget it.  These modems are crippled and require
	  proprietary drivers which are only available under Windows.

	  Most people will say Y or M here, so that they can use serial mice,
	  modems and similar devices connecting to the standard serial ports.

config SERIAL_8250_DEPRECATED_OPTIONS
	bool "Support 8250_core.* kernel options (DEPRECATED)"
	depends on SERIAL_8250
	default y
	help
	  In 3.7 we renamed 8250 to 8250_core by mistake, so now we have to
	  accept kernel parameters in both forms like 8250_core.nr_uarts=4 and
	  8250.nr_uarts=4. We now renamed the module back to 8250, but if
	  anybody noticed in 3.7 and changed their userspace we still have to
	  keep the 8250_core.* options around until they revert the changes
	  they already did.

	  If 8250 is built as a module, this adds 8250_core alias instead. 

	  If you did not notice yet and/or you have userspace from pre-3.7, it
	  is safe (and recommended) to say N here.

config SERIAL_8250_PNP
	bool "8250/16550 PNP device support" if EXPERT
	depends on SERIAL_8250 && PNP
	default y
	help
	  This builds standard PNP serial support. You may be able to
	  disable this feature if you only need legacy serial support.

config SERIAL_8250_16550A_VARIANTS
	bool "Support for variants of the 16550A serial port"
	depends on SERIAL_8250
	default !X86
	help
	  The 8250 driver can probe for many variants of the venerable 16550A
	  serial port. Doing so takes additional time at boot.

	  On modern systems, especially those using serial only for a simple
	  console, you can say N here.

config SERIAL_8250_FINTEK
	bool "Support for Fintek F81216A LPC to 4 UART RS485 API"
	depends on SERIAL_8250
	help
	  Selecting this option will add support for the RS485 capabilities
	  of the Fintek F81216A LPC to 4 UART.

	  If this option is not selected the device will be configured as a
	  standard 16550A serial port.

	  If unsure, say N.

config SERIAL_8250_CONSOLE
	bool "Console on 8250/16550 and compatible serial port"
	depends on SERIAL_8250=y
	select SERIAL_CORE_CONSOLE
	select SERIAL_EARLYCON
	help
	  If you say Y here, it will be possible to use a serial port as the
	  system console (the system console is the device which receives all
	  kernel messages and warnings and which allows logins in single user
	  mode). This could be useful if some terminal or printer is connected
	  to that serial port.

	  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=ttyS1". (Try "man bootparam" or see the documentation of
	  your boot loader (grub or lilo or loadlin) about how to pass options
	  to the kernel at boot time.)

	  If you don't have a VGA card installed and you say Y here, the
	  kernel will automatically use the first serial line, /dev/ttyS0, as
	  system console.

	  You can set that using a kernel command line option such as
	  "console=uart8250,io,0x3f8,9600n8"
	  "console=uart8250,mmio,0xff5e0000,115200n8".
	  and it will switch to normal serial console when the corresponding
	  port is ready.
	  "earlycon=uart8250,io,0x3f8,9600n8"
	  "earlycon=uart8250,mmio,0xff5e0000,115200n8".
	  it will not only setup early console.

	  If unsure, say N.

config SERIAL_8250_GSC
	tristate
	depends on SERIAL_8250 && GSC
	default SERIAL_8250

config SERIAL_8250_DMA
	bool "DMA support for 16550 compatible UART controllers" if EXPERT
	depends on SERIAL_8250 && DMADEVICES=y
	default SERIAL_8250
	help
	  This builds DMA support that can be used with 8250/16650
	  compatible UART controllers that support DMA signaling.

config SERIAL_8250_PCI
	tristate "8250/16550 PCI device support"
	depends on SERIAL_8250 && PCI
	default SERIAL_8250
	help
	  This builds standard PCI serial support. You may be able to
	  disable this feature if you only need legacy serial support.
	  Saves about 9K.
	  Note that serial ports on NetMos 9835 Multi-I/O cards are handled
	  by the parport_serial driver, enabled with CONFIG_PARPORT_SERIAL.

config SERIAL_8250_EXAR
	tristate "8250/16550 Exar/Commtech PCI/PCIe device support"
	depends on SERIAL_8250_PCI
	default SERIAL_8250
	help
	  This builds support for XR17C1xx, XR17V3xx and some Commtech
	  422x PCIe serial cards that are not covered by the more generic
	  SERIAL_8250_PCI option.

config SERIAL_8250_HP300
	tristate
	depends on SERIAL_8250 && HP300
	default SERIAL_8250

config SERIAL_8250_CS
	tristate "8250/16550 PCMCIA device support"
	depends on PCMCIA && SERIAL_8250
	help
	  Say Y here to enable support for 16-bit PCMCIA serial devices,
	  including serial port cards, modems, and the modem functions of
	  multi-function Ethernet/modem cards. (PCMCIA- or PC-cards are
	  credit-card size devices often used with laptops.)

	  To compile this driver as a module, choose M here: the
	  module will be called serial_cs.

	  If unsure, say N.

config SERIAL_8250_MEN_MCB
	tristate "MEN MCB UART device support"
	depends on MCB && SERIAL_8250
	help
	  This enables support for FPGA based UARTs found on many MEN
	  boards. This driver enables support for the 16z025, 16z057
	  and 16z125 UARTs.

	  To compile this driver as a module, chose M here: the
	  module will be called 8250_men_mcb.


config SERIAL_8250_NR_UARTS
	int "Maximum number of 8250/16550 serial ports"
	depends on SERIAL_8250
	default "4"
	help
	  Set this to the number of serial ports you want the driver
	  to support.  This includes any ports discovered via ACPI or
	  PCI enumeration and any ports that may be added at run-time
	  via hot-plug, or any ISA multi-port serial cards.

config SERIAL_8250_RUNTIME_UARTS
	int "Number of 8250/16550 serial ports to register at runtime"
	depends on SERIAL_8250
	range 0 SERIAL_8250_NR_UARTS
	default "4"
	help
	  Set this to the maximum number of serial ports you want
	  the kernel to register at boot time.  This can be overridden
	  with the module parameter "nr_uarts", or boot-time parameter
	  8250.nr_uarts

config SERIAL_8250_EXTENDED
	bool "Extended 8250/16550 serial driver options"
	depends on SERIAL_8250
	help
	  If you wish to use any non-standard features of the standard "dumb"
	  driver, say Y here. This includes HUB6 support, shared serial
	  interrupts, special multiport support, support for more than the
	  four COM 1/2/3/4 boards, etc.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about serial driver options. If unsure, say N.

config SERIAL_8250_MANY_PORTS
	bool "Support more than 4 legacy serial ports"
	depends on SERIAL_8250_EXTENDED && !IA64
	help
	  Say Y here if you have dumb serial boards other than the four
	  standard COM 1/2/3/4 ports. This may happen if you have an AST
	  FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available
	  from <https://www.tldp.org/docs.html#howto>), or other custom
	  serial port hardware which acts similar to standard serial port
	  hardware. If you only use the standard COM 1/2/3/4 ports, you can
	  say N here to save some memory. You can also say Y if you have an
	  "intelligent" multiport card such as Digiboards, etc.

#
# Multi-port serial cards
#

config SERIAL_8250_FOURPORT
	tristate "Support Fourport cards"
	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
	help
	  Say Y here if you have an AST FourPort serial board.

	  To compile this driver as a module, choose M here: the module
	  will be called 8250_fourport.

config SERIAL_8250_ACCENT
	tristate "Support Accent cards"
	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
	help
	  Say Y here if you have an Accent Async serial board.

	  To compile this driver as a module, choose M here: the module
	  will be called 8250_accent.

config SERIAL_8250_ASPEED_VUART
	tristate "Aspeed Virtual UART"
	depends on SERIAL_8250
	depends on OF
	depends on REGMAP && MFD_SYSCON
	help
	  If you want to use the virtual UART (VUART) device on Aspeed
	  BMC platforms, enable this option. This enables the 16550A-
	  compatible device on the local LPC bus, giving a UART device
	  with no physical RS232 connections.

config SERIAL_8250_BOCA
	tristate "Support Boca cards"
	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
	help
	  Say Y here if you have a Boca serial board.  Please read the Boca
	  mini-HOWTO, available from <https://www.tldp.org/docs.html#howto>

	  To compile this driver as a module, choose M here: the module
	  will be called 8250_boca.

config SERIAL_8250_EXAR_ST16C554
	tristate "Support Exar ST16C554/554D Quad UART"
	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
	help
	  The Uplogix Envoy TU301 uses this Exar Quad UART.  If you are
	  tinkering with your Envoy TU301, or have a machine with this UART,
	  say Y here.

	  To compile this driver as a module, choose M here: the module
	  will be called 8250_exar_st16c554.

config SERIAL_8250_HUB6
	tristate "Support Hub6 cards"
	depends on SERIAL_8250 != n && ISA && SERIAL_8250_MANY_PORTS
	help
	  Say Y here if you have a HUB6 serial board.

	  To compile this driver as a module, choose M here: the module
	  will be called 8250_hub6.

#
# Misc. options/drivers.
#

config SERIAL_8250_SHARE_IRQ
	bool "Support for sharing serial interrupts"
	depends on SERIAL_8250_EXTENDED
	help
	  Some serial boards have hardware support which allows multiple dumb
	  serial ports on the same board to share a single IRQ. To enable
	  support for this in the serial driver, say Y here.

config SERIAL_8250_DETECT_IRQ
	bool "Autodetect IRQ on standard ports (unsafe)"
	depends on SERIAL_8250_EXTENDED
	help
	  Say Y here if you want the kernel to try to guess which IRQ
	  to use for your serial port.

	  This is considered unsafe; it is far better to configure the IRQ in
	  a boot script using the setserial command.

	  If unsure, say N.

config SERIAL_8250_RSA
	bool "Support RSA serial ports"
	depends on SERIAL_8250_EXTENDED
	help
	  Say Y here if you have a IODATA RSA-DV II/S ISA card and
	  would like to use its >115kbps speeds.
	  You will need to provide module parameter "probe_rsa", or boot-time
	  parameter 8250.probe_rsa with I/O addresses of this card then.

	  If you don't have such card, or if unsure, say N.

config SERIAL_8250_DWLIB
	bool

config SERIAL_8250_ACORN
	tristate "Acorn expansion card serial port support"
	depends on ARCH_ACORN && SERIAL_8250
	help
	  If you have an Atomwide Serial card or Serial Port card for an Acorn
	  system, say Y to this option.  The driver can handle 1, 2, or 3 port
	  cards.  If unsure, say N.

config SERIAL_8250_BCM2835AUX
	tristate "BCM2835 auxiliar mini UART support"
	depends on ARCH_BCM2835 || COMPILE_TEST
	depends on SERIAL_8250 && SERIAL_8250_SHARE_IRQ
	help
	  Support for the BCM2835 auxiliar mini UART.

	  Features and limitations of the UART are
	    Registers are similar to 16650 registers,
	      set bits in the control registers that are unsupported
	      are ignored and read back as 0
	    7/8 bit operation with 1 start and 1 stop bit
	    8 symbols deep fifo for rx and tx
	    SW controlled RTS and SW readable CTS
	    Clock rate derived from system clock
	    Uses 8 times oversampling (compared to 16 times for 16650)
	    Missing break detection (but break generation)
	    Missing framing error detection
	    Missing parity bit
	    Missing receive time-out interrupt
	    Missing DCD, DSR, DTR and RI signals

	  If unsure, say N.

config SERIAL_8250_FSL
	bool
	depends on SERIAL_8250_CONSOLE
	default PPC || ARM || ARM64 || COMPILE_TEST

config SERIAL_8250_DW
	tristate "Support for Synopsys DesignWare 8250 quirks"
	depends on SERIAL_8250
	select SERIAL_8250_DWLIB
	help
	  Selecting this option will enable handling of the extra features
	  present in the Synopsys DesignWare APB UART.

config SERIAL_8250_EM
	tristate "Support for Emma Mobile integrated serial port"
	depends on SERIAL_8250 && HAVE_CLK
	depends on ARM || COMPILE_TEST
	help
	  Selecting this option will add support for the integrated serial
	  port hardware found on the Emma Mobile line of processors.
	  If unsure, say N.

config SERIAL_8250_IOC3
	tristate "SGI IOC3 8250 UART support"
	depends on SERIAL_8250
	depends on SGI_MFD_IOC3 || COMPILE_TEST
	select SERIAL_8250_EXTENDED
	select SERIAL_8250_SHARE_IRQ
	help
	  Enable this if you have a SGI Origin or Octane machine. This module
	  provides basic serial support by directly driving the UART chip
	  behind the IOC3 device on those systems.  Maximum baud speed is
	  38400bps using this driver.

config SERIAL_8250_RT288X
	bool "Ralink RT288x/RT305x/RT3662/RT3883 serial port support"
	depends on SERIAL_8250
	default y if MIPS_ALCHEMY || SOC_RT288X || SOC_RT305X || SOC_RT3883 || SOC_MT7620
	help
	  Selecting this option will add support for the alternate register
	  layout used by Ralink RT288x/RT305x, Alchemy Au1xxx, and some others.
	  If unsure, say N.

config SERIAL_8250_OMAP
	tristate "Support for OMAP internal UART (8250 based driver)"
	depends on SERIAL_8250
	depends on ARCH_OMAP2PLUS || ARCH_K3 || COMPILE_TEST
	help
	  If you have a machine based on an Texas Instruments OMAP CPU you
	  can enable its onboard serial ports by enabling this option.

	  This driver uses ttyS instead of ttyO.

config SERIAL_8250_OMAP_TTYO_FIXUP
	bool "Replace ttyO with ttyS"
	depends on SERIAL_8250_OMAP=y && SERIAL_8250_CONSOLE
	default y
	help
	  This option replaces the "console=ttyO" argument with the matching
	  ttyS argument if the user did not specified it on the command line.
	  This ensures that the user can see the kernel output during boot
	  which he wouldn't see otherwise. The getty has still to be configured
	  for ttyS instead of ttyO regardless of this option.
	  This option is intended for people who "automatically" enable this
	  driver without knowing that this driver requires a different console=
	  argument. If you read this, please keep this option disabled and
	  instead update your kernel command line. If you prepare a kernel for a
	  distribution or other kind of larger user base then you probably want
	  to keep this option enabled. Otherwise people might complain about a
	  not booting kernel because the serial console remains silent in case
	  they forgot to update the command line.

config SERIAL_8250_LPC18XX
	tristate "NXP LPC18xx/43xx serial port support"
	depends on SERIAL_8250 && OF && (ARCH_LPC18XX || COMPILE_TEST)
	default ARCH_LPC18XX
	help
	  If you have a LPC18xx/43xx based board and want to use the
	  serial port, say Y to this option. If unsure, say Y.

config SERIAL_8250_MT6577
	tristate "Mediatek serial port support"
	depends on SERIAL_8250
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  If you have a Mediatek based board and want to use the
	  serial port, say Y to this option. If unsure, say N.

config SERIAL_8250_UNIPHIER
	tristate "Support for UniPhier on-chip UART"
	depends on SERIAL_8250
	depends on ARCH_UNIPHIER || COMPILE_TEST
	help
	  If you have a UniPhier based board and want to use the on-chip
	  serial ports, say Y to this option. If unsure, say N.

config SERIAL_8250_INGENIC
	tristate "Support for Ingenic SoC serial ports"
	depends on SERIAL_8250
	depends on OF_FLATTREE
	depends on MIPS || COMPILE_TEST
	help
	  If you have a system using an Ingenic SoC and wish to make use of
	  its UARTs, say Y to this option. If unsure, say N.

config SERIAL_8250_LPSS
	tristate "Support for serial ports on Intel LPSS platforms"
	default SERIAL_8250
	depends on SERIAL_8250 && PCI
	depends on X86 || COMPILE_TEST
	select SERIAL_8250_DWLIB
	select DW_DMAC_CORE if SERIAL_8250_DMA
	select DW_DMAC_PCI if (SERIAL_8250_DMA && X86_INTEL_LPSS)
	select RATIONAL
	help
	  Selecting this option will enable handling of the extra features
	  present on the UART found on various Intel platforms such as:
	    - Intel Baytrail SoC
	    - Intel Braswell SoC
	    - Intel Quark X1000 SoC

config SERIAL_8250_MID
	tristate "Support for serial ports on Intel MID platforms"
	default SERIAL_8250
	depends on SERIAL_8250 && PCI
	depends on X86 || COMPILE_TEST
	select HSU_DMA if SERIAL_8250_DMA
	select HSU_DMA_PCI if (HSU_DMA && X86_INTEL_MID)
	select RATIONAL
	help
	  Selecting this option will enable handling of the extra features
	  present on the UART found on Intel Medfield SOC and various other
	  Intel platforms.

config SERIAL_8250_PXA
	tristate "PXA serial port support"
	depends on SERIAL_8250
	depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST
	help
	  If you have a machine based on an Intel XScale PXA2xx CPU you can
	  enable its onboard serial ports by enabling this option. The option is
	  applicable to both devicetree and legacy boards, and early console is
	  part of its support.

config SERIAL_8250_TEGRA
	tristate "8250 support for Tegra serial ports"
	default SERIAL_8250
	depends on SERIAL_8250
	depends on ARCH_TEGRA || COMPILE_TEST
	help
	  Select this option if you have machine with an NVIDIA Tegra SoC and
	  wish to enable 8250 serial driver for the Tegra serial interfaces.

config SERIAL_8250_BCM7271
	tristate "Broadcom 8250 based serial port"
	depends on SERIAL_8250 && (ARCH_BRCMSTB || COMPILE_TEST)
	default ARCH_BRCMSTB
	help
	  If you have a Broadcom STB based board and want to use the
	  enhanced features of the Broadcom 8250 based serial port,
	  including DMA support and high accuracy BAUD rates, say
	  Y to this option. If unsure, say N.

config SERIAL_OF_PLATFORM
	tristate "Devicetree based probing for 8250 ports"
	depends on SERIAL_8250 && OF
	help
	  This option is used for all 8250 compatible serial ports that
	  are probed through devicetree, including Open Firmware based
	  PowerPC systems and embedded systems on architectures using the
	  flattened device tree format.
