#
# Serial device configuration
#

menu "Serial drivers"

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_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 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_UART_S5P
	bool "Samsung S5P"
	depends on 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_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 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_SIFIVE
	bool "SiFive UART"
	depends on PL01X_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.

endchoice

config DEBUG_UART_BASE
	hex "Base address of UART"
	depends on DEBUG_UART
	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_UART_SANDBOX
	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 MVEBU_A3700_UART
	bool "UART support for Armada 3700"
	default n
	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 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 PL010_SERIAL
	bool "ARM PL010 driver"
	depends on !DM_SERIAL
	help
	  Select this to enable a UART for platforms using PL010.

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

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 && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP || 4xx)
	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 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 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 && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_ZYNQMP_R5)
	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 MPC8XX_CONS
	bool "Console driver for MPC8XX"
	depends on MPC8xx
	default y

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

endmenu
