	# Use "select HAVE_USBDEBUG" on southbridges which have Debug Port code.
config HAVE_USBDEBUG
	bool
	default y if HAVE_USBDEBUG_OPTIONS
	default n

# Use "select HAVE_USBDEBUG_OPTIONS" on southbridges with multiple
# EHCI controllers or multiple ports with Debug Port capability
config HAVE_USBDEBUG_OPTIONS
	def_bool n

config USBDEBUG
	bool "USB 2.0 EHCI debug dongle support"
	default n
	depends on HAVE_USBDEBUG
	help
	  This option allows you to use a so-called USB EHCI Debug device
	  (such as the Ajays NET20DC, AMIDebug RX, or a system using the
	  Linux "EHCI Debug Device gadget" driver found in recent kernel)
	  to retrieve the coreboot debug messages (instead, or in addition
	  to, a serial port).

	  This feature is NOT supported on all chipsets in coreboot!

	  It also requires a USB2 controller which supports the EHCI
	  Debug Port capability.

	  See https://www.coreboot.org/EHCI_Debug_Port for an up-to-date list
	  of supported controllers.

	  If unsure, say N.

if USBDEBUG

config USBDEBUG_IN_PRE_RAM
	bool "Enable early (pre-RAM) usbdebug"
	default y
	help
	   Configuring USB controllers in system-agent binary may cause
	   problems to usbdebug. Disabling this option delays usbdebug to
	   be setup on entry to ramstage.

	   If unsure, say Y.

config USBDEBUG_HCD_INDEX
	int
	default 0
	prompt "Index for EHCI controller to use with usbdebug" if HAVE_USBDEBUG_OPTIONS
	help
	   Some boards have multiple EHCI controllers with possibly only
	   one having the Debug Port capability on an external USB port.

	   Mapping of this index to PCI device functions is southbridge
	   specific and mainboard level Kconfig should already provide
	   a working default value here.

config USBDEBUG_DEFAULT_PORT
	int
	default 0
	prompt "Default USB port to use as Debug Port" if HAVE_USBDEBUG_OPTIONS
	help
	  Selects which physical USB port usbdebug dongle is connected to.
	  Setting of 0 means to scan possible ports starting from 1.

	  Intel platforms have hardwired the debug port location and this
	  setting makes no difference there.

	  Hence, if you select the correct port here, you can speed up
	  your boot time. Which USB port number refers to which actual
	  port on your mainboard (potentially also USB pin headers on
	  your mainboard) is highly board-specific, and you'll likely
	  have to find out by trial-and-error.

choice
	prompt "Type of dongle"
	default USBDEBUG_DONGLE_STD

config USBDEBUG_DONGLE_STD
	bool "USB gadget driver or Net20DC"
	help
	  Net20DC, BeagleBone Black, Raspberry Pi Zero W

config USBDEBUG_DONGLE_BEAGLEBONE
	bool "BeagleBone (not BeagleBone Black)"
	help
	  Use this to configure the USB hub on BeagleBone board.
	  Do NOT select this for the BeagleBone Black.

config USBDEBUG_DONGLE_FTDI_FT232H
	bool "FTDI FT232H UART"
	help
	  Use this with FT232H usb-to-uart. Configuration is hard-coded
	  to use 8n1, no flow control.

config USBDEBUG_DONGLE_WCH_CH347
	bool "WCH CH347 UART"
	help
	  Use this with CH347 usb-to-uart. Configuration is hard-coded
	  to use 8n1, no flow control. For compatibility across modes
	  0, 1, and 3, only UART 1 is supported. The UART in mode 2 is
	  not currently supported.

endchoice

config USBDEBUG_DONGLE_FTDI_FT232H_BAUD
	int "FTDI FT232H baud rate"
	default 115200
	depends on USBDEBUG_DONGLE_FTDI_FT232H
	help
	  Select baud rate for FT232H in the range 733..12,000,000. Make
	  sure that your receiving side supports the same setting and your
	  connection works with it. Multiples of 115,200 seem to be a good
	  choice, and EHCI debug usually can't saturate more than 576,000.

config USBDEBUG_DONGLE_WCH_CH347_BAUD
	int "WCH CH347 baud rate"
	default 115200
	depends on USBDEBUG_DONGLE_WCH_CH347
	help
	  Select baud rate for CH347 in the range 1200..9,000,000. Make
	  sure that your receiving side supports the same setting and your
	  connection works with it. Multiples of 115,200 seem to be a good
	  choice, and EHCI debug usually can't saturate more than 576,000.

config USBDEBUG_OPTIONAL_HUB_PORT
	int
	default 2 if USBDEBUG_DONGLE_BEAGLEBONE
	default 0

endif # USBDEBUG
