#
# 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 OF_SERIAL_BAUD
	bool "Fetch serial baudrate from device tree"
	depends on DM_SERIAL && SPL_ENV_SUPPORT
	select DEFAULT_ENV_IS_RW
	help
	  Select this to enable fetching and setting of the baudrate
	  configured in the DT. Replace the default baudrate with the DT
	  baudrate and also set it to the environment.

config DEFAULT_ENV_IS_RW
	bool "Make default environment as writable"
	help
	  Select this to enable to make default environment writable. This
	  allows modifying the default environment.

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 || ARCH_IPQ40XX
	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_RENESAS
	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.

config DEBUG_UART_XTENSA_SEMIHOSTING
	bool "Xtensa semihosting"
	depends on XTENSA_SEMIHOSTING_SERIAL
	help
	  Select this to enable the debug UART using the Xtensa 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.

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

config XTENSA_SEMIHOSTING_SERIAL
	bool "Xtensa Semihosting UART support"
	depends on DM_SERIAL
	depends on XTENSA_SEMIHOSTING
	imply SERIAL_PUTS
	help
	  Select this to enable a serial UART using Xtensa semihosting.

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
