#
# Serial device configuration
#

menu "Serial drivers"

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 DM_SERIAL
	bool "Enable Driver Model for serial drivers"
	depends on DM
	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 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

config DEBUG_UART_ALTERA_JTAGUART
	bool "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"
	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_NS16550
	bool "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"
	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_ZYNQ
	bool "Xilinx Zynq"
	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.

endchoice

config DEBUG_UART_BASE
	hex "Base address of UART"
	depends on DEBUG_UART
	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
	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 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 ROCKCHIP_SERIAL
	bool "Rockchip on-chip UART support"
	depends on ARCH_ROCKCHIP && DM_SERIAL
	help
	  Select this to enable a debug UART for Rockchip devices. This uses
	  the ns16550 driver. You will need to #define CONFIG_SYS_NS16550 in
	  your board config header. The clock input is automatically set to
	  use the oscillator (24MHz).

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 UNIPHIER_SERIAL
	bool "Support for UniPhier on-chip UART"
	depends on ARCH_UNIPHIER
	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 X86_SERIAL
	bool "Support for 16550 serial port on x86 machines"
	depends on X86
	default y
	help
	  Most x86 machines have a ns16550 UART or compatible. This can be
	  enabled in the device tree with the correct input clock frequency
	  provided (default 1843200). Enable this to obtain serial console
	  output.

endmenu
