# SPDX-License-Identifier: GPL-2.0-only
#
# PHY Layer Configuration
#

menuconfig MDIO_DEVICE
	tristate "MDIO bus device drivers"
	help
	  MDIO devices and driver infrastructure code.

if MDIO_DEVICE

config MDIO_BUS
	tristate
	default m if PHYLIB=m
	default MDIO_DEVICE
	help
	  This internal symbol is used for link time dependencies and it
	  reflects whether the mdio_bus/mdio_device code is built as a
	  loadable module or built-in.

if MDIO_BUS

config MDIO_ASPEED
	tristate "ASPEED MDIO bus controller"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on OF_MDIO && HAS_IOMEM
	help
	  This module provides a driver for the independent MDIO bus
	  controllers found in the ASPEED AST2600 SoC. This is a driver for the
	  third revision of the ASPEED MDIO register interface - the first two
	  revisions are the "old" and "new" interfaces found in the AST2400 and
	  AST2500, embedded in the MAC. For legacy reasons, FTGMAC100 driver
	  continues to drive the embedded MDIO controller for the AST2400 and
	  AST2500 SoCs, so say N if AST2600 support is not required.

config MDIO_BCM_IPROC
	tristate "Broadcom iProc MDIO bus controller"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	depends on HAS_IOMEM && OF_MDIO
	default ARCH_BCM_IPROC
	help
	  This module provides a driver for the MDIO busses found in the
	  Broadcom iProc SoC's.

config MDIO_BCM_UNIMAC
	tristate "Broadcom UniMAC MDIO bus controller"
	depends on HAS_IOMEM
	help
	  This module provides a driver for the Broadcom UniMAC MDIO busses.
	  This hardware can be found in the Broadcom GENET Ethernet MAC
	  controllers as well as some Broadcom Ethernet switches such as the
	  Starfighter 2 switches.

config MDIO_BITBANG
	tristate "Bitbanged MDIO buses"
	help
	  This module implements the MDIO bus protocol in software,
	  for use by low level drivers that export the ability to
	  drive the relevant pins.

	  If in doubt, say N.

config MDIO_BUS_MUX
	tristate
	depends on OF_MDIO
	help
	  This module provides a driver framework for MDIO bus
	  multiplexers which connect one of several child MDIO busses
	  to a parent bus.  Switching between child busses is done by
	  device specific drivers.

config MDIO_BUS_MUX_BCM_IPROC
	tristate "Broadcom iProc based MDIO bus multiplexers"
	depends on OF && OF_MDIO && (ARCH_BCM_IPROC || COMPILE_TEST)
	select MDIO_BUS_MUX
	default ARCH_BCM_IPROC
	help
	  This module provides a driver for MDIO bus multiplexers found in
	  iProc based Broadcom SoCs. This multiplexer connects one of several
	  child MDIO bus to a parent bus. Buses could be internal as well as
	  external and selection logic lies inside the same multiplexer.

config MDIO_BUS_MUX_GPIO
	tristate "GPIO controlled MDIO bus multiplexers"
	depends on OF_GPIO && OF_MDIO
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexers that
	  are controlled via GPIO lines.  The multiplexer connects one of
	  several child MDIO busses to a parent bus.  Child bus
	  selection is under the control of GPIO lines.

config MDIO_BUS_MUX_MESON_G12A
	tristate "Amlogic G12a based MDIO bus multiplexer"
	depends on ARCH_MESON || COMPILE_TEST
	depends on OF_MDIO && HAS_IOMEM && COMMON_CLK
	select MDIO_BUS_MUX
	default m if ARCH_MESON
	help
	  This module provides a driver for the MDIO multiplexer/glue of
	  the amlogic g12a SoC. The multiplexers connects either the external
	  or the internal MDIO bus to the parent bus.

config MDIO_BUS_MUX_MMIOREG
	tristate "MMIO device-controlled MDIO bus multiplexers"
	depends on OF_MDIO && HAS_IOMEM
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexers that
	  are controlled via a simple memory-mapped device, like an FPGA.
	  The multiplexer connects one of several child MDIO busses to a
	  parent bus.  Child bus selection is under the control of one of
	  the FPGA's registers.

	  Currently, only 8/16/32 bits registers are supported.

config MDIO_BUS_MUX_MULTIPLEXER
	tristate "MDIO bus multiplexer using kernel multiplexer subsystem"
	depends on OF_MDIO
	select MULTIPLEXER
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexer
	  that is controlled via the kernel multiplexer subsystem. The
	  bus multiplexer connects one of several child MDIO busses to
	  a parent bus.  Child bus selection is under the control of
	  the kernel multiplexer subsystem.

config MDIO_CAVIUM
	tristate

config MDIO_GPIO
	tristate "GPIO lib-based bitbanged MDIO buses"
	depends on MDIO_BITBANG
	depends on GPIOLIB || COMPILE_TEST
	---help---
	  Supports GPIO lib-based MDIO busses.

	  To compile this driver as a module, choose M here: the module
	  will be called mdio-gpio.

config MDIO_HISI_FEMAC
	tristate "Hisilicon FEMAC MDIO bus controller"
	depends on HAS_IOMEM && OF_MDIO
	help
	  This module provides a driver for the MDIO busses found in the
	  Hisilicon SoC that have an Fast Ethernet MAC.

config MDIO_I2C
	tristate
	depends on I2C
	help
	  Support I2C based PHYs.  This provides a MDIO bus bridged
	  to I2C to allow PHYs connected in I2C mode to be accessed
	  using the existing infrastructure.

	  This is library mode.

config MDIO_MOXART
	tristate "MOXA ART MDIO interface support"
	depends on ARCH_MOXART || COMPILE_TEST
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the MOXA ART SoC

config MDIO_MSCC_MIIM
	tristate "Microsemi MIIM interface support"
	depends on HAS_IOMEM
	help
	  This driver supports the MIIM (MDIO) interface found in the network
	  switches of the Microsemi SoCs

config MDIO_OCTEON
	tristate "Octeon and some ThunderX SOCs MDIO buses"
	depends on (64BIT && OF_MDIO) || COMPILE_TEST
	depends on HAS_IOMEM
	select MDIO_CAVIUM
	help
	  This module provides a driver for the Octeon and ThunderX MDIO
	  buses. It is required by the Octeon and ThunderX ethernet device
	  drivers on some systems.

config MDIO_SUN4I
	tristate "Allwinner sun4i MDIO interface support"
	depends on ARCH_SUNXI || COMPILE_TEST
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the Allwinner SoC that have an EMAC (A10,
	  A12, A10s, etc.)

config MDIO_THUNDER
	tristate "ThunderX SOCs MDIO buses"
	depends on 64BIT
	depends on PCI
	select MDIO_CAVIUM
	help
	  This driver supports the MDIO interfaces found on Cavium
	  ThunderX SoCs when the MDIO bus device appears as a PCI
	  device.

config MDIO_XGENE
	tristate "APM X-Gene SoC MDIO bus controller"
	depends on ARCH_XGENE || COMPILE_TEST
	help
	  This module provides a driver for the MDIO busses found in the
	  APM X-Gene SoC's.

endif
endif

config PHYLINK
	tristate
	depends on NETDEVICES
	select PHYLIB
	select SWPHY
	help
	  PHYlink models the link between the PHY and MAC, allowing fixed
	  configuration links, PHYs, and Serdes links with MAC level
	  autonegotiation modes.

menuconfig PHYLIB
	tristate "PHY Device support and infrastructure"
	depends on NETDEVICES
	select MDIO_DEVICE
	help
	  Ethernet controllers are usually attached to PHY
	  devices.  This option provides infrastructure for
	  managing PHY devices.

if PHYLIB

config SWPHY
	bool

config LED_TRIGGER_PHY
	bool "Support LED triggers for tracking link state"
	depends on LEDS_TRIGGERS
	---help---
	  Adds support for a set of LED trigger events per-PHY.  Link
	  state change will trigger the events, for consumption by an
	  LED class driver.  There are triggers for each link speed currently
	  supported by the PHY and also a one common "link" trigger as a
	  logical-or of all the link speed ones.
	  All these triggers are named according to the following pattern:
	      <mii bus id>:<phy>:<speed>

	  Where speed is in the form:
		<Speed in megabits>Mbps OR <Speed in gigabits>Gbps OR link
		for any speed known to the PHY.


comment "MII PHY device drivers"

config SFP
	tristate "SFP cage support"
	depends on I2C && PHYLINK
	depends on HWMON || HWMON=n
	select MDIO_I2C

config ADIN_PHY
	tristate "Analog Devices Industrial Ethernet PHYs"
	help
	  Adds support for the Analog Devices Industrial Ethernet PHYs.
	  Currently supports the:
	  - ADIN1200 - Robust,Industrial, Low Power 10/100 Ethernet PHY
	  - ADIN1300 - Robust,Industrial, Low Latency 10/100/1000 Gigabit
	    Ethernet PHY

config AMD_PHY
	tristate "AMD PHYs"
	---help---
	  Currently supports the am79c874

config AQUANTIA_PHY
	tristate "Aquantia PHYs"
	---help---
	  Currently supports the Aquantia AQ1202, AQ2104, AQR105, AQR405

config AX88796B_PHY
	tristate "Asix PHYs"
	help
	  Currently supports the Asix Electronics PHY found in the X-Surf 100
	  AX88796B package.

config BCM63XX_PHY
	tristate "Broadcom 63xx SOCs internal PHY"
	depends on BCM63XX || COMPILE_TEST
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the 6348 and 6358 PHYs.

config BCM7XXX_PHY
	tristate "Broadcom 7xxx SOCs internal PHYs"
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the BCM7366, BCM7439, BCM7445, and
	  40nm and 65nm generation of BCM7xxx Set Top Box SoCs.

config BCM87XX_PHY
	tristate "Broadcom BCM8706 and BCM8727 PHYs"
	help
	  Currently supports the BCM8706 and BCM8727 10G Ethernet PHYs.

config BCM_CYGNUS_PHY
	tristate "Broadcom Cygnus/Omega SoC internal PHY"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	depends on MDIO_BCM_IPROC
	select BCM_NET_PHYLIB
	---help---
	  This PHY driver is for the 1G internal PHYs of the Broadcom
	  Cygnus and Omega Family SoC.

	  Currently supports internal PHY's used in the BCM11300,
	  BCM11320, BCM11350, BCM11360, BCM58300, BCM58302,
	  BCM58303 & BCM58305 Broadcom Cygnus SoCs.

config BCM_NET_PHYLIB
	tristate

config BROADCOM_PHY
	tristate "Broadcom PHYs"
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the BCM5411, BCM5421, BCM5461, BCM54616S, BCM5464,
	  BCM5481, BCM54810 and BCM5482 PHYs.

config BCM84881_PHY
	bool "Broadcom BCM84881 PHY"
	depends on PHYLIB=y
	---help---
	  Support the Broadcom BCM84881 PHY.

config CICADA_PHY
	tristate "Cicada PHYs"
	---help---
	  Currently supports the cis8204

config CORTINA_PHY
	tristate "Cortina EDC CDR 10G Ethernet PHY"
	---help---
	  Currently supports the CS4340 phy.

config DAVICOM_PHY
	tristate "Davicom PHYs"
	---help---
	  Currently supports dm9161e and dm9131

config DP83822_PHY
	tristate "Texas Instruments DP83822/825/826 PHYs"
	---help---
	  Supports the DP83822, DP83825I, DP83825CM, DP83825CS, DP83825S,
	  DP83826C and DP83826NC PHYs.

config DP83TC811_PHY
	tristate "Texas Instruments DP83TC811 PHY"
	---help---
	  Supports the DP83TC811 PHY.

config DP83848_PHY
	tristate "Texas Instruments DP83848 PHY"
	---help---
	  Supports the DP83848 PHY.

config DP83867_PHY
	tristate "Texas Instruments DP83867 Gigabit PHY"
	---help---
	  Currently supports the DP83867 PHY.

config DP83869_PHY
	tristate "Texas Instruments DP83869 Gigabit PHY"
	---help---
	  Currently supports the DP83869 PHY.  This PHY supports copper and
	  fiber connections.

config FIXED_PHY
	tristate "MDIO Bus/PHY emulation with fixed speed/link PHYs"
	depends on PHYLIB
	select SWPHY
	---help---
	  Adds the platform "fixed" MDIO Bus to cover the boards that use
	  PHYs that are not connected to the real MDIO bus.

	  Currently tested with mpc866ads and mpc8349e-mitx.

config ICPLUS_PHY
	tristate "ICPlus PHYs"
	---help---
	  Currently supports the IP175C and IP1001 PHYs.

config INTEL_XWAY_PHY
	tristate "Intel XWAY PHYs"
	---help---
	  Supports the Intel XWAY (former Lantiq) 11G and 22E PHYs.
	  These PHYs are marked as standalone chips under the names
	  PEF 7061, PEF 7071 and PEF 7072 or integrated into the Intel
	  SoCs xRX200, xRX300, xRX330, xRX350 and xRX550.

config LSI_ET1011C_PHY
	tristate "LSI ET1011C PHY"
	---help---
	  Supports the LSI ET1011C PHY.

config LXT_PHY
	tristate "Intel LXT PHYs"
	---help---
	  Currently supports the lxt970, lxt971

config MARVELL_PHY
	tristate "Marvell PHYs"
	---help---
	  Currently has a driver for the 88E1011S

config MARVELL_10G_PHY
	tristate "Marvell Alaska 10Gbit PHYs"
	---help---
	  Support for the Marvell Alaska MV88X3310 and compatible PHYs.

config MESON_GXL_PHY
	tristate "Amlogic Meson GXL Internal PHY"
	depends on ARCH_MESON || COMPILE_TEST
	---help---
	  Currently has a driver for the Amlogic Meson GXL Internal PHY

config MICREL_PHY
	tristate "Micrel PHYs"
	---help---
	  Supports the KSZ9021, VSC8201, KS8001 PHYs.

config MICROCHIP_PHY
	tristate "Microchip PHYs"
	help
	  Supports the LAN88XX PHYs.

config MICROCHIP_T1_PHY
	tristate "Microchip T1 PHYs"
	---help---
	  Supports the LAN87XX PHYs.

config MICROSEMI_PHY
	tristate "Microsemi PHYs"
	depends on MACSEC || MACSEC=n
	select CRYPTO_AES
	select CRYPTO_ECB
	---help---
	  Currently supports VSC8514, VSC8530, VSC8531, VSC8540 and VSC8541 PHYs

config NATIONAL_PHY
	tristate "National Semiconductor PHYs"
	---help---
	  Currently supports the DP83865 PHY.

config NXP_TJA11XX_PHY
	tristate "NXP TJA11xx PHYs support"
	depends on HWMON
	---help---
	  Currently supports the NXP TJA1100 and TJA1101 PHY.

config AT803X_PHY
	tristate "Qualcomm Atheros AR803X PHYs"
	depends on REGULATOR
	help
	  Currently supports the AR8030, AR8031, AR8033 and AR8035 model

config QSEMI_PHY
	tristate "Quality Semiconductor PHYs"
	---help---
	  Currently supports the qs6612

config REALTEK_PHY
	tristate "Realtek PHYs"
	---help---
	  Supports the Realtek 821x PHY.

config RENESAS_PHY
	tristate "Driver for Renesas PHYs"
	---help---
	  Supports the Renesas PHYs uPD60620 and uPD60620A.

config ROCKCHIP_PHY
	tristate "Driver for Rockchip Ethernet PHYs"
	---help---
	  Currently supports the integrated Ethernet PHY.

config SMSC_PHY
	tristate "SMSC PHYs"
	---help---
	  Currently supports the LAN83C185, LAN8187 and LAN8700 PHYs

config STE10XP
	tristate "STMicroelectronics STe10Xp PHYs"
	---help---
	  This is the driver for the STe100p and STe101p PHYs.

config TERANETICS_PHY
	tristate "Teranetics PHYs"
	---help---
	  Currently supports the Teranetics TN2020

config VITESSE_PHY
	tristate "Vitesse PHYs"
	---help---
	  Currently supports the vsc8244

config XILINX_GMII2RGMII
	tristate "Xilinx GMII2RGMII converter driver"
	---help---
	  This driver support xilinx GMII to RGMII IP core it provides
	  the Reduced Gigabit Media Independent Interface(RGMII) between
	  Ethernet physical media devices and the Gigabit Ethernet controller.

endif # PHYLIB

config MICREL_KS8995MA
	tristate "Micrel KS8995MA 5-ports 10/100 managed Ethernet switch"
	depends on SPI
