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

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 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 .

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 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. This driver currently
	  supports the specific configuration used in NVIDIA's Tegra186 chip,
	  but should be extensible to other combinations quite easily.

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 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_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 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 || 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 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 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 PCH_GBE
	bool "Intel Platform Controller Hub EG20T GMAC driver"
	depends on DM_ETH && DM_PCI
	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 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

choice
	prompt "SMC911X bus width"
	default SMC911X_16_BIT

config SMC911X_32_BIT
	bool "Enable 32-bit interface"

config SMC911X_16_BIT
	bool "Enable 16-bit interface"
	help
	  Define this if data bus is 16 bits. If your processor
	  automatically converts one 32 bit word to two 16 bit
	  words you may also try CONFIG_SMC911X_32_BIT.

endchoice
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 XILINX_AXIEMAC
	depends on DM_ETH && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP)
	select PHYLIB
	select MII
	bool "Xilinx AXI Ethernet"
	help
	  This MAC is present in Xilinx Microblaze, Zynq and ZynqMP SoCs.

config XILINX_EMACLITE
	depends on DM_ETH && (MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP || MIPS)
	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 && (ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL)
	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.

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
	default n
	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
	default n
	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_T1023 || \
		     ARCH_T1024 || \
		     ARCH_T1040 || \
		     ARCH_T1042 || \
		     ARCH_T2080 || \
		     ARCH_T2081 || \
		     ARCH_T4240 || \
		     ARCH_T4160 || \
		     ARCH_P4080 || \
		     ARCH_P3041 || \
		     ARCH_P5040 || \
		     ARCH_P5020 || \
		     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_PCI && 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 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).

endif # NETDEVICES
