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

config USB_HOST
	bool
	select DM_USB

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 ARCH_ROCKCHIP
	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
	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
	---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
	select EHCI_HCD_INIT_AFTER_RESET if ARCH_MX7
	select PHY if IMX8M
	select NOP_PHY if IMX8M
	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
	default n
	---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
	default n
	---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
