# SPDX-License-Identifier: GPL-2.0-only
menuconfig USB4
	tristate "Unified support for USB4 and Thunderbolt"
	depends on PCI
	select APPLE_PROPERTIES if EFI_STUB && X86
	select CRC32
	select CRYPTO
	select CRYPTO_HASH
	select NVMEM
	help
	  USB4 and Thunderbolt driver. USB4 is the public specification
	  based on the Thunderbolt 3 protocol. This driver is required if
	  you want to hotplug Thunderbolt and USB4 compliant devices on
	  Apple hardware or on PCs with Intel Falcon Ridge or newer.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt.

if USB4

config USB4_DEBUGFS_WRITE
	bool "Enable write by debugfs to configuration spaces (DANGEROUS)"
	help
	  Enables writing to device configuration registers through
	  debugfs interface. You can use tools such as Thunderbolt/USB4
	  debugging tools to access these registers. For more
	  information see:

	    https://github.com/intel/tbtools

	  Only enable this if you know what you are doing! Never enable
	  this for production systems or distro kernels.

config USB4_DEBUGFS_MARGINING
	bool "Expose receiver lane margining operations under USB4 ports and retimers (DANGEROUS)"
	depends on DEBUG_FS
	depends on USB4_DEBUGFS_WRITE
	help
	  Enables hardware and software based receiver lane margining
	  support under each USB4 port and retimer, including retimers
	  on the other side of the cable. Used for electrical quality
	  and robustness validation during manufacturing. Should not be
	  enabled by distro kernels.

config USB4_KUNIT_TEST
	bool "KUnit tests" if !KUNIT_ALL_TESTS
	depends on USB4 && KUNIT=y
	default KUNIT_ALL_TESTS

config USB4_DMA_TEST
	tristate "DMA traffic test driver"
	depends on DEBUG_FS
	help
	  This allows sending and receiving DMA traffic through loopback
	  connection. Loopback connection can be done by either special
	  dongle that has TX/RX lines crossed, or by simply connecting a
	  cable back to the host. Only enable this if you know what you
	  are doing. Normal users and distro kernels should say N here.

	  To compile this driver a module, choose M here. The module will be
	  called thunderbolt_dma_test.

endif # USB4
