# SPDX-License-Identifier: GPL-2.0-only
config STMMAC_ETH
	tristate "STMicroelectronics Multi-Gigabit Ethernet driver"
	depends on HAS_IOMEM && HAS_DMA
	depends on PTP_1588_CLOCK_OPTIONAL
	select MII
	select PCS_XPCS
	select PAGE_POOL
	select PHYLINK
	select CRC32
	select RESET_CONTROLLER
	help
	  This is the driver for the Ethernet IPs built around a
	  Synopsys IP Core.

if STMMAC_ETH

config STMMAC_SELFTESTS
	bool "Support for STMMAC Selftests"
	depends on INET
	depends on STMMAC_ETH
	default n
	help
	  This adds support for STMMAC Selftests using ethtool. Enable this
	  feature if you are facing problems with your HW and submit the test
	  results to the netdev Mailing List.

config STMMAC_PLATFORM
	tristate "STMMAC Platform bus support"
	depends on STMMAC_ETH
	select MFD_SYSCON
	default y
	help
	  This selects the platform specific bus support for the stmmac driver.
	  This is the driver used on several SoCs:
	  STi, Allwinner, Amlogic Meson, Altera SOCFPGA.

	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.

if STMMAC_PLATFORM

config DWMAC_DWC_QOS_ETH
	tristate "Support for snps,dwc-qos-ethernet.txt DT binding."
	select CRC32
	select MII
	depends on OF && HAS_DMA
	help
	  Support for chips using the snps,dwc-qos-ethernet.txt DT binding.

config DWMAC_GENERIC
	tristate "Generic driver for DWMAC"
	default STMMAC_PLATFORM
	help
	  Generic DWMAC driver for platforms that don't require any
	  platform specific code to function or is using platform
	  data for setup.

config DWMAC_ANARION
	tristate "Adaptrum Anarion GMAC support"
	default ARC
	depends on OF && (ARC || COMPILE_TEST)
	help
	  Support for Adaptrum Anarion GMAC Ethernet controller.

	  This selects the Anarion SoC glue layer support for the stmmac driver.

config DWMAC_INGENIC
	tristate "Ingenic MAC support"
	default MACH_INGENIC
	depends on OF && HAS_IOMEM && (MACH_INGENIC || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for ethernet controller on Ingenic SoCs.

	  This selects Ingenic SoCs glue layer support for the stmmac
	  device driver. This driver is used on for the Ingenic SoCs
	  MAC ethernet controller.

config DWMAC_IPQ806X
	tristate "QCA IPQ806x DWMAC support"
	default ARCH_QCOM
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for QCA IPQ806X DWMAC Ethernet.

	  This selects the IPQ806x SoC glue layer support for the stmmac
	  device driver. This driver does not use any of the hardware
	  acceleration features available on this SoC. Network devices
	  will behave like standard non-accelerated ethernet interfaces.

	  Select the QCOM_SOCINFO config flag to enable specific dwmac
	  fixup based on the ipq806x SoC revision.

config DWMAC_LPC18XX
	tristate "NXP LPC18xx/43xx DWMAC support"
	default ARCH_LPC18XX
	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for NXP LPC18xx/43xx DWMAC Ethernet.

config DWMAC_MEDIATEK
	tristate "MediaTek MT27xx GMAC support"
	depends on OF && (ARCH_MEDIATEK || COMPILE_TEST)
	help
	  Support for MediaTek GMAC Ethernet controller.

	  This selects the MT2712 SoC support for the stmmac driver.

config DWMAC_MESON
	tristate "Amlogic Meson dwmac support"
	default ARCH_MESON
	depends on OF && COMMON_CLK && (ARCH_MESON || COMPILE_TEST)
	help
	  Support for Ethernet controller on Amlogic Meson SoCs.

	  This selects the Amlogic Meson SoC glue layer support for
	  the stmmac device driver. This driver is used for Meson6,
	  Meson8, Meson8b and GXBB SoCs.

config DWMAC_QCOM_ETHQOS
	tristate "Qualcomm ETHQOS support"
	default ARCH_QCOM
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	help
	  Support for the Qualcomm ETHQOS core.

	  This selects the Qualcomm ETHQOS glue layer support for the
	  stmmac device driver.

config DWMAC_ROCKCHIP
	tristate "Rockchip dwmac support"
	default ARCH_ROCKCHIP
	depends on OF && (ARCH_ROCKCHIP || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for Ethernet controller on Rockchip RK3288 SoC.

	  This selects the Rockchip RK3288 SoC glue layer support for
	  the stmmac device driver.

config DWMAC_RZN1
	tristate "Renesas RZ/N1 dwmac support"
	default ARCH_RZN1
	depends on OF && (ARCH_RZN1 || COMPILE_TEST)
	select PCS_RZN1_MIIC
	help
	  Support for Ethernet controller on Renesas RZ/N1 SoC family.

	  This selects the Renesas RZ/N1 SoC glue layer support for
	  the stmmac device driver. This support can make use of a custom MII
	  converter PCS device.

config DWMAC_SOCFPGA
	tristate "SOCFPGA dwmac support"
	default ARCH_INTEL_SOCFPGA
	depends on OF && (ARCH_INTEL_SOCFPGA || COMPILE_TEST)
	select MFD_SYSCON
	select MDIO_REGMAP
	select REGMAP_MMIO
	select PCS_LYNX
	help
	  Support for ethernet controller on Altera SOCFPGA

	  This selects the Altera SOCFPGA SoC glue layer support
	  for the stmmac device driver. This driver is used for
	  arria5 and cyclone5 FPGA SoCs.

config DWMAC_STARFIVE
	tristate "StarFive dwmac support"
	depends on OF && (ARCH_STARFIVE || COMPILE_TEST)
	select MFD_SYSCON
	default m if ARCH_STARFIVE
	help
	  Support for ethernet controllers on StarFive RISC-V SoCs

	  This selects the StarFive platform specific glue layer support
	  for the stmmac device driver. This driver is used for the
	  StarFive JH7100 and JH7110 ethernet controllers.

config DWMAC_STI
	tristate "STi GMAC support"
	default ARCH_STI
	depends on OF && (ARCH_STI || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for ethernet controller on STi SOCs.

	  This selects STi SoC glue layer support for the stmmac
	  device driver. This driver is used on for the STi series
	  SOCs GMAC ethernet controller.

config DWMAC_STM32
	tristate "STM32 DWMAC support"
	default ARCH_STM32
	depends on OF && HAS_IOMEM && (ARCH_STM32 || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for ethernet controller on STM32 SOCs.

	  This selects STM32 SoC glue layer support for the stmmac
	  device driver. This driver is used on for the STM32 series
	  SOCs GMAC ethernet controller.

config DWMAC_SUNXI
	tristate "Allwinner GMAC support"
	default ARCH_SUNXI
	depends on OF && (ARCH_SUNXI || COMPILE_TEST)
	help
	  Support for Allwinner A20/A31 GMAC ethernet controllers.

	  This selects Allwinner SoC glue layer support for the
	  stmmac device driver. This driver is used for A20/A31
	  GMAC ethernet controller.

config DWMAC_SUN8I
	tristate "Allwinner sun8i GMAC support"
	default ARCH_SUNXI
	depends on OF && (ARCH_SUNXI || COMPILE_TEST)
	select MDIO_BUS_MUX
	help
	  Support for Allwinner H3 A83T A64 EMAC ethernet controllers.

	  This selects Allwinner SoC glue layer support for the
	  stmmac device driver. This driver is used for H3/A83T/A64
	  EMAC ethernet controller.

config DWMAC_IMX8
	tristate "NXP IMX8 DWMAC support"
	default ARCH_MXC
	depends on OF && (ARCH_MXC || COMPILE_TEST)
	select MFD_SYSCON
	help
	  Support for ethernet controller on NXP i.MX8 SOCs.

	  This selects NXP SoC glue layer support for the stmmac
	  device driver. This driver is used for i.MX8 series like
	  iMX8MP/iMX8DXL GMAC ethernet controller.

config DWMAC_INTEL_PLAT
	tristate "Intel dwmac support"
	depends on OF && COMMON_CLK
	depends on STMMAC_ETH
	help
	  Support for ethernet controllers on Intel SoCs

	  This selects the Intel platform specific glue layer support for
	  the stmmac device driver. This driver is used for the Intel Keem Bay
	  SoC.

config DWMAC_LOONGSON1
	tristate "Loongson1 GMAC support"
	default MACH_LOONGSON32
	depends on OF && (MACH_LOONGSON32 || COMPILE_TEST)
	help
	  Support for ethernet controller on Loongson1 SoC.

	  This selects Loongson1 SoC glue layer support for the stmmac
	  device driver. This driver is used for Loongson1-based boards
	  like Loongson LS1B/LS1C.

config DWMAC_TEGRA
	tristate "NVIDIA Tegra MGBE support"
	depends on ARCH_TEGRA || COMPILE_TEST
	help
	  This selects the Multi-GigaBit Ethernet (MGBE) Controller that is
	  found on the NVIDIA Tegra SoC devices. This driver provides the glue
	  layer on top of the stmmac driver required for these NVIDIA Tegra SoC
	  devices.

config DWMAC_VISCONTI
	tristate "Toshiba Visconti DWMAC support"
	default ARCH_VISCONTI
	depends on OF && COMMON_CLK && (ARCH_VISCONTI || COMPILE_TEST)
	help
	  Support for ethernet controller on Visconti SoCs.

endif

config DWMAC_INTEL
	tristate "Intel GMAC support"
	default X86
	depends on X86 && STMMAC_ETH && PCI
	depends on COMMON_CLK
	help
	  This selects the Intel platform specific bus support for the
	  stmmac driver. This driver is used for Intel Quark/EHL/TGL.

config DWMAC_LOONGSON
	tristate "Loongson PCI DWMAC support"
	default MACH_LOONGSON64
	depends on (MACH_LOONGSON64 || COMPILE_TEST) && STMMAC_ETH && PCI
	depends on COMMON_CLK
	help
	  This selects the LOONGSON PCI bus support for the stmmac driver,
	  Support for ethernet controller on Loongson-2K1000 SoC and LS7A1000 bridge.

config STMMAC_PCI
	tristate "STMMAC PCI bus support"
	depends on STMMAC_ETH && PCI
	depends on COMMON_CLK
	help
	  This selects the platform specific bus support for the stmmac driver.
	  This driver was tested on XLINX XC2V3000 FF1152AMT0221
	  D1215994A VIRTEX FPGA board and SNPS QoS IPK Prototyping Kit.

	  If you have a controller with this interface, say Y or M here.

	  If unsure, say N.
endif
