#
# Serial device configuration
#

menuconfig SERIAL
	bool "Serial"
	default y
	help
	  Enable support for serial drivers. This allows use of a serial UART
	  for displaying messages while U-Boot is running. It also brings in
	  printf() and panic() functions. This should normally be enabled
	  unless there are space reasons not to. If you just need to disable
	  the console you can adjust the stdout environment variable or use
	  SILENT_CONSOLE.

if SERIAL

config BAUDRATE
	int "Default baudrate"
	default 115200
	help
	  Select a default baudrate, where "default" has a driver-specific
	  meaning of either setting the baudrate for the early debug UART
	  in the SPL stage (most drivers) or for choosing a default baudrate
	  in the absence of an environment setting (serial_mxc.c).

config REQUIRE_SERIAL_CONSOLE
	bool "Require a serial port for console"
	# Running without a serial console is not supported by the
	# non-dm serial code
	depends on DM_SERIAL
	default y
	help
	  Require a serial port for the console, and panic if none is found
	  during serial port initialization (default y). Set this to n on
	  boards which have no debug serial port whatsoever.

config SPECIFY_CONSOLE_INDEX
	bool "Specify the port number used for console"
	default y if !DM_SERIAL || (SPL && !SPL_DM_SERIAL) || \
		(TPL && !TPL_DM_SERIAL)
	help
	  In various cases, we need to specify which of the UART devices that
	  a board or SoC has available are to be used for the console device
	  in U-Boot.

config SERIAL_PRESENT
	bool "Provide a serial driver"
	depends on DM_SERIAL
	default y
	help
	  In very space-constrained devices even the full UART driver is too
	  large. In this case the debug UART can still be used in some cases.
	  This option enables the full UART in U-Boot, so if is it disabled,
	  the full UART driver will be omitted, thus saving space.

config SPL_SERIAL_PRESENT
	bool "Provide a serial driver in SPL"
	depends on DM_SERIAL && SPL
	default y
	help
	  In very space-constrained devices even the full UART driver is too
	  large. In this case the debug UART can still be used in some cases.
	  This option enables the full UART in SPL, so if is it disabled,
	  the full UART driver will be omitted, thus saving space.

config TPL_SERIAL_PRESENT
	bool "Provide a serial driver in TPL"
	depends on DM_SERIAL && TPL
	default y
	help
	  In very space-constrained devices even the full UART driver is too
	  large. In this case the debug UART can still be used in some cases.
	  This option enables the full UART in TPL, so if is it disabled,
	  the full UART driver will be omitted, thus saving space.

# Logic to allow us to use the imply keyword to set what the default port
# should be.  The default is otherwise 1.
config CONS_INDEX_0
	bool

config CONS_INDEX_2
	bool

config CONS_INDEX_3
	bool

config CONS_INDEX_4
	bool

config CONS_INDEX_5
	bool

config CONS_INDEX_6
	bool

config CONS_INDEX
	int "UART used for console"
	depends on SPECIFY_CONSOLE_INDEX
	range 0 6
	default 0 if CONS_INDEX_0
	default 2 if CONS_INDEX_2
	default 3 if CONS_INDEX_3
	default 4 if CONS_INDEX_4
	default 5 if CONS_INDEX_5
	default 6 if CONS_INDEX_6
	default 1
	help
	  Set this to match the UART number of the serial console.

config DM_SERIAL
	bool "Enable Driver Model for serial drivers"
	depends on DM
	select SYS_MALLOC_F
	help
	  Enable driver model for serial. This replaces
	  drivers/serial/serial.c with the serial uclass, which
	  implements serial_putc() etc. The uclass interface is
	  defined in include/serial.h.

config SERIAL_RX_BUFFER
	bool "Enable RX buffer for serial input"
	depends on DM_SERIAL
	help
	  Enable RX buffer support for the serial driver. This enables
	  pasting longer strings, even when the RX FIFO of the UART is
	  not big enough (e.g. 16 bytes on the normal NS16550).

config SERIAL_RX_BUFFER_SIZE
	int "RX buffer size"
	depends on SERIAL_RX_BUFFER
	default 256
	help
	  The size of the RX buffer (needs to be power of 2)

config SERIAL_PUTS
	bool "Enable printing strings all at once"
	depends on DM_SERIAL
	help
	  Some serial drivers are much more efficient when printing multiple
	  characters at once rather than printing characters individually. This
	  can be because they can load a fifo, or because individual print
	  calls have a constant overhead. With this option set, the serial
	  subsystem will try to provide serial drivers with as many characters
	  at once as possible, instead of printing characters one by one. Most
	  serial drivers do not need this config to print efficiently. If
	  unsure, say N.

config SERIAL_SEARCH_ALL
	bool "Search for serial devices after default one failed"
	depends on DM_SERIAL
	help
	  The serial subsystem only searches for a single serial device
	  that was instantiated, but does not check whether it was probed
	  correctly. With this option set, we make successful probing
	  mandatory and search for fallback serial devices if the default
	  device does not work.

	  If unsure, say N.

config SERIAL_PROBE_ALL
	bool "Probe all available serial devices"
	depends on DM_SERIAL
	help
	  The serial subsystem only probes for a single serial device,
	  but does not probe for other remaining serial devices.
	  With this option set, we make probing and searching for
	  all available devices optional.
	  Normally, U-Boot talks to one serial port at a time, but SBSA
	  compliant UART devices like PL011 require initialization
	  by firmware and to let the kernel use serial port for sending
	  and receiving the characters.

	  If unsure, say N.

config SPL_DM_SERIAL
	bool "Enable Driver Model for serial drivers in SPL"
	depends on DM_SERIAL && SPL_DM
	select SYS_SPL_MALLOC_F
	default y
	help
	  Enable driver model for serial in SPL. This replaces
	  drivers/serial/serial.c with the serial uclass, which
	  implements serial_putc() etc. The uclass interface is
	  defined in include/serial.h.

config TPL_DM_SERIAL
	bool "Enable Driver Model for serial drivers in TPL"
	depends on DM_SERIAL && TPL_DM
	select SYS_TPL_MALLOC_F
	default y if TPL && DM_SERIAL
	help
	  Enable driver model for serial in TPL. This replaces
	  drivers/serial/serial.c with the serial uclass, which
	  implements serial_putc() etc. The uclass interface is
	  defined in include/serial.h.

config DEBUG_UART
	bool "Enable an early debug UART for debugging"
	help
	  The debug UART is intended for use very early in U-Boot to debug
	  problems when an ICE or other debug mechanism is not available.

	  To use it you should:
	  - Make sure your UART supports this interface
	  - Enable CONFIG_DEBUG_UART
	  - Enable the CONFIG for your UART to tell it to provide this interface
	        (e.g. CONFIG_DEBUG_UART_NS16550)
	  - Define the required settings as needed (see below)
	  - Call debug_uart_init() before use
	  - Call debug_uart_putc() to output a character

	  Depending on your platform it may be possible to use this UART before
	  a stack is available.

	  If your UART does not support this interface you can probably add
	  support quite easily. Remember that you cannot use driver model and
	  it is preferred to use no stack.

	  You must not use this UART once driver model is working and the
	  serial drivers are up and running (done in serial_init()). Otherwise
	  the drivers may conflict and you will get strange output.

choice
	prompt "Select which UART will provide the debug UART"
	depends on DEBUG_UART
	default DEBUG_UART_NS16550

config DEBUG_UART_ALTERA_JTAGUART
	bool "Altera JTAG UART"
	depends on ALTERA_JTAG_UART
	help
	  Select this to enable a debug UART using the altera_jtag_uart driver.
	  You will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_ALTERA_UART
	bool "Altera UART"
	depends on ALTERA_UART
	help
	  Select this to enable a debug UART using the altera_uart driver.
	  You will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_AR933X
	bool "QCA/Atheros ar933x"
	depends on AR933X_UART
	help
	  Select this to enable a debug UART using the ar933x uart driver.
	  You will need to provide parameters to make this work. The
	  driver will be available until the real driver model serial is
	  running.

config DEBUG_ARC_SERIAL
	bool "ARC UART"
	depends on ARC_SERIAL
	help
	  Select this to enable a debug UART using the ARC UART driver.
	  You will need to provide parameters to make this work. The
	  driver will be available until the real driver model serial is
	  running.

config DEBUG_UART_ATMEL
	bool "Atmel USART"
	depends on ATMEL_USART
	help
	  Select this to enable a debug UART using the atmel usart driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_BCM6345
	bool "BCM6345 UART"
	depends on BCM6345_SERIAL
	help
	  Select this to enable a debug UART on BCM6345 SoCs. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_NS16550
	bool "ns16550"
	depends on SYS_NS16550
	help
	  Select this to enable a debug UART using the ns16550 driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_EFI_CONSOLE
	bool "EFI"
	depends on EFI_APP
	help
	  Select this to enable a debug console which calls back to EFI to
	  output to the console. This can be useful for early debugging of
	  U-Boot when running on top of EFI (Extensive Firmware Interface).
	  This is a type of BIOS used by PCs.

config DEBUG_SBI_CONSOLE
	bool "SBI"
	depends on SBI_V01
	help
	  Select this to enable a debug console which calls back to SBI to
	  output to the console. This can be useful for early debugging of
	  U-Boot when running on top of SBI (Supervisor Binary Interface).

config DEBUG_UART_S5P
	bool "Samsung S5P"
	depends on ARCH_APPLE || ARCH_EXYNOS || ARCH_S5PC1XX
	help
	  Select this to enable a debug UART using the serial_s5p driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_MSM_GENI
	bool "Qualcomm snapdragon"
	depends on ARCH_SNAPDRAGON
	help
	  Select this to enable a debug UART using the serial_msm driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_MESON
	bool "Amlogic Meson"
	depends on MESON_SERIAL
	help
	  Select this to enable a debug UART using the serial_meson driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_UARTLITE
	bool "Xilinx Uartlite"
	depends on XILINX_UARTLITE
	help
	  Select this to enable a debug UART using the serial_uartlite driver.
	  You will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_ARM_DCC
	bool "ARM DCC"
	depends on ARM_DCC
	help
	  Select this to enable a debug UART using the ARM JTAG DCC port.
	  The DCC port can be used for very early debugging and doesn't require
	  any additional setting like address/baudrate/clock. On systems without
	  any serial interface this is the easiest way how to get console.
	  Every ARM core has own DCC port which is the part of debug interface.
	  This port is available at least on ARMv6, ARMv7, ARMv8 and XScale
	  architectures.

config DEBUG_MVEBU_A3700_UART
	bool "Marvell Armada 3700"
	depends on MVEBU_A3700_UART
	help
	  Select this to enable a debug UART using the serial_mvebu driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_ZYNQ
	bool "Xilinx Zynq"
	depends on ZYNQ_SERIAL
	help
	  Select this to enable a debug UART using the serial_zynq driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_APBUART
	depends on LEON3
	bool "Gaisler APBUART"
	help
	  Select this to enable a debug UART using the serial_leon3 driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_PL010
	bool "pl010"
	depends on PL01X_SERIAL
	help
	  Select this to enable a debug UART using the pl01x driver with the
	  PL010 UART type. You will need to provide parameters to make this
	  work. The driver will be available until the real driver model
	  serial is running.

config DEBUG_UART_PL011
	bool "pl011"
	depends on PL01X_SERIAL || PL011_SERIAL
	help
	  Select this to enable a debug UART using the pl01x driver with the
	  PL011 UART type. You will need to provide parameters to make this
	  work. The driver will be available until the real driver model
	  serial is running.

config DEBUG_UART_PIC32
	bool "Microchip PIC32"
	depends on PIC32_SERIAL
	help
	  Select this to enable a debug UART using the serial_pic32 driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_MXC
	bool "IMX Serial port"
	depends on MXC_UART
	help
	  Select this to enable a debug UART using the serial_mxc driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver model serial is running.

config DEBUG_UART_SANDBOX
	bool "sandbox"
	depends on SANDBOX_SERIAL
	help
	  Select this to enable the debug UART using the sandbox driver. This
	  provides basic serial output from the console without needing to
	  start up driver model. The driver will be available until the real
	  driver model serial is running.

config DEBUG_UART_SEMIHOSTING
	bool "semihosting"
	depends on SEMIHOSTING_SERIAL
	help
	  Select this to enable the debug UART using the semihosting driver.
	  This provides basic serial output from the console without needing to
	  start up driver model. The driver will be available until the real
	  driver model serial is running.

config DEBUG_UART_SIFIVE
	bool "SiFive UART"
	depends on SIFIVE_SERIAL
	help
	  Select this to enable a debug UART using the serial_sifive driver. You
	  will need to provide parameters to make this work. The driver will
	  be available until the real driver-model serial is running.

config DEBUG_UART_STM32
	bool "STMicroelectronics STM32"
	depends on STM32_SERIAL
	help
	  Select this to enable a debug UART using the serial_stm32 driver
	  You will need to provide parameters to make this work.
	  The driver will be available until the real driver model
	  serial is running.

config DEBUG_UART_UNIPHIER
	bool "UniPhier on-chip UART"
	depends on ARCH_UNIPHIER
	help
	  Select this to enable a debug UART using the UniPhier on-chip UART.
	  You will need to provide DEBUG_UART_BASE to make this work.  The
	  driver will be available until the real driver-model serial is
	  running.

config DEBUG_UART_OMAP
	bool "OMAP uart"
	depends on OMAP_SERIAL
	help
	  Select this to enable a debug UART using the omap ns16550 driver.
	  You will need to provide parameters to make this work. The driver
	  will be available until the real driver model serial is running.

config DEBUG_UART_MTK
	bool "MediaTek High-speed UART"
	depends on MTK_SERIAL
	help
	  Select this to enable a debug UART using the MediaTek High-speed
	  UART driver.
	  You will need to provide parameters to make this work. The
	  driver will be available until the real driver model serial is
	  running.

config DEBUG_UART_MT7620
	bool "UART driver for MediaTek MT7620 and earlier SoCs"
	depends on MT7620_SERIAL
	help
	  Select this to enable a debug UART using the UART driver for
	  MediaTek MT7620 and earlier SoCs.
	  You will need to provide parameters to make this work. The
	  driver will be available until the real driver model serial is
	  running.

endchoice

config DEBUG_UART_BASE
	hex "Base address of UART"
	depends on DEBUG_UART
	default 0 if DEBUG_SBI_CONSOLE
	default 0 if DEBUG_UART_SANDBOX
	help
	  This is the base address of your UART for memory-mapped UARTs.

	  A default should be provided by your board, but if not you will need
	  to use the correct value here.

config DEBUG_UART_CLOCK
	int "UART input clock"
	depends on DEBUG_UART
	default 0 if DEBUG_SBI_CONSOLE
	default 0 if DEBUG_UART_SANDBOX
	default 0 if DEBUG_MVEBU_A3700_UART
	help
	  The UART input clock determines the speed of the internal UART
	  circuitry. The baud rate is derived from this by dividing the input
	  clock down.

	  A default should be provided by your board, but if not you will need
	  to use the correct value here.

config DEBUG_UART_SHIFT
	int "UART register shift"
	depends on DEBUG_UART
	default 0 if DEBUG_UART
	help
	  Some UARTs (notably ns16550) support different register layouts
	  where the registers are spaced either as bytes, words or some other
	  value. Use this value to specify the shift to use, where 0=byte
	  registers, 2=32-bit word registers, etc.

config DEBUG_UART_BOARD_INIT
	bool "Enable board-specific debug UART init"
	depends on DEBUG_UART
	help
	  Some boards need to set things up before the debug UART can be used.
	  On these boards a call to debug_uart_init() is insufficient. When
	  this option is enabled, the function board_debug_uart_init() will
	  be called when debug_uart_init() is called. You can put any code
	  here that is needed to set up the UART ready for use, such as set
	  pin multiplexing or enable clocks.

config DEBUG_UART_ANNOUNCE
	bool "Show a message when the debug UART starts up"
	depends on DEBUG_UART
	help
	  Enable this option to show a message when the debug UART is ready
	  for use. You will see a message like "<debug_uart> " as soon as
	  U-Boot has the UART ready for use (i.e. your code calls
	  debug_uart_init()). This can be useful just as a check that
	  everything is working.

config DEBUG_UART_SKIP_INIT
	bool "Skip UART initialization"
	depends on DEBUG_UART
	help
	  Select this if the UART you want to use for debug output is already
	  initialized by the time U-Boot starts its execution.

config DEBUG_UART_NS16550_CHECK_ENABLED
	bool "Check if UART is enabled on output"
	depends on DEBUG_UART
	depends on DEBUG_UART_NS16550
	help
	  Select this if puts()/putc() might be called before the debug UART
	  has been initialized. If this is disabled, putc() might sit in a
	  tight loop if it is called before debug_uart_init() has been called.

	  Note that this does not work for every ns16550-compatible UART and
	  so has to be enabled carefully or you might notice lost characters.

config ALTERA_JTAG_UART
	bool "Altera JTAG UART support"
	depends on DM_SERIAL
	help
	  Select this to enable an JTAG UART for Altera devices.The JTAG UART
	  core implements a method to communicate serial character streams
	  between a host PC and a Qsys system on an Altera FPGA. Please find
	  details on the "Embedded Peripherals IP User Guide" of Altera.

config ALTERA_JTAG_UART_BYPASS
	bool "Bypass output when no connection"
	depends on ALTERA_JTAG_UART
	help
	  Bypass console output and keep going even if there is no JTAG
	  terminal connection with the host. The console output will resume
	  once the JTAG terminal is connected. Without the bypass, the console
	  output will wait forever until a JTAG terminal is connected. If you
	  not are sure, say Y.

config ALTERA_UART
	bool "Altera UART support"
	depends on DM_SERIAL
	help
	  Select this to enable an UART for Altera devices. Please find
	  details on the "Embedded Peripherals IP User Guide" of Altera.

config AR933X_UART
	bool "QCA/Atheros ar933x UART support"
	depends on DM_SERIAL && SOC_AR933X
	help
	  Select this to enable UART support for QCA/Atheros ar933x
	  devices. This driver uses driver model and requires a device
	  tree binding to operate, please refer to the document at
	  doc/device-tree-bindings/serial/qca,ar9330-uart.txt.

config ARC_SERIAL
	bool "ARC UART support"
	depends on DM_SERIAL
	help
	  Select this to enable support for ARC UART now typically
	  only used in Synopsys DesignWare ARC simulators like nSIM.

config ARM_DCC
	bool "ARM Debug Communication Channel (DCC) as UART support"
	depends on ARM
	help
	  Select this to enable using the ARM DCC as a form of UART.

config ATMEL_USART
	bool "Atmel USART support"
	help
	  Select this to enable USART support for Atmel SoCs. It can be
	  configured in the device tree, and input clock frequency can
	  be got from the clk node.

config SPL_UART_CLOCK
	int "SPL fixed UART input clock"
	depends on ATMEL_USART && SPL && !SPL_CLK
	default 132096000 if ARCH_AT91
	help
	  Provide a fixed clock value as input to the UART controller. This
	  might be needed on platforms which can't enable CONFIG_SPL_CLK
	  because of SPL image size restrictions.

config BCM283X_MU_SERIAL
	bool "Support for BCM283x Mini-UART"
	depends on DM_SERIAL && ARCH_BCM283X
	default y
	help
	  Select this to enable Mini-UART support on BCM283X family of SoCs.

config BCM283X_PL011_SERIAL
	bool "Support for BCM283x PL011 UART"
	depends on PL01X_SERIAL && ARCH_BCM283X
	default y
	help
	  Select this to enable an overriding PL011 driver for BCM283X SoCs
	  that supports automatic disable, so that it only gets used when
	  the UART is actually muxed.

config BCM6345_SERIAL
	bool "Support for BCM6345 UART"
	depends on DM_SERIAL
	help
	  Select this to enable UART on BCM6345 SoCs.

config COREBOOT_SERIAL
	bool "Coreboot UART support"
	depends on DM_SERIAL
	default y if SYS_COREBOOT
	select SYS_NS16550
	help
	  Select this to enable a ns16550-style UART where the platform data
	  comes from the coreboot 'sysinfo' tables. This allows U-Boot to have
	  a serial console on any platform without needing to change the
	  device tree, etc.

config CORTINA_UART
	bool "Cortina UART support"
	depends on DM_SERIAL
	help
	  Select this to enable UART support for Cortina-Access UART devices
	  found on CAxxxx SoCs.

config FSL_LINFLEXUART
	bool "Freescale Linflex UART support"
	depends on DM_SERIAL
	help
	  Select this to enable the Linflex serial module found on some
	  NXP SoCs like S32V234.

config FSL_LPUART
	bool "Freescale LPUART support"
	help
	  Select this to enable a Low Power UART for Freescale VF610 and
	  QorIQ Layerscape devices.

config LPUART
	bool "Use the LPUART as console"
	depends on FSL_LPUART

config MVEBU_A3700_UART
	bool "UART support for Armada 3700"
	help
	  Choose this option to add support for UART driver on the Marvell
	  Armada 3700 SoC. The base address is configured via DT.

config MCFUART
	bool "Freescale ColdFire UART support"
        help
          Choose this option to add support for UART driver on the ColdFire
          SoC's family. The serial communication channel provides a full-duplex
          asynchronous/synchronous receiver and transmitter deriving an
          operating frequency from the internal bus clock or an external clock.

config MXC_UART
	bool "IMX serial port support"
	depends on ARCH_MX31 || MX5 || MX6 || MX7 || IMX8M
	help
	  If you have a machine based on a Motorola IMX CPU you
	  can enable its onboard serial port by enabling this option.

config NULLDEV_SERIAL
	bool "Null serial device"
	help
	  Select this to enable null serial device support. A null serial
	  device merely acts as a placeholder for a serial device and does
	  nothing for all it's operation.

config PIC32_SERIAL
	bool "Support for Microchip PIC32 on-chip UART"
	depends on DM_SERIAL && MACH_PIC32
	default y
	help
	  Support for the UART found on Microchip PIC32 SoC's.

config SYS_NS16550
	bool "NS16550 UART or compatible"
	help
	  Support NS16550 UART or compatible. This can be enabled in the
	  device tree with the correct input clock frequency. If the input
	  clock frequency is not defined in the device tree, the macro
	  CONFIG_SYS_NS16550_CLK defined in a legacy board header file will
	  be used. It can be a constant or a function to get clock, eg,
	  get_serial_clock().

config NS16550_DYNAMIC
	bool "Allow NS16550 to be configured at runtime"
	default y if SYS_COREBOOT || SYS_SLIMBOOTLOADER
	help
	  Enable this option to allow device-tree control of the driver.

	  Normally this driver is controlled by the following options:

	  CONFIG_SYS_NS16550_PORT_MAPPED - indicates that port I/O is used for
	     access. If not enabled, then the UART is memory-mapped.
	  CONFIG_SYS_NS16550_MEM32 - if memory-mapped, indicates that 32-bit
	     access should be used (instead of 8-bit)
	  CONFIG_SYS_NS16550_REG_SIZE - indicates register width and also
	     endianness. If positive, big-endian access is used. If negative,
	     little-endian is used.

	  It is not a good practice for a driver to be statically configured,
	  since it prevents the same driver being used for different types of
	  UARTs in a system. This option avoids this problem at the cost of a
	  slightly increased code size.

config INTEL_MID_SERIAL
	bool "Intel MID platform UART support"
	depends on DM_SERIAL && OF_CONTROL
	depends on INTEL_MID
	select SYS_NS16550
	help
	  Select this to enable a UART for Intel MID platforms.
	  This uses the ns16550 driver as a library.

config PL011_SERIAL
	bool "ARM PL011 driver"
	depends on !DM_SERIAL
	help
	  Select this to enable a UART for platforms using PL011.

config PL01X_SERIAL
	bool "ARM PL010 and PL011 driver"
	depends on DM_SERIAL
	help
	  Select this to enable a UART for platforms using PL010 or PL011.

config ROCKCHIP_SERIAL
	bool "Rockchip on-chip UART support"
	depends on DM_SERIAL && SPL_OF_PLATDATA
	help
	  Select this to enable a debug UART for Rockchip devices when using
	  CONFIG_SPL_OF_PLATDATA (i.e. a compiled-in device tree replacemenmt).
	  This uses the ns16550 driver, converting the platdata from of-platdata
	  to the ns16550 format.

config S5P_SERIAL
	bool "Support for Samsung S5P UART"
	depends on ARCH_APPLE || ARCH_EXYNOS || ARCH_S5PC1XX
	default y
	help
	  Select this to enable Samsung S5P UART support.

config SANDBOX_SERIAL
	bool "Sandbox UART support"
	depends on SANDBOX
	help
	  Select this to enable a seral UART for sandbox. This is required to
	  operate correctly, otherwise you will see no serial output from
	  sandbox. The emulated UART will display to the console and console
	  input will be fed into the UART. This allows you to interact with
	  U-Boot.

	  The operation of the console is controlled by the -t command-line
	  flag. In raw mode, U-Boot sees all characters from the terminal
	  before they are processed, including Ctrl-C. In cooked mode, Ctrl-C
	  is processed by the terminal, and terminates U-Boot. Valid options
	  are:

	     -t raw-with-sigs	Raw mode, Ctrl-C will terminate U-Boot
	     -t raw		Raw mode, Ctrl-C is processed by U-Boot
	     -t cooked		Cooked mode, Ctrl-C terminates

config SCIF_CONSOLE
	bool "Renesas SCIF UART support"
	depends on SH || ARCH_RMOBILE
	help
	  Select this to enable Renesas SCIF UART. To operate serial ports
	  on systems with RCar or SH SoCs, say Y to this option. If unsure,
	  say N.

choice
	prompt "SCIF console port"
	depends on SCIF_CONSOLE && (!DM_SERIAL || (SPL && !SPL_DM_SERIAL))

config CONS_SCIF0
	bool "SCIF0"

config CONS_SCIF1
	bool "SCIF1"

config CONS_SCIF2
	bool "SCIF2"

config CONS_SCIF4
	bool "SCIF4"

config CONS_SCIFA0
	bool "SCIFA0"

endchoice

config SH_SCIF_CLK_FREQ
	int "SCIF console clock frequency"
	depends on SCIF_CONSOLE && (!DM_SERIAL || (SPL && !SPL_DM_SERIAL))
	default 65000000

config SEMIHOSTING_SERIAL
	bool "Semihosting UART support"
	depends on SEMIHOSTING && !SERIAL_RX_BUFFER
	help
	  Select this to enable a serial UART using semihosting. Special halt
	  instructions will be issued which an external debugger (such as a
	  JTAG emulator) may interpret. The debugger will display U-Boot's
	  console output on the host system.

	  Enable this option only if you are using a debugger which supports
	  semihosting. If you are not using a debugger, this driver will halt
	  the boot.

config UNIPHIER_SERIAL
	bool "Support for UniPhier on-chip UART"
	depends on ARCH_UNIPHIER
	default y
	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 XILINX_UARTLITE
	bool "Xilinx Uarlite support"
	depends on DM_SERIAL
	help
	  If you have a Xilinx based board and want to use the uartlite
	  serial ports, say Y to this option. If unsure, say N.

config MESON_SERIAL
	bool "Support for Amlogic Meson UART"
	depends on DM_SERIAL && ARCH_MESON
	help
	  If you have an Amlogic Meson based board and want to use the on-chip
	  serial ports, say Y to this option. If unsure, say N.

config MSM_SERIAL
	bool "Qualcomm on-chip UART"
	depends on DM_SERIAL
	help
	  Support Data Mover UART used on Qualcomm Snapdragon SoCs.
	  It should support all Qualcomm devices with UARTDM version 1.4,
	  for example APQ8016 and MSM8916.
	  Single baudrate is supported in current implementation (115200).

config MSM_GENI_SERIAL
	bool "Qualcomm on-chip GENI UART"
	help
	  Support UART based on Generic Interface (GENI) Serial Engine (SE),
	  used on Qualcomm Snapdragon SoCs. Should support all qualcomm SOCs
	  with Qualcomm Universal Peripheral (QUP) Wrapper cores,
	  i.e. newer ones, starting from SDM845.
	  Driver works in FIFO mode.
	  Multiple baudrates supported.

config OCTEON_SERIAL_BOOTCMD
	bool "MIPS Octeon PCI remote bootcmd input"
	depends on ARCH_OCTEON
	depends on DM_SERIAL
	select SYS_IS_IN_ENV
	select CONSOLE_MUX
	help
	 This driver supports remote input over the PCIe bus from a host
	 to U-Boot for entering commands.  It is utilized by the host
	 commands 'oct-remote-load' and 'oct-remote-bootcmd'.

config OCTEON_SERIAL_PCIE_CONSOLE
	bool "MIPS Octeon PCIe remote console"
	depends on ARCH_OCTEON
	depends on (DM_SERIAL && DM_STDIO)
	select SYS_STDIO_DEREGISTER
	select SYS_CONSOLE_IS_IN_ENV
	select CONSOLE_MUX
	help
	  This driver supports remote console over the PCIe bus when the
	  Octeon is running in PCIe target mode. The host program
	  'oct-remote-console' can be used to connect to this console.
	  The console number will likely be 0 or 1.

config OMAP_SERIAL
	bool "Support for OMAP specific UART"
	depends on DM_SERIAL
	default y if (ARCH_OMAP2PLUS || ARCH_K3)
	select SYS_NS16550
	help
	  If you have an TI based SoC and want to use the on-chip serial
	  port, say Y to this option. If unsure say N.

config OWL_SERIAL
	bool "Actions Semi OWL UART"
	depends on DM_SERIAL && ARCH_OWL
	help
	  If you have a Actions Semi OWL based board and want to use the on-chip
	  serial port, say Y to this option. If unsure, say N.
	  Single baudrate is supported in current implementation (115200).

config PXA_SERIAL
	bool "PXA serial port support"
	help
	  If you have a machine based on a Marvell XScale PXA2xx CPU you
	  can enable its onboard serial ports by enabling this option.

config HTIF_CONSOLE
	bool "RISC-V HTIF console support"
	depends on DM_SERIAL && 64BIT
	help
	  Select this to enable host transfer interface (HTIF) based serial
	  console. The HTIF device is quite common in RISC-V emulators and
	  RISC-V ISS so this driver allows using U-Boot on such platforms.

config SIFIVE_SERIAL
	bool "SiFive UART support"
	depends on DM_SERIAL
	help
	  This driver supports the SiFive UART. If unsure say N.

config STI_ASC_SERIAL
	bool "STMicroelectronics on-chip UART"
	depends on DM_SERIAL && ARCH_STI
	help
	  Select this to enable Asynchronous Serial Controller available
	  on STiH410 SoC. This is a basic implementation,  it supports
	  following baudrate 9600, 19200, 38400, 57600 and 115200.

config STM32_SERIAL
	bool "STMicroelectronics STM32 SoCs on-chip UART"
	depends on DM_SERIAL && (STM32F4 || STM32F7 || STM32H7 || ARCH_STM32MP)
	help
	  If you have a machine based on a STM32 F4, F7, H7 or MP1 SOC
	  you can enable its onboard serial ports, say Y to this option.
	  If unsure, say N.

config ZYNQ_SERIAL
	bool "Cadence (Xilinx Zynq) UART support"
	depends on DM_SERIAL
	help
	  This driver supports the Cadence UART. It is found e.g. in Xilinx
	  Zynq/ZynqMP.

config MTK_SERIAL
	bool "MediaTek High-speed UART support"
	depends on DM_SERIAL
	help
	  Select this to enable UART support for MediaTek High-speed UART
	  devices. This driver uses driver model and requires a device
	  tree binding to operate.
	  The High-speed UART is compatible with the ns16550a UART and have
	  its own high-speed registers.

config MT7620_SERIAL
	bool "UART driver for MediaTek MT7620 and earlier SoCs"
	depends on DM_SERIAL
	help
	  Select this to enable UART support for MediaTek MT7620 and earlier
	  SoCs. This driver uses driver model and requires a device tree
	  binding to operate.
	  The UART driver for MediaTek MT7620 and earlier SoCs is *NOT*
	  compatible with the ns16550a UART.

config MPC8XX_CONS
	bool "Console driver for MPC8XX"
	depends on MPC8xx
	default y

config XEN_SERIAL
	bool "XEN serial support"
	depends on XEN
	help
	  If built without DM support, then requires Xen
	  to be built with CONFIG_VERBOSE_DEBUG.

choice
	prompt "Console port"
	default 8xx_CONS_SMC1
	depends on MPC8XX_CONS
	help
	  Depending on board, select one serial port
	  (CONFIG_8xx_CONS_SMC1 or CONFIG_8xx_CONS_SMC2)

config 8xx_CONS_SMC1
	bool "SMC1"

config 8xx_CONS_SMC2
	bool "SMC2"

endchoice

config SYS_SMC_RXBUFLEN
	int "Console Rx buffer length"
	depends on MPC8XX_CONS
	default 1
	help
	  With CONFIG_SYS_SMC_RXBUFLEN it is possible to define
	  the maximum receive buffer length for the SMC.
	  This option is actual only for 8xx possible.
	  If using CONFIG_SYS_SMC_RXBUFLEN also CONFIG_SYS_MAXIDLE
	  must be defined, to setup the maximum idle timeout for
	  the SMC.

config SYS_MAXIDLE
	int "maximum idle timeout"
	depends on MPC8XX_CONS
	default 0

config SYS_BRGCLK_PRESCALE
	int "BRG Clock Prescale"
	depends on MPC8XX_CONS
	default 1

config SYS_SDSR
	hex "SDSR Value"
	depends on MPC8XX_CONS
	default 0x83

config SYS_SDMR
	hex "SDMR Value"
	depends on MPC8XX_CONS
	default 0

endif
