# 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
	depends on ETHTOOL_NETLINK
	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_RENESAS_GBETH
	tristate "Renesas RZ/V2H(P) GBETH and RZ/T2H, RZ/N2H GMAC support"
	default ARCH_RENESAS
	depends on OF && (ARCH_RENESAS || COMPILE_TEST)
	select PCS_RZN1_MIIC
	help
	  Support for Gigabit Ethernet Interface (GBETH)/ Ethernet MAC (GMAC)
	  on Renesas SoCs.

	  This selects Renesas SoC glue layer support for the stmmac device
	  driver. This driver is used for the RZ/V2H(P) family, RZ/T2H and
	  RZ/N2H SoCs.

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_S32
	tristate "NXP S32G/S32R GMAC support"
	default ARCH_S32
	depends on OF && (ARCH_S32 || COMPILE_TEST)
	help
	  Support for ethernet controller on NXP S32CC SOCs.

	  This selects NXP SoC glue layer support for the stmmac
	  device driver. This driver is used for the S32CC series
	  SOCs GMAC ethernet controller, ie. S32G2xx, S32G3xx and
	  S32R45.

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_SOPHGO
	tristate "Sophgo dwmac support"
	depends on OF && (ARCH_SOPHGO || COMPILE_TEST)
	default m if ARCH_SOPHGO
	help
	  Support for ethernet controllers on Sophgo RISC-V SoCs

	  This selects the Sophgo SoC specific glue layer support
	  for the stmmac device driver. This driver is used for the
	  ethernet controllers on various Sophgo 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_SUN55I
	tristate "Allwinner sun55i GMAC200 support"
	default ARCH_SUNXI
	depends on OF && (ARCH_SUNXI || COMPILE_TEST)
	select MDIO_BUS_MUX
	help
	  Support for Allwinner A523/T527 GMAC200 ethernet controllers.

	  This selects Allwinner SoC glue layer support for the
	  stmmac device driver. This driver is used for A523/T527
	  GMAC200 ethernet controller.

config DWMAC_THEAD
	tristate "T-HEAD dwmac support"
	depends on OF && (ARCH_THEAD || COMPILE_TEST)
	help
	  Support for ethernet controllers on T-HEAD RISC-V SoCs

	  This selects the T-HEAD platform specific glue layer support for
	  the stmmac device driver. This driver is used for T-HEAD TH1520
	  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
	depends on ACPI
	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
