#
# Freescale device configuration
#

config NET_VENDOR_FREESCALE
	bool "Freescale devices"
	default y
	depends on FSL_SOC || QUICC_ENGINE || CPM1 || CPM2 || PPC_MPC512x || \
		   M523x || M527x || M5272 || M528x || M520x || M532x || \
		   ARCH_MXC || ARCH_MXS || (PPC_MPC52xx && PPC_BESTCOMM) || \
		   ARCH_LAYERSCAPE || ARCH_MXC_ARM64
	---help---
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about Freescale devices. If you say Y, you will be
	  asked for your specific card in the following questions.

if NET_VENDOR_FREESCALE

config FEC
	tristate "FEC ethernet controller (of ColdFire and some i.MX CPUs)"
	depends on (M523x || M527x || M5272 || M528x || M520x || M532x || \
		   ARM || ARM64)
	default y
	select PHYLIB
	select PTP_1588_CLOCK
	---help---
	  Say Y here if you want to use the built-in 10/100 Fast ethernet
	  controller on some Motorola ColdFire and Freescale i.MX processors.

config FEC_MPC52xx
	tristate "FEC MPC52xx driver"
	depends on PPC_MPC52xx && PPC_BESTCOMM
	select CRC32
	select PHYLIB
	select PPC_BESTCOMM_FEC
	---help---
	  This option enables support for the MPC5200's on-chip
	  Fast Ethernet Controller
	  If compiled as module, it will be called fec_mpc52xx.

config FEC_MPC52xx_MDIO
	bool "FEC MPC52xx MDIO bus driver"
	depends on FEC_MPC52xx
	default y
	---help---
	  The MPC5200's FEC can connect to the Ethernet either with
	  an external MII PHY chip or 10 Mbps 7-wire interface
	  (Motorola? industry standard).
	  If your board uses an external PHY connected to FEC, enable this.
	  If not sure, enable.
	  If compiled as module, it will be called fec_mpc52xx_phy.

source "drivers/net/ethernet/freescale/fs_enet/Kconfig"
source "drivers/net/ethernet/freescale/fman/Kconfig"

config FSL_PQ_MDIO
	tristate "Freescale PQ MDIO"
	select PHYLIB
	---help---
	  This driver supports the MDIO bus used by the gianfar and UCC drivers.

config FSL_XGMAC_MDIO
	tristate "Freescale XGMAC MDIO"
	select PHYLIB
	select OF_MDIO
	---help---
	  This driver supports the MDIO bus on the Fman 10G Ethernet MACs, and
	  on the FMan mEMAC (which supports both Clauses 22 and 45)

config UCC_GETH
	tristate "Freescale QE Gigabit Ethernet"
	depends on QUICC_ENGINE
	select FSL_PQ_MDIO
	select PHYLIB
	---help---
	  This driver supports the Gigabit Ethernet mode of the QUICC Engine,
	  which is available on some Freescale SOCs.

config UGETH_TX_ON_DEMAND
	bool "Transmit on Demand support"
	depends on UCC_GETH

config GIANFAR
	tristate "Gianfar Ethernet"
	select FSL_PQ_MDIO
	select PHYLIB
	select CRC32
	---help---
	  This driver supports the Gigabit TSEC on the MPC83xx, MPC85xx,
	  and MPC86xx family of chips, the eTSEC on LS1021A and the FEC
	  on the 8540.

endif # NET_VENDOR_FREESCALE
