# SPDX-License-Identifier: GPL-2.0
config FSL_ENETC
	tristate "ENETC PF driver"
	depends on PCI && PCI_MSI && (ARCH_LAYERSCAPE || COMPILE_TEST)
	select PHYLIB
	help
	  This driver supports NXP ENETC gigabit ethernet controller PCIe
	  physical function (PF) devices, managing ENETC Ports at a privileged
	  level.

	  If compiled as module (M), the module name is fsl-enetc.

config FSL_ENETC_VF
	tristate "ENETC VF driver"
	depends on PCI && PCI_MSI && (ARCH_LAYERSCAPE || COMPILE_TEST)
	select PHYLIB
	help
	  This driver supports NXP ENETC gigabit ethernet controller PCIe
	  virtual function (VF) devices enabled by the ENETC PF driver.

	  If compiled as module (M), the module name is fsl-enetc-vf.

config FSL_ENETC_MDIO
	tristate "ENETC MDIO driver"
	depends on PCI && (ARCH_LAYERSCAPE || COMPILE_TEST)
	help
	  This driver supports NXP ENETC Central MDIO controller as a PCIe
	  physical function (PF) device.

	  If compiled as module (M), the module name is fsl-enetc-mdio.

config FSL_ENETC_PTP_CLOCK
	tristate "ENETC PTP clock driver"
	depends on PTP_1588_CLOCK_QORIQ && (FSL_ENETC || FSL_ENETC_VF)
	default y
	help
	  This driver adds support for using the ENETC 1588 timer
	  as a PTP clock. This clock is only useful if your PTP
	  programs are getting hardware time stamps on the PTP Ethernet
	  packets using the SO_TIMESTAMPING API.

	  If compiled as module (M), the module name is fsl-enetc-ptp.

config FSL_ENETC_HW_TIMESTAMPING
	bool "ENETC hardware timestamping support"
	depends on FSL_ENETC || FSL_ENETC_VF
	help
	  Enable hardware timestamping support on the Ethernet packets
	  using the SO_TIMESTAMPING API. Because the RX BD ring dynamic
	  allocation has not been supported and it is too expensive to use
	  extended RX BDs if timestamping is not used, this option enables
	  extended RX BDs in order to support hardware timestamping.
