# SPDX-License-Identifier: GPL-2.0-only
#
# QE Communication options
#

config QUICC_ENGINE
	bool "QUICC Engine (QE) framework support"
	depends on OF && HAS_IOMEM
	depends on PPC || ARM || ARM64 || COMPILE_TEST
	select GENERIC_ALLOCATOR
	select CRC32
	help
	  The QUICC Engine (QE) is a new generation of communications
	  coprocessors on Freescale embedded CPUs (akin to CPM in older chips).
	  Selecting this option means that you wish to build a kernel
	  for a machine with a QE coprocessor.

config UCC_SLOW
	bool
	default y if SERIAL_QE
	help
	  This option provides qe_lib support to UCC slow
	  protocols: UART, BISYNC, QMC

config UCC_FAST
	bool
	default y if UCC_GETH || QE_TDM
	help
	  This option provides qe_lib support to UCC fast
	  protocols: HDLC, Ethernet, ATM, transparent

config UCC
	bool
	default y if UCC_FAST || UCC_SLOW

config QE_TDM
	bool
	default y if FSL_UCC_HDLC

config QE_USB
	bool
	default y if USB_FSL_QE
	help
	  QE USB Controller support
