source "drivers/net/phy/Kconfig"
source "drivers/net/pfe_eth/Kconfig"
source "drivers/net/fsl-mc/Kconfig"

config ETH
	def_bool y

config DM_ETH
	bool "Enable Driver Model for Ethernet drivers"
	depends on DM
	help
	  Enable driver model for Ethernet.

	  The eth_*() interface will be implemented by the UCLASS_ETH class
	  This is currently implemented in net/eth-uclass.c
	  Look in include/net.h for details.

config DM_MDIO
	bool "Enable Driver Model for MDIO devices"
	depends on DM_ETH && PHYLIB
	help
	  Enable driver model for MDIO devices

	  Adds UCLASS_MDIO DM class supporting MDIO buses that are probed as
	  stand-alone devices.  Useful in particular for systems that support
	  DM_ETH and have a stand-alone MDIO hardware block shared by multiple
	  Ethernet interfaces.
	  This is currently implemented in net/mdio-uclass.c
	  Look in include/miiphy.h for details.

config DM_MDIO_MUX
	bool "Enable Driver Model for MDIO MUX devices"
	depends on DM_MDIO
	help
	  Enable driver model for MDIO MUX devices

	  Adds UCLASS_MDIO_MUX DM class supporting MDIO MUXes.  Useful for
	  systems that support DM_MDIO and integrate one or multiple muxes on
	  the MDIO bus.
	  This is currently implemented in net/mdio-mux-uclass.c
	  Look in include/miiphy.h for details.

config DM_DSA
	bool "Enable Driver Model for DSA switches"
	depends on DM_ETH && DM_MDIO
	depends on PHY_FIXED
	help
	  Enable driver model for DSA switches

	  Adds UCLASS_DSA class supporting switches that follow the Distributed
	  Switch Architecture (DSA).  These switches rely on the presence of a
	  management switch port connected to an Ethernet controller capable of
	  receiving frames from the switch.  This host Ethernet controller is
	  called the "master" Ethernet interface in DSA terminology.
	  This is currently implemented in net/dsa-uclass.c, refer to
	  include/net/dsa.h for API details.

config MDIO_SANDBOX
	depends on DM_MDIO && SANDBOX
	default y
	bool "Sandbox: Mocked MDIO driver"
	help
	  This driver implements dummy read/write/reset MDIO functions mimicking
	  a bus with a single PHY.

	  This driver is used in for testing in test/dm/mdio.c

config MDIO_MUX_SANDBOX
	depends on DM_MDIO_MUX && MDIO_SANDBOX
	default y
	bool "Sandbox: Mocked MDIO-MUX driver"
	help
	  This driver implements dummy select/deselect ops mimicking a MUX on
	  the MDIO bux.  It uses mdio_sandbox driver as parent MDIO.

	  This driver is used for testing in test/dm/mdio.c

config DM_ETH_PHY
	bool "Enable Driver Model for Ethernet Generic PHY drivers"
	depends on DM
	help
	  Enable driver model for Ethernet Generic PHY .

config DSA_SANDBOX
	depends on DM_DSA && SANDBOX
	default y
	bool "Sandbox: Mocked DSA driver"
	help
	  This driver implements a dummy DSA switch connected to a dummy sandbox
	  Ethernet device used as DSA master, to test DSA class code, including
	  exported DSA API and datapath processing of Ethernet traffic.

menuconfig NETDEVICES
	bool "Network device support"
	depends on NET
	default y if DM_ETH
	help
	  You must select Y to enable any network device support
	  Generally if you have any networking support this is a given

	  If unsure, say Y

if NETDEVICES

config PHY_GIGE
	bool "Enable GbE PHY status parsing and configuration"
	help
	  Enables support for parsing the status output and for
	  configuring GbE PHYs (affects the inner workings of some
	  commands and miiphyutil.c).

config AG7XXX
	bool "Atheros AG7xxx Ethernet MAC support"
	depends on DM_ETH && ARCH_ATH79
	select PHYLIB
	help
	  This driver supports the Atheros AG7xxx Ethernet MAC. This MAC is
	  present in the Atheros AR7xxx, AR9xxx and QCA9xxx MIPS chips.


config ALTERA_TSE
	bool "Altera Triple-Speed Ethernet MAC support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the Altera Triple-Speed (TSE) Ethernet MAC.
	  Please find details on the "Triple-Speed Ethernet MegaCore Function
	  Resource Center" of Altera.

config BCM_SF2_ETH
	bool "Broadcom SF2 (Starfighter2) Ethernet support"
	select PHYLIB
	help
	  This is an abstract framework which provides a generic interface
	  to MAC and DMA management for multiple Broadcom SoCs such as
	  Cygnus, NSP and bcm28155_ap platforms.

config BCM_SF2_ETH_DEFAULT_PORT
	int "Broadcom SF2 (Starfighter2) Ethernet default port number"
	depends on BCM_SF2_ETH
	default 0
	help
	  Default port number for the Starfighter2 ethernet driver.

config BCM_SF2_ETH_GMAC
	bool "Broadcom SF2 (Starfighter2) GMAC Ethernet support"
	depends on BCM_SF2_ETH
	help
	  This flag enables the ethernet support for Broadcom platforms with
	  GMAC such as Cygnus. This driver is based on the framework provided
	  by the BCM_SF2_ETH driver.
	  Say Y to any bcmcygnus based platforms.

config BCM6348_ETH
	bool "BCM6348 EMAC support"
	depends on DM_ETH && ARCH_BMIPS
	select DMA
	select DMA_CHANNELS
	select MII
	select PHYLIB
	help
	  This driver supports the BCM6348 Ethernet MAC.

config BCM6368_ETH
	bool "BCM6368 EMAC support"
	depends on DM_ETH && ARCH_BMIPS
	select DMA
	select MII
	help
	  This driver supports the BCM6368 Ethernet MAC.

config BCMGENET
	bool "BCMGENET V5 support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the BCMGENET Ethernet MAC.

config CORTINA_NI_ENET
	bool "Cortina-Access Ethernet driver"
	depends on DM_ETH && CORTINA_PLATFORM
	help
	  This driver supports the Cortina-Access Ethernet MAC for
	  all supported CAxxxx SoCs.

config CALXEDA_XGMAC
	bool "Calxeda XGMAC support"
	depends on DM_ETH
	help
	  This driver supports the XGMAC in Calxeda Highbank and Midway
	  machines.

config DWC_ETH_QOS
	bool "Synopsys DWC Ethernet QOS device support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the Synopsys Designware Ethernet QOS (Quality
	  Of Service) IP block. The IP supports many options for bus type,
	  clocking/reset structure, and feature list.

config DWC_ETH_QOS_IMX
	bool "Synopsys DWC Ethernet QOS device support for IMX"
	depends on DWC_ETH_QOS
	help
	  The Synopsys Designware Ethernet QOS IP block with the specific
	  configuration used in IMX soc.

config DWC_ETH_QOS_STM32
	bool "Synopsys DWC Ethernet QOS device support for STM32"
	depends on DWC_ETH_QOS
	select DM_ETH_PHY
	default y if ARCH_STM32MP
	help
	  The Synopsys Designware Ethernet QOS IP block with the specific
	  configuration used in STM32MP soc.

config DWC_ETH_QOS_TEGRA186
	bool "Synopsys DWC Ethernet QOS device support for TEGRA186"
	depends on DWC_ETH_QOS
	default y if TEGRA186
	help
	  The Synopsys Designware Ethernet QOS IP block with specific
	  configuration used in NVIDIA's Tegra186 chip.

config E1000
	bool "Intel PRO/1000 Gigabit Ethernet support"
	help
	  This driver supports Intel(R) PRO/1000 gigabit ethernet family of
	  adapters.  For more information on how to identify your adapter, go
	  to the Adapter & Driver ID Guide at:

	  <http://support.intel.com/support/network/adapter/pro100/21397.htm>

config E1000_SPI_GENERIC
	bool "Allow access to the Intel 8257x SPI bus"
	depends on E1000
	help
	  Allow generic access to the SPI bus on the Intel 8257x, for
	  example with the "sspi" command.

config E1000_SPI
	bool "Enable SPI bus utility code"
	depends on E1000
	help
	  Utility code for direct access to the SPI bus on Intel 8257x.
	  This does not do anything useful unless you set at least one
	  of CONFIG_CMD_E1000 or CONFIG_E1000_SPI_GENERIC.

config CMD_E1000
	bool "Enable the e1000 command"
	depends on E1000
	help
	  This enables the 'e1000' management command for E1000 devices. When
	  used on devices with SPI support you can reprogram the EEPROM from
	  U-Boot.

config EEPRO100
	bool "Intel PRO/100 82557/82559/82559ER Fast Ethernet support"
	help
	  This driver supports Intel(R) PRO/100 82557/82559/82559ER fast
	  ethernet family of adapters.

config ETH_SANDBOX
	depends on DM_ETH && SANDBOX
	default y
	bool "Sandbox: Mocked Ethernet driver"
	help
	  This driver simply responds with fake ARP replies and ping
	  replies that are used to verify network stack functionality

	  This driver is particularly useful in the test/dm/eth.c tests

config ETH_SANDBOX_RAW
	depends on DM_ETH && SANDBOX
	default y
	bool "Sandbox: Bridge to Linux Raw Sockets"
	help
	  This driver is a bridge from the bottom of the network stack
	  in U-Boot to the RAW AF_PACKET API in Linux. This allows real
	  network traffic to be tested from within sandbox. See
	  doc/arch/index.rst for more details.

config ETH_DESIGNWARE
	bool "Synopsys Designware Ethernet MAC"
	select PHYLIB
	imply ETH_DESIGNWARE_SOCFPGA if ARCH_SOCFPGA
	help
	  This MAC is present in SoCs from various vendors. It supports
	  100Mbit and 1 Gbit operation. You must enable CONFIG_PHYLIB to
	  provide the PHY (physical media interface).

config ETH_DESIGNWARE_MESON8B
	bool "Amlogic Meson8b and later glue driver for Synopsys Designware Ethernet MAC"
	depends on DM_ETH
	select ETH_DESIGNWARE
	help
	  This provides glue layer to use Synopsys Designware Ethernet MAC
	  present on the Amlogic Meson8b, GX, AXG & G12A SoCs.

config ETH_DESIGNWARE_SOCFPGA
	select REGMAP
	select SYSCON
	bool "Altera SoCFPGA extras for Synopsys Designware Ethernet MAC"
	depends on DM_ETH && ETH_DESIGNWARE
	help
	  The Altera SoCFPGA requires additional configuration of the
	  Altera system manager to correctly interface with the PHY.
	  This code handles those SoC specifics.

config ETH_DESIGNWARE_S700
	bool "Actins S700 glue driver for Synopsys Designware Ethernet MAC"
	depends on DM_ETH && ETH_DESIGNWARE
	help
	  This provides glue layer to use Synopsys Designware Ethernet MAC
	  present on Actions S700 SoC.

config ETHOC
	bool "OpenCores 10/100 Mbps Ethernet MAC"
	help
	  This MAC is present in OpenRISC and Xtensa XTFPGA boards.

config FEC_MXC_SHARE_MDIO
	bool "Share the MDIO bus for FEC controller"
	depends on FEC_MXC

config FEC_MXC_MDIO_BASE
	hex "MDIO base address for the FEC controller"
	depends on FEC_MXC_SHARE_MDIO
	help
	  This specifies the MDIO registers base address. It is used when
	  two FEC controllers share MDIO bus.

config FEC_MXC
	bool "FEC Ethernet controller"
	depends on MX28 || MX5 || MX6 || MX7 || IMX8 || IMX8M || IMX8ULP || VF610
	help
	  This driver supports the 10/100 Fast Ethernet controller for
	  NXP i.MX processors.

config FMAN_ENET
	bool "Freescale FMan ethernet support"
	depends on ARM || PPC
	help
	  This driver support the Freescale FMan Ethernet controller

config FTMAC100
	bool "Ftmac100 Ethernet Support"
	help
	  This MAC is present in Andestech SoCs.

config FTGMAC100
	bool "Ftgmac100 Ethernet Support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the Faraday's FTGMAC100 Gigabit SoC
	  Ethernet controller that can be found on Aspeed SoCs (which
	  include NCSI).

	  It is fully compliant with IEEE 802.3 specification for
	  10/100 Mbps Ethernet and IEEE 802.3z specification for 1000
	  Mbps Ethernet and includes Reduced Media Independent
	  Interface (RMII) and Reduced Gigabit Media Independent
	  Interface (RGMII) interfaces. It adopts an AHB bus interface
	  and integrates a link list DMA engine with direct M-Bus
	  accesses for transmitting and receiving packets. It has
	  independent TX/RX fifos, supports half and full duplex (1000
	  Mbps mode only supports full duplex), flow control for full
	  duplex and backpressure for half duplex.

	  The FTGMAC100 also implements IP, TCP, UDP checksum offloads
	  and supports IEEE 802.1Q VLAN tag insertion and removal. It
	  offers high-priority transmit queue for QoS and CoS
	  applications.


config MCFFEC
	bool "ColdFire Ethernet Support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the network interface units in the
	  ColdFire family.

config FSLDMAFEC
        bool "ColdFire DMA Ethernet Support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the network interface units in the
	  ColdFire family.

config KS8851_MLL
	bool "Microchip KS8851-MLL controller driver"
	help
	  The Microchip KS8851 parallel bus external ethernet interface chip.

if KS8851_MLL
if !DM_ETH
config KS8851_MLL_BASEADDR
	hex "Microchip KS8851-MLL Base Address"
	help
	  Define this to hold the physical address of the device (I/O space)
endif #DM_ETH
endif #KS8851_MLL

config KSZ9477
	bool "Microchip KSZ9477 I2C controller driver"
	depends on DM_DSA && DM_I2C
	help
	  This driver implements a DSA switch driver for the KSZ9477 family
	  of GbE switches using the I2C interface.

config MVGBE
	bool "Marvell Orion5x/Kirkwood network interface support"
	depends on ARCH_KIRKWOOD || ARCH_ORION5X
	select PHYLIB if DM_ETH
	help
	  This driver supports the network interface units in the
	  Marvell Orion5x and Kirkwood SoCs

config MVNETA
	bool "Marvell Armada XP/385/3700 network interface support"
	depends on ARMADA_XP || ARMADA_38X || ARMADA_3700
	select PHYLIB
	help
	  This driver supports the network interface units in the
	  Marvell ARMADA XP, ARMADA 38X and ARMADA 3700 SoCs

config MVPP2
	bool "Marvell Armada 375/7K/8K network interface support"
	depends on ARMADA_375 || ARMADA_8K
	select PHYLIB
	select MVMDIO
	select DM_MDIO
	help
	  This driver supports the network interface units in the
	  Marvell ARMADA 375, 7K and 8K SoCs.

config MACB
	bool "Cadence MACB/GEM Ethernet Interface"
	depends on DM_ETH
	select PHYLIB
	help
	  The Cadence MACB ethernet interface is found on many Atmel
	  AT91 and SAMA5 parts.  This driver also supports the Cadence
	  GEM (Gigabit Ethernet MAC) found in some ARM SoC devices.
	  Say Y to include support for the MACB/GEM chip.

config MACB_ZYNQ
	bool "Cadence MACB/GEM Ethernet Interface for Xilinx Zynq"
	depends on MACB
	help
	  The Cadence MACB ethernet interface was used on Zynq platform.
	  Say Y to enable support for the MACB/GEM in Zynq chip.

config MT7620_ETH
	bool "MediaTek MT7620 Ethernet Interface"
	depends on SOC_MT7620
	select PHYLIB
	select DM_RESET
	select DM_GPIO
	select CLK
	help
	  The MediaTek MT7620 ethernet interface is used on MT7620 based
	  boards. It has a built-in switch with two configurable ports which
	  can connect to external PHY/MACs.

config MT7628_ETH
	bool "MediaTek MT7628 Ethernet Interface"
	depends on SOC_MT7628
	select PHYLIB
	help
	  The MediaTek MT7628 ethernet interface is used on MT7628 and
	  MT7688 based boards.

config NET_OCTEONTX
	bool "OcteonTX Ethernet support"
	depends on ARCH_OCTEONTX
	depends on PCI_SRIOV
	help
	  You must select Y to enable network device support for
	  OcteonTX SoCs. If unsure, say n

config NET_OCTEONTX2
	bool "OcteonTX2 Ethernet support"
	depends on ARCH_OCTEONTX2
	select OCTEONTX2_CGX_INTF
	help
	  You must select Y to enable network device support for
	  OcteonTX2 SoCs. If unsure, say n

config OCTEONTX_SMI
	bool "OcteonTX SMI Device support"
	depends on ARCH_OCTEONTX || ARCH_OCTEONTX2
	help
	  You must select Y to enable SMI controller support for
	  OcteonTX or OcteonTX2 SoCs. If unsure, say n

config OCTEONTX2_CGX_INTF
	bool "OcteonTX2 CGX ATF interface support"
	depends on ARCH_OCTEONTX2
	default y if ARCH_OCTEONTX2
	help
	  You must select Y to enable CGX ATF interface support for
	  OcteonTX2 SoCs. If unsure, say n

config PCH_GBE
	bool "Intel Platform Controller Hub EG20T GMAC driver"
	depends on DM_ETH
	select PHYLIB
	help
	  This MAC is present in Intel Platform Controller Hub EG20T. It
	  supports 10/100/1000 Mbps operation.

config RGMII
	bool "Enable RGMII"
	help
	  Enable the support of the Reduced Gigabit Media-Independent
	  Interface (RGMII).

config MII
	bool "Enable MII"
	help
	  Enable support of the Media-Independent Interface (MII)

config PCNET
	bool "AMD PCnet series Ethernet controller driver"
	help
	  This driver supports AMD PCnet series fast ethernet family of
	  PCI chipsets/adapters.

source "drivers/net/qe/Kconfig"

config RTL8139
	bool "Realtek 8139 series Ethernet controller driver"
	help
	  This driver supports Realtek 8139 series fast ethernet family of
	  PCI chipsets/adapters.

config RTL8169
	bool "Realtek 8169 series Ethernet controller driver"
	help
	  This driver supports Realtek 8169 series gigabit ethernet family of
	  PCI/PCIe chipsets/adapters.

config SMC911X
	bool "SMSC LAN911x and LAN921x controller driver"

if SMC911X

if !DM_ETH
config SMC911X_BASE
	hex "SMC911X Base Address"
	help
	  Define this to hold the physical address
	  of the device (I/O space)
endif #DM_ETH

config SMC911X_32_BIT
	bool "Enable SMC911X 32-bit interface"
	help
	  Define this if data bus is 32 bits. If your processor use a
	  narrower 16 bit bus or cannot convert one 32 bit word to two 16 bit
	  words, leave this to "n".

endif #SMC911X

config SUN7I_GMAC
	bool "Enable Allwinner GMAC Ethernet support"
	help
	  Enable the support for Sun7i GMAC Ethernet controller

config SUN7I_GMAC_FORCE_TXERR
	bool "Force PA17 as gmac function"
	depends on SUN7I_GMAC
	help
	  Some ethernet phys needs TXERR control. Since the GMAC
	  doesn't have such signal, setting PA17 as GMAC function
	  makes the pin output low, which enables data transmission.

config SUN4I_EMAC
	bool "Allwinner Sun4i Ethernet MAC support"
	depends on DM_ETH
	select PHYLIB
	help
	  This driver supports the Allwinner based SUN4I Ethernet MAC.

config SUN8I_EMAC
        bool "Allwinner Sun8i Ethernet MAC support"
        depends on DM_ETH
        select PHYLIB
	select PHY_GIGE
        help
          This driver supports the  Allwinner based SUN8I/SUN50I Ethernet MAC.
	  It can be found in H3/A64/A83T based SoCs and compatible with both
	  External and Internal PHYs.

config SH_ETHER
	bool "Renesas SH Ethernet MAC"
	select PHYLIB
	help
	  This driver supports the Ethernet for Renesas SH and ARM SoCs.

source "drivers/net/ti/Kconfig"

config TULIP
	bool "DEC Tulip DC2114x Ethernet support"
	help
	  This driver supports DEC DC2114x Fast ethernet chips.

config XILINX_AXIEMAC
	depends on DM_ETH
	select PHYLIB
	select MII
	bool "Xilinx AXI Ethernet"
	help
	  This MAC is present in Xilinx Microblaze, Zynq and ZynqMP SoCs.

config XILINX_AXIMRMAC
	depends on DM_ETH && ARCH_VERSAL
	bool "Xilinx AXI MRMAC"
	help
	  MRMAC is a high performance, low latency, adaptable Ethernet
	  integrated hard IP. This can be configured up to four ports with MAC
	  rates from 10GE to 100GE. This could be present in some of the Xilinx
	  Versal designs.

config XILINX_EMACLITE
	depends on DM_ETH
	select PHYLIB
	select MII
	bool "Xilinx Ethernetlite"
	help
	  This MAC is present in Xilinx Microblaze, Zynq and ZynqMP SoCs.

config ZYNQ_GEM
	depends on DM_ETH
	select PHYLIB
	bool "Xilinx Ethernet GEM"
	help
	  This MAC is present in Xilinx Zynq and ZynqMP SoCs.

config PIC32_ETH
	bool "Microchip PIC32 Ethernet Support"
	depends on DM_ETH && MACH_PIC32
	select PHYLIB
	help
	  This driver implements 10/100 Mbps Ethernet and MAC layer for
	  Microchip PIC32 microcontrollers.

config GMAC_ROCKCHIP
	bool "Rockchip Synopsys Designware Ethernet MAC"
	depends on DM_ETH && ETH_DESIGNWARE
	help
	  This driver provides Rockchip SoCs network support based on the
	  Synopsys Designware driver.

config RENESAS_RAVB
	bool "Renesas Ethernet AVB MAC"
	depends on DM_ETH && RCAR_GEN3
	select PHYLIB
	help
	  This driver implements support for the Ethernet AVB block in
	  Renesas M3 and H3 SoCs.

config MPC8XX_FEC
	bool "Fast Ethernet Controller on MPC8XX"
	depends on MPC8xx
	select MII
	help
	  This driver implements support for the Fast Ethernet Controller
	  on MPC8XX

config SNI_AVE
	bool "Socionext AVE Ethernet support"
	depends on DM_ETH && ARCH_UNIPHIER
	select PHYLIB
	select SYSCON
	select REGMAP
	help
	  This driver implements support for the Socionext AVE Ethernet
	  controller, as found on the Socionext UniPhier family.

config SNI_NETSEC
	bool "Socionext NETSEC Ethernet support"
	depends on DM_ETH && SYNQUACER_SPI
	select PHYLIB
	help
	  This driver implements support for the Socionext SynQuacer NETSEC
	  ethernet controller, as found on the Socionext SynQuacer family.

source "drivers/net/mscc_eswitch/Kconfig"

config ETHER_ON_FEC1
	bool "FEC1"
	depends on MPC8XX_FEC
	default y

config FEC1_PHY
	int "FEC1 PHY"
	depends on ETHER_ON_FEC1
	default -1
	help
	  Define to the hardcoded PHY address which corresponds
	  to the given FEC; i. e.
		#define CONFIG_FEC1_PHY 4
	  means that the PHY with address 4 is connected to FEC1

	  When set to -1, means to probe for first available.

config PHY_NORXERR
	bool "PHY_NORXERR"
	depends on ETHER_ON_FEC1
	help
	  The PHY does not have a RXERR line (RMII only).
	  (so program the FEC to ignore it).

config ETHER_ON_FEC2
	bool "FEC2"
	depends on MPC8XX_FEC && MPC885
	default y

config FEC2_PHY
	int "FEC2 PHY"
	depends on ETHER_ON_FEC2
	default -1
	help
	  Define to the hardcoded PHY address which corresponds
	  to the given FEC; i. e.
		#define CONFIG_FEC1_PHY 4
	  means that the PHY with address 4 is connected to FEC1

	  When set to -1, means to probe for first available.

config FEC2_PHY_NORXERR
	bool "PHY_NORXERR"
	depends on ETHER_ON_FEC2
	help
	  The PHY does not have a RXERR line (RMII only).
	  (so program the FEC to ignore it).

config SYS_DPAA_QBMAN
	bool "Device tree fixup for QBMan on freescale SOCs"
	depends on (ARM || PPC) && !SPL_BUILD
	default y if ARCH_B4860 || \
		     ARCH_B4420 || \
		     ARCH_P1023 || \
		     ARCH_P2041 || \
		     ARCH_T1024 || \
		     ARCH_T1040 || \
		     ARCH_T1042 || \
		     ARCH_T2080 || \
		     ARCH_T4240 || \
		     ARCH_P4080 || \
		     ARCH_P3041 || \
		     ARCH_P5040 || \
		     ARCH_LS1043A || \
		     ARCH_LS1046A
	help
	  QBman fixups to allow deep sleep in DPAA 1 SOCs

config TSEC_ENET
	select PHYLIB
	bool "Enable Three-Speed Ethernet Controller"
	help
	  This driver implements support for the (Enhanced) Three-Speed
	  Ethernet Controller found on Freescale SoCs.

config MEDIATEK_ETH
	bool "MediaTek Ethernet GMAC Driver"
	depends on DM_ETH
	select PHYLIB
	select DM_GPIO
	select DM_RESET
	help
	  This Driver support MediaTek Ethernet GMAC
	  Say Y to enable support for the MediaTek Ethernet GMAC.

config HIGMACV300_ETH
	bool "HiSilicon Gigabit Ethernet Controller"
	depends on DM_ETH
	select DM_RESET
	select PHYLIB
	help
	  This driver supports HIGMACV300 Ethernet controller found on
	  HiSilicon SoCs.

config FSL_ENETC
	bool "NXP ENETC Ethernet controller"
	depends on DM_ETH && DM_MDIO
	help
	  This driver supports the NXP ENETC Ethernet controller found on some
	  of the NXP SoCs.

config MDIO_MUX_I2CREG
	bool "MDIO MUX accessed as a register over I2C"
	depends on DM_MDIO_MUX && DM_I2C
	help
	  This driver is used for MDIO muxes driven by writing to a register of
	  an I2C chip.  The board it was developed for uses a mux controlled by
	  on-board FPGA which in turn is accessed as a chip over I2C.

config MDIO_IPQ4019
	bool "Qualcomm IPQ4019 MDIO interface support"
	depends on DM_MDIO
	help
	  This driver supports the MDIO interface found in Qualcomm
	  IPQ40xx series Soc-s.

config MVMDIO
	bool "Marvell MDIO interface support"
	depends on DM_MDIO
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the Marvell EBU SoCs (Kirkwood, Orion5x,
	  Dove, Armada 370, Armada XP, Armada 37xx and Armada7K/8K/8KP).

	  This driver is used by the MVPP2 and MVNETA drivers.

config FSL_LS_MDIO
	bool "NXP Layerscape MDIO interface support"
	depends on DM_MDIO
	help
	  This driver supports the MDIO bus found on the Fman 10G Ethernet MACs and
	  on the mEMAC (which supports both Clauses 22 and 45).

config MDIO_MUX_MMIOREG
	bool "MDIO MUX accessed as a MMIO register access"
	depends on DM_MDIO_MUX
	help
	  This driver is used for MDIO muxes driven by writing to a register in
	  the MMIO physical memory.

config MDIO_MUX_MESON_G12A
	bool "MDIO MUX for Amlogic Meson G12A SoCs"
	depends on DM_MDIO_MUX
	help
	  This driver is used for the MDIO mux found on the Amlogic G12A & compatible
	  SoCs.

endif # NETDEVICES
