# SPDX-License-Identifier: GPL-2.0-only
#
# 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 || COMPILE_TEST
	---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 || \
		   ARCH_MXC || SOC_IMX28 || COMPILE_TEST)
	default ARCH_MXC || SOC_IMX28 if ARM
	select PHYLIB
	imply 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
	depends on OF
	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 && PPC32
	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"
	depends on HAS_DMA
	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.

source "drivers/net/ethernet/freescale/dpaa/Kconfig"
source "drivers/net/ethernet/freescale/dpaa2/Kconfig"
source "drivers/net/ethernet/freescale/enetc/Kconfig"

endif # NET_VENDOR_FREESCALE
