# 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_PARISC
	tristate
	depends on SERIAL_8250 && PARISC
	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_PCILIB
	bool

config SERIAL_8250_PCI
	tristate "8250/16550 PCI device support"
	depends on SERIAL_8250 && PCI
	select SERIAL_8250_PCILIB
	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 MFD_SYSCON
	depends on ARCH_ASPEED || COMPILE_TEST
	select REGMAP
	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.

config SERIAL_8250_PCI1XXXX
	tristate "Microchip 8250 based serial port"
	depends on SERIAL_8250 && PCI
	select SERIAL_8250_PCILIB
	help
	 Select this option if you have a setup with Microchip PCIe
	 Switch with serial port enabled and wish to enable 8250
	 serial driver for the serial interface. This driver support
	 will ensure to support baud rates upto 1.5Mpbs.

#
# 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 "Freescale 16550 UART support" if COMPILE_TEST && !(PPC || ARM || ARM64)
	depends on SERIAL_8250_CONSOLE
	default PPC || ARM || ARM64
	help
	  Selecting this option enables a workaround for a break-detection
	  erratum for Freescale 16550 UARTs in the 8250 driver. It also
	  enables support for ACPI enumeration.

config SERIAL_8250_DFL
	tristate "DFL bus driver for Altera 16550 UART"
	depends on SERIAL_8250 && FPGA_DFL
	help
	  This option enables support for a Device Feature List (DFL) bus
	  driver for the Altera 16550 UART. One or more Altera 16550 UARTs
	  can be instantiated in a FPGA and then be discovered during
	  enumeration of the DFL bus.

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

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 ARCH_RENESAS || 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 UART found on
	  various Intel platforms such as:
	    - Intel Baytrail SoC
	    - Intel Braswell SoC
	    - Intel Quark X1000 SoC
	  that are not covered by the more generic SERIAL_8250_PCI option.

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 UART found on
	  Intel Medfield SOC and various other Intel platforms that is not
	  covered by the more generic SERIAL_8250_PCI option.

config SERIAL_8250_PERICOM
	tristate "Support for Pericom and Acces I/O serial ports"
	default SERIAL_8250
	depends on SERIAL_8250 && PCI
	help
	  Selecting this option will enable handling of the Pericom and Acces
	  I/O UARTs that are not covered by the more generic SERIAL_8250_PCI
	  option.

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.
