#
# USB Host Controller Drivers
#
comment "USB Host Controller Drivers"

config USB_HOST
	bool
	select DM_USB
	help
	  Enable access to USB (Universal Serial Bus) host devices so that
	  SPL can load U-Boot from a connected USB peripheral, such as a USB
	  flash stick. While USB takes a little longer to start up than most
	  buses, it is very flexible since many different types of storage
	  device can be attached.

config SPL_USB_HOST
	bool "Support USB host drivers"
	depends on SPL
	help
	  For detailed help see USB_HOST Kconfig symbol. This option enables
	  the drivers in drivers/usb/host as part of an SPL build.

config USB_XHCI_HCD
	bool "xHCI HCD (USB 3.0) support"
	depends on DM && OF_CONTROL
	select USB_HOST
	---help---
	  The eXtensible Host Controller Interface (xHCI) is standard for USB 3.0
	  "SuperSpeed" host controller hardware.

if USB_XHCI_HCD

config USB_XHCI_DWC3
	bool "DesignWare USB3 DRD Core Support"
	help
	  Say Y or if your system has a Dual Role SuperSpeed
	  USB controller based on the DesignWare USB3 IP Core.

config USB_XHCI_DWC3_OF_SIMPLE
	bool "DesignWare USB3 DRD Generic OF Simple Glue Layer"
	depends on DM_USB
	default y if DRA7XX
	help
	  Support USB2/3 functionality in simple SoC integrations with
	  USB controller based on the DesignWare USB3 IP Core.

config USB_XHCI_EXYNOS
	bool "Support for Samsung Exynos5 family on-chip xHCI USB controller"
	depends on ARCH_EXYNOS5
	default y
	help
	  Enables support for he on-chip xHCI controller on Samsung Exynos5
	  SoCs.

config USB_XHCI_MTK
	bool "Support for MediaTek on-chip xHCI USB controller"
	depends on ARCH_MEDIATEK || SOC_MT7621
	help
	  Enables support for the on-chip xHCI controller on MediaTek SoCs.

config USB_XHCI_MVEBU
	bool "MVEBU USB 3.0 support"
	default y
	depends on ARCH_MVEBU
	select DM_REGULATOR
	help
	  Choose this option to add support for USB 3.0 driver on mvebu
	  SoCs, which includes Armada8K, Armada3700 and other Armada
	  family SoCs.

config USB_XHCI_OCTEON
	bool "Support for Marvell Octeon family on-chip xHCI USB controller"
	depends on ARCH_OCTEON
	default y
	help
	  Enables support for the on-chip xHCI controller on Marvell Octeon
	  family SoCs. This is a driver for the dwc3 to provide the glue logic
	  to configure the controller.

config USB_XHCI_OMAP
	bool "Support for TI OMAP family xHCI USB controller"
	depends on ARCH_OMAP2PLUS
	help
	  Enables support for the on-chip xHCI controller found on some TI SoC
	  families.  Note that some families have multiple contollers while
	  others only have something such as DesignWare-based controllers.
	  Consult the SoC documentation to determine if this option applies
	  to your hardware.

config USB_XHCI_PCI
	bool "Support for PCI-based xHCI USB controller"
	depends on DM_USB && PCI
	default y if X86
	help
	  Enables support for the PCI-based xHCI controller.

config USB_XHCI_RCAR
	bool "Renesas RCar USB 3.0 support"
	default y
	depends on ARCH_RMOBILE
	help
	  Choose this option to add support for USB 3.0 driver on Renesas
	  RCar Gen3 SoCs.

config USB_XHCI_STI
	bool "Support for STMicroelectronics STiH407 family on-chip xHCI USB controller"
	depends on ARCH_STI
	default y
	help
	  Enables support for the on-chip xHCI controller on STMicroelectronics
	  STiH407 family SoCs. This is a driver for the dwc3 to provide the glue logic
	  to configure the controller.

config USB_XHCI_DRA7XX_INDEX
	int "DRA7XX xHCI USB index"
	range 0 1
	default 0
	depends on DRA7XX
	help
	  Select the DRA7XX xHCI USB index.
	  Current supported values: 0, 1.

config USB_XHCI_FSL
	bool "Support for NXP Layerscape on-chip xHCI USB controller"
	default y if ARCH_LS1021A || FSL_LSCH3 || FSL_LSCH2
	depends on !SPL_NO_USB
	help
	  Enables support for the on-chip xHCI controller on NXP Layerscape SoCs.

config USB_XHCI_BRCM
	bool "Broadcom USB3 Host XHCI controller"
	depends on DM_USB
	help
	  USB controller based on the Broadcom USB3 IP Core.
	  Supports USB2/3 functionality.

endif # USB_XHCI_HCD

config EHCI_DESC_BIG_ENDIAN
	bool

config EHCI_MMIO_BIG_ENDIAN
	bool

config USB_EHCI_HCD
	bool "EHCI HCD (USB 2.0) support"
	default y if ARCH_MX5 || ARCH_MX6
	depends on DM && OF_CONTROL
	select USB_HOST
	select EHCI_DESC_BIG_ENDIAN if SYS_BIG_ENDIAN
	select EHCI_MMIO_BIG_ENDIAN if SYS_BIG_ENDIAN
	---help---
	  The Enhanced Host Controller Interface (EHCI) is standard for USB 2.0
	  "high speed" (480 Mbit/sec, 60 Mbyte/sec) host controller hardware.
	  If your USB host controller supports USB 2.0, you will likely want to
	  configure this Host Controller Driver.

	  EHCI controllers are packaged with "companion" host controllers (OHCI
	  or UHCI) to handle USB 1.1 devices connected to root hub ports.  Ports
	  will connect to EHCI if the device is high speed, otherwise they
	  connect to a companion controller.  If you configure EHCI, you should
	  probably configure the OHCI (for NEC and some other vendors) USB Host
	  Controller Driver or UHCI (for Via motherboards) Host Controller
	  Driver too.

	  You may want to read <file:Documentation/usb/ehci.txt>.

if USB_EHCI_HCD

config USB_EHCI_IS_TDI
	bool

config USB_EHCI_ATMEL
	bool  "Support for Atmel on-chip EHCI USB controller"
	depends on ARCH_AT91
	default y
	---help---
	  Enables support for the on-chip EHCI controller on Atmel chips.

config USB_EHCI_EXYNOS
	bool "Support for Samsung Exynos EHCI USB controller"
	depends on ARCH_EXYNOS
	default y
	---help---
	  Enables support for the on-chip EHCI controller on Samsung Exynos
	  SoCs.

config USB_EHCI_MARVELL
	bool "Support for Marvell on-chip EHCI USB controller"
	depends on ARCH_MVEBU || ARCH_KIRKWOOD || ARCH_ORION5X
	default y
	select USB_EHCI_IS_TDI if !ARM64
	select USB_EHCI_IS_TDI if ALLEYCAT_5
	---help---
	  Enables support for the on-chip EHCI controller on MVEBU SoCs.

config USB_EHCI_MX5
	bool "Support for i.MX5 on-chip EHCI USB controller"
	depends on ARCH_MX5
	help
	  Enables support for the on-chip EHCI controller on i.MX5 SoCs.

config USB_EHCI_MX6
	bool "Support for i.MX6/i.MX7ULP on-chip EHCI USB controller"
	depends on ARCH_MX6 || ARCH_MX7ULP || ARCH_IMXRT
	select EHCI_HCD_INIT_AFTER_RESET
	default y
	---help---
	  Enables support for the on-chip EHCI controller on i.MX6 SoCs.

config USB_EHCI_MX7
	bool "Support for i.MX7 on-chip EHCI USB controller"
	depends on ARCH_MX7 || IMX8M || IMX93
	select EHCI_HCD_INIT_AFTER_RESET if ARCH_MX7
	select PHY if IMX8M || IMX93
	select NOP_PHY if IMX8M || IMX93
	default y
	---help---
	  Enables support for the on-chip EHCI controller on i.MX7 SoCs.

config USB_EHCI_MXS
	bool "Support for i.MX23/i.MX28 EHCI USB controller"
	depends on ARCH_MX23 || ARCH_MX28
	default y
	select USB_EHCI_IS_TDI
	help
	  Enables support for the on-chip EHCI controller on i.MX23 and
	  i.MX28 SoCs.

config USB_EHCI_NPCM
	bool "Support for Nuvoton NPCM on-chip EHCI USB controller"
	depends on ARCH_NPCM
	---help---
	  Enables support for the on-chip EHCI controller on
	  Nuvoton NPCM chips.

config USB_EHCI_OMAP
	bool "Support for OMAP3+ on-chip EHCI USB controller"
	depends on ARCH_OMAP2PLUS
	select PHY
	imply NOP_PHY
	default y
	---help---
	  Enables support for the on-chip EHCI controller on OMAP3 and later
	  SoCs.

config USB_EHCI_VF
	bool "Support for Vybrid on-chip EHCI USB controller"
	depends on ARCH_VF610
	default y
	help
	  Enables support for the on-chip EHCI controller on Vybrid SoCs.

if USB_EHCI_MX6 || USB_EHCI_MX7

config MXC_USB_OTG_HACTIVE
	bool "USB Power pin high active"
	---help---
	  Set the USB Power pin polarity to be high active (PWR_POL)

endif

config USB_EHCI_MSM
	bool "Support for Qualcomm on-chip EHCI USB controller"
	depends on DM_USB
	select USB_ULPI_VIEWPORT
	select MSM8916_USB_PHY
	---help---
	  Enables support for the on-chip EHCI controller on Qualcomm
	  Snapdragon SoCs.

config USB_EHCI_PCI
	bool "Support for PCI-based EHCI USB controller"
	default y if X86
	help
	  Enables support for the PCI-based EHCI controller.

config USB_EHCI_TEGRA
	bool "Support for NVIDIA Tegra on-chip EHCI USB controller"
	depends on ARCH_TEGRA
	select USB_EHCI_IS_TDI
	---help---
	  Enable support for Tegra on-chip EHCI USB controller

config USB_EHCI_ZYNQ
	bool "Support for Xilinx Zynq on-chip EHCI USB controller"
	default y if ARCH_ZYNQ
	select USB_EHCI_IS_TDI
	---help---
	  Enable support for Zynq on-chip EHCI USB controller

config USB_EHCI_GENERIC
	bool "Support for generic EHCI USB controller"
	depends on DM_USB
	default ARCH_SUNXI
	---help---
	  Enables support for generic EHCI controller.

config EHCI_HCD_INIT_AFTER_RESET
	bool

config USB_EHCI_FSL
	bool  "Support for FSL on-chip EHCI USB controller"
	select EHCI_HCD_INIT_AFTER_RESET
	select SYS_FSL_USB_INTERNAL_UTMI_PHY if MPC85xx && \
		!(ARCH_B4860 || ARCH_B4420 || ARCH_P4080 || ARCH_P1020 || ARCH_P2020)
	---help---
	  Enables support for the on-chip EHCI controller on FSL chips.

config SYS_FSL_USB_INTERNAL_UTMI_PHY
	bool
	depends on USB_EHCI_FSL

config USB_EHCI_TXFIFO_THRESH
	hex
	depends on USB_EHCI_TEGRA
	default 0x10
	help
	  This parameter affects a TXFILLTUNING field that controls how much
	  data is sent to the latency fifo before it is sent to the wire.
	  Without this parameter, the default (2) causes occasional Data Buffer
	  Errors in OUT packets depending on the buffer address and size.

endif # USB_EHCI_HCD

config USB_OHCI_NEW
	bool

config SYS_USB_OHCI_CPU_INIT
	bool

config USB_OHCI_HCD
	bool "OHCI HCD (USB 1.1) support"
	depends on DM && OF_CONTROL
	select USB_HOST
	select USB_OHCI_NEW
	---help---
	  The Open Host Controller Interface (OHCI) is a standard for accessing
	  USB 1.1 host controller hardware.  It does more in hardware than Intel's
	  UHCI specification.  If your USB host controller follows the OHCI spec,
	  say Y.  On most non-x86 systems, and on x86 hardware that's not using a
	  USB controller from Intel or VIA, this is appropriate.  If your host
	  controller doesn't use PCI, this is probably appropriate.  For a PCI
	  based system where you're not sure, the "lspci -v" entry will list the
	  right "prog-if" for your USB controller(s):  EHCI, OHCI, or UHCI.

if USB_OHCI_HCD

config USB_OHCI_PCI
	bool "Support for PCI-based OHCI USB controller"
	depends on PCI
	help
	  Enables support for the PCI-based OHCI controller.

config USB_OHCI_GENERIC
	bool "Support for generic OHCI USB controller"
	default ARCH_SUNXI
	---help---
	  Enables support for generic OHCI controller.

config USB_OHCI_DA8XX
	bool "Support for da850 OHCI USB controller"
	help
	  Enable support for the da850 USB controller.

config USB_OHCI_NPCM
	bool "Support for Nuvoton NPCM on-chip OHCI USB controller"
	depends on ARCH_NPCM
	---help---
	  Enables support for the on-chip OHCI controller on
	  Nuvoton NPCM chips.

endif # USB_OHCI_HCD

config SYS_USB_OHCI_SLOT_NAME
	string "Display name for the OHCI controller"
	depends on USB_OHCI_NEW && !DM_USB

config SYS_OHCI_SWAP_REG_ACCESS
	bool "Perform byte swapping on OHCI controller register accesses"
	depends on USB_OHCI_NEW

config USB_UHCI_HCD
	bool "UHCI HCD (most Intel and VIA) support"
	select USB_HOST
	---help---
	  The Universal Host Controller Interface is a standard by Intel for
	  accessing the USB hardware in the PC (which is also called the USB
	  host controller). If your USB host controller conforms to this
	  standard, you may want to say Y, but see below. All recent boards
	  with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX,
	  i810, i820) conform to this standard. Also all VIA PCI chipsets
	  (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro
	  133) and LEON/GRLIB SoCs with the GRUSBHC controller.
	  If unsure, say Y.

if USB_UHCI_HCD

endif # USB_UHCI_HCD

config USB_DWC2
	bool "DesignWare USB2 Core support"
	depends on DM && OF_CONTROL
	select USB_HOST
	---help---
	  The DesignWare USB 2.0 controller is compliant with the
	  USB-Implementers Forum (USB-IF) USB 2.0 specifications.
	  Hi-Speed (480 Mbps), Full-Speed (12 Mbps), and Low-Speed (1.5 Mbps)
	  operation is compliant to the controller Supplement. If you want to
	  enable this controller in host mode, say Y.

if USB_DWC2
config USB_DWC2_BUFFER_SIZE
	int "Data buffer size in kB"
	default 64
	---help---
	  By default 64 kB buffer is used but if amount of RAM avaialble on
	  the target is not enough to accommodate allocation of buffer of
	  that size it is possible to shrink it. Smaller sizes should be fine
	  because larger transactions could be split in smaller ones.

endif # USB_DWC2

config USB_R8A66597_HCD
	bool "Renesas R8A66597 USB Core support"
	depends on DM && OF_CONTROL
	select USB_HOST
	---help---
	  This enables support for the on-chip Renesas R8A66597 USB 2.0
	  controller, present in various RZ and SH SoCs.

config USB_ATMEL
	bool "AT91 OHCI USB support"
	depends on ARCH_AT91
	select SYS_USB_OHCI_CPU_INIT
	select USB_OHCI_NEW

choice
	prompt "Clock for OHCI"
	depends on USB_ATMEL

config USB_ATMEL_CLK_SEL_PLLB
	bool "PLLB"

config USB_ATMEL_CLK_SEL_UPLL
	bool "UPLL"

endchoice

config USB_OHCI_LPC32XX
	bool "LPC32xx USB OHCI support"
	depends on ARCH_LPC32XX
	select SYS_USB_OHCI_CPU_INIT
	select USB_OHCI_NEW

config USB_MAX_CONTROLLER_COUNT
	int "Maximum number of USB host controllers"
	depends on USB_EHCI_FSL || USB_XHCI_FSL || \
		(SPL_USB_HOST && !DM_SPL_USB) || (USB_HOST && !DM_USB)
	default 1
