#
# 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.

config VPL_SERIAL_PRESENT
	bool "Provide a serial driver in VPL"
	depends on DM_SERIAL && VPL
	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.

config CONS_INDEX
	int "UART used for console"
	depends on SPECIFY_CONSOLE_INDEX
	range 0 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
	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
	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 VPL_DM_SERIAL
	bool "Enable Driver Model for serial drivers in VPL"
	depends on DM_SERIAL
	default y if VPL && DM_SERIAL
	help
	  Enable driver model for serial in VPL. 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_SBI_CONSOLE if RISCV_SMODE
	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 RISCV_SMODE
	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).
	  This implementation of the debug UART is not available while in
	  M-mode (e.g. during SPL).

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
	bool "Qualcomm QUP UART debug"
	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_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_SCIF
	bool "Renesas SCIF UART"
	depends on SH || ARCH_RMOBILE
	help
	  Select this to enable a debug UART using the serial_sh 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_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 0x0 if DEBUG_SBI_CONSOLE
	default 0x0 if DEBUG_UART_SANDBOX
	default 0xff000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQMP
	default 0xe0000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQ
	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 SPL_DEBUG_UART_BASE
	hex "Base address of UART for SPL"
	depends on SPL && DEBUG_UART
	default DEBUG_UART_BASE
	help
	  This is the base address of your UART for memory-mapped UARTs for SPL.

config TPL_DEBUG_UART_BASE
	hex "Base address of UART for TPL"
	depends on TPL && DEBUG_UART
	default DEBUG_UART_BASE
	help
	  This is the base address of your UART for memory-mapped UARTs for TPL.

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
	default 100000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQMP
	default 50000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQ
	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 COREBOOT_SERIAL_FROM_DBG2
	bool "Obtain UART from ACPI tables"
	depends on COREBOOT_SERIAL
	default y
	help
	  Select this to try to find a DBG2 record in the ACPI tables, in the
	  event that coreboot does not provide information about the UART in the
	  normal sysinfo tables. This provides a useful fallback when serial
	  is not enabled in coreboot.

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_SERIAL
	bool "NS16550 UART or compatible legacy driver"
	depends on !DM_SERIAL
	select SYS_NS16550

config SPL_SYS_NS16550_SERIAL
	bool "NS16550 UART or compatible legacy driver in SPL"
	depends on SPL && !SPL_DM_SERIAL
	default y if SYS_NS16550_SERIAL || ARCH_SUNXI || ARCH_OMAP2PLUS
	select SYS_NS16550

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
	  CFG_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"
	depends on SYS_NS16550
	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:

	  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 SYS_NS16550_MEM32
	bool "If memory-mapped, 32bit access is needed for ns16550 register access"
	depends on SYS_NS16550
	help
	  If enabled, if memory-mapped, indicates that 32-bit access should be
	  used (instead of 8-bit) for register access.

config SYS_NS16550_PORT_MAPPED
	bool "Port I/O is used for ns16550 register access"
	depends on SYS_NS16550
	help
	  If enabled, port I/O is used for ns16550 register access. If not
	  enabled, then the UART is memory-mapped.

config SYS_NS16550_REG_SIZE
	int "ns16550 register width and endianness"
	depends on SYS_NS16550_SERIAL || SPL_SYS_NS16550_SERIAL
	range -4 4
	default -4 if ARCH_OMAP2PLUS || ARCH_SUNXI
	default 1
	help
	  Indicates register width and also endianness. If positive, big-endian
	  access is used. If negative, little-endian is used.

config SPL_NS16550_MIN_FUNCTIONS
	bool "Only provide NS16550_init and NS16550_putc in SPL"
	depends on SPL_SYS_NS16550_SERIAL && PPC
	help
	  Enable this if you desire to only have use of the NS16550_init and
	  NS16550_putc functions for the serial driver located at
	  drivers/serial/ns16550.c.  This option is useful for saving space for
	  already greatly restricted images, including but not limited to
	  NAND_SPL configurations.

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
	select SYS_NS16550
	help
	  Select this to enable a debug UART for Rockchip devices when using
	  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 S5P4418_PL011_SERIAL
	bool "Extended PL011 driver for S5P4418"
	depends on DM_SERIAL && PL01X_SERIAL && ARCH_NEXELL
	default y
	help
	  Select this to enable support of the PL011 UARTs in the S5P4418 SOC.
	  With this driver the UART-clocks are set to the appropriate rate
	  (if not 'skip-init').

config SANDBOX_SERIAL
	bool "Sandbox UART support"
	depends on SANDBOX
	imply SERIAL_PUTS
	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
	imply SERIAL_PUTS
	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 MXS_AUART_SERIAL
	bool "MXS AUART"
	depends on DM_SERIAL
	help
	  Support for Freescale i.MX23 / i.MX28 AUART or Application UART IP.
	  This IP is present in the aforementioned SoCs, however this is not
	  the IP used to drive the Debug UART port, for that see PL01X_SERIAL .

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 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 NPCM_SERIAL
	bool "Nuvoton NPCM UART driver"
	depends on DM_SERIAL
	help
	  Select this to enable UART support for Nuvoton BMCs
	  (NPCM7xx and NPCM8xx).
	  The driver enables the onboard serial port with 8-N-1
	  configuration.

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 0x0

endif
