# SPDX-License-Identifier: GPL-2.0-only
#
# MDIO 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.

config FWNODE_MDIO
	def_tristate PHYLIB
	depends on (ACPI || OF) || COMPILE_TEST
	select FIXED_PHY
	help
	  FWNODE MDIO bus (Ethernet PHY) accessors

config OF_MDIO
	def_tristate PHYLIB
	depends on OF
	depends on PHYLIB
	select FIXED_PHY
	help
	  OpenFirmware MDIO bus (Ethernet PHY) accessors

config ACPI_MDIO
	def_tristate PHYLIB
	depends on ACPI
	depends on PHYLIB
	help
	  ACPI MDIO bus (Ethernet PHY) accessors

if MDIO_BUS

config MDIO_DEVRES
	tristate

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

config MDIO_ASPEED
	tristate "ASPEED MDIO bus controller"
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on OF_MDIO && HAS_IOMEM
	depends on MDIO_DEVRES
	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_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_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_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_MVUSB
	tristate "Marvell USB to MDIO Adapter"
	depends on USB
	select MDIO_DEVRES
	help
	  A USB to MDIO converter present on development boards for
	  Marvell's Link Street family of Ethernet switches.

config MDIO_MSCC_MIIM
	tristate "Microsemi MIIM interface support"
	depends on HAS_IOMEM && REGMAP_MMIO
	select MDIO_DEVRES
	help
	  This driver supports the MIIM (MDIO) interface found in the network
	  switches of the Microsemi SoCs; it is recommended to switch on
	  CONFIG_HIGH_RES_TIMERS

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_OCTEON
	tristate "Octeon and some ThunderX SOCs MDIO buses"
	depends on (64BIT && OF_MDIO) || COMPILE_TEST
	depends on HAS_IOMEM
	select MDIO_CAVIUM
	select MDIO_DEVRES
	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_IPQ4019
	tristate "Qualcomm IPQ4019 MDIO interface support"
	depends on HAS_IOMEM && OF_MDIO
	depends on COMMON_CLK
	depends on MDIO_DEVRES
	help
	  This driver supports the MDIO interface found in Qualcomm
	  IPQ40xx, IPQ60xx, IPQ807x and IPQ50xx series Soc-s.

config MDIO_IPQ8064
	tristate "Qualcomm IPQ8064 MDIO interface support"
	depends on HAS_IOMEM && OF_MDIO
	depends on MFD_SYSCON
	depends on MDIO_DEVRES
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the IPQ8064 SoC

config MDIO_REGMAP
	tristate
	help
	  This driver allows using MDIO devices that are not sitting on a
	  regular MDIO bus, but still exposes the standard 802.3 register
	  layout. It's regmap-based so that it can be used on integrated,
	  memory-mapped PHYs, SPI PHYs and so on. A new virtual MDIO bus is
	  created, and its read/write operations are mapped to the underlying
	  regmap. Users willing to use this driver must explicitly select
	  REGMAP.

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

comment "MDIO Multiplexers"

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_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_MESON_GXL
	tristate "Amlogic GXL 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 GXL SoC. The multiplexer connects either the external
	  or the internal MDIO bus to the parent bus.

config MDIO_BUS_MUX_BCM6368
	tristate "Broadcom BCM6368 MDIO bus multiplexers"
	depends on OF && OF_MDIO && (BMIPS_GENERIC || COMPILE_TEST)
	select MDIO_BUS_MUX
	default BMIPS_GENERIC
	help
	  This module provides a driver for MDIO bus multiplexers found in
	  BCM6368 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_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_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_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.


endif
endif
