# SPDX-License-Identifier: GPL-2.0-only
#
# PTP clock support configuration
#

menu "PTP clock support"

config PTP_1588_CLOCK
	tristate "PTP clock support"
	depends on NET && POSIX_TIMERS
	select PPS
	select NET_PTP_CLASSIFY
	help
	  The IEEE 1588 standard defines a method to precisely
	  synchronize distributed clocks over Ethernet networks. The
	  standard defines a Precision Time Protocol (PTP), which can
	  be used to achieve synchronization within a few dozen
	  microseconds. In addition, with the help of special hardware
	  time stamping units, it can be possible to achieve
	  synchronization to within a few hundred nanoseconds.

	  This driver adds support for PTP clocks as character
	  devices. If you want to use a PTP clock, then you should
	  also enable at least one clock driver as well.

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

config PTP_1588_CLOCK_DTE
	tristate "Broadcom DTE as PTP clock"
	depends on PTP_1588_CLOCK
	depends on NET && HAS_IOMEM
	depends on ARCH_BCM_MOBILE || (ARCH_BCM_IPROC && !(ARCH_BCM_NSP || ARCH_BCM_5301X)) || COMPILE_TEST
	default y
	help
	  This driver adds support for using the Digital timing engine
	  (DTE) in the Broadcom SoC's as a PTP clock.

	  The clock can be used in both wired and wireless networks
	  for PTP purposes.

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

config PTP_1588_CLOCK_QORIQ
	tristate "Freescale QorIQ 1588 timer as PTP clock"
	depends on GIANFAR || FSL_DPAA_ETH || FSL_DPAA2_ETH || FSL_ENETC || FSL_ENETC_VF || COMPILE_TEST
	depends on PTP_1588_CLOCK
	default y
	help
	  This driver adds support for using the Freescale QorIQ 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.

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

comment "Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks."
	depends on PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n

config DP83640_PHY
	tristate "Driver for the National Semiconductor DP83640 PHYTER"
	depends on NETWORK_PHY_TIMESTAMPING
	depends on PHYLIB
	depends on PTP_1588_CLOCK
	select CRC32
	help
	  Supports the DP83640 PHYTER with IEEE 1588 features.

	  This driver adds support for using the DP83640 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.

	  In order for this to work, your MAC driver must also
	  implement the skb_tx_timestamp() function.

config PTP_1588_CLOCK_INES
	tristate "ZHAW InES PTP time stamping IP core"
	depends on NETWORK_PHY_TIMESTAMPING
	depends on HAS_IOMEM
	depends on PHYLIB
	depends on PTP_1588_CLOCK
	help
	  This driver adds support for using the ZHAW InES 1588 IP
	  core.  This clock is only useful if the MII bus of your MAC
	  is wired up to the core.

config PTP_1588_CLOCK_PCH
	tristate "Intel PCH EG20T as PTP clock"
	depends on X86_32 || COMPILE_TEST
	depends on HAS_IOMEM && NET
	imply PTP_1588_CLOCK
	help
	  This driver adds support for using the PCH EG20T as a PTP
	  clock. The hardware supports time stamping of PTP packets
	  when using the end-to-end delay (E2E) mechanism. The peer
	  delay mechanism (P2P) is not supported.

	  This clock is only useful if your PTP programs are getting
	  hardware time stamps on the PTP Ethernet packets using the
	  SO_TIMESTAMPING API.

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

config PTP_1588_CLOCK_KVM
	tristate "KVM virtual PTP clock"
	depends on PTP_1588_CLOCK
	depends on (KVM_GUEST && X86) || (HAVE_ARM_SMCCC_DISCOVERY && ARM_ARCH_TIMER)
	default y
	help
	  This driver adds support for using kvm infrastructure as a PTP
	  clock. This clock is only useful if you are using KVM guests.

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

config PTP_1588_CLOCK_IDT82P33
	tristate "IDT 82P33xxx PTP clock"
	depends on PTP_1588_CLOCK && I2C
	default n
	help
	  This driver adds support for using the IDT 82P33xxx as a PTP
	  clock. This clock is only useful if your time stamping MAC
	  is connected to the IDT chip.

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

config PTP_1588_CLOCK_IDTCM
	tristate "IDT CLOCKMATRIX as PTP clock"
	depends on PTP_1588_CLOCK && I2C
	default n
	help
	  This driver adds support for using IDT CLOCKMATRIX(TM) as a PTP
	  clock. This clock is only useful if your time stamping MAC
	  is connected to the IDT chip.

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

config PTP_1588_CLOCK_VMW
	tristate "VMware virtual PTP clock"
	depends on ACPI && HYPERVISOR_GUEST && X86
	depends on PTP_1588_CLOCK
	help
	  This driver adds support for using VMware virtual precision
	  clock device as a PTP clock. This is only useful in virtual
	  machines running on VMware virtual infrastructure.

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

config PTP_1588_CLOCK_OCP
	tristate "OpenCompute TimeCard as PTP clock"
	depends on PTP_1588_CLOCK
	depends on HAS_IOMEM && PCI
	default n
	help
	  This driver adds support for an OpenCompute time card.

	  The OpenCompute time card is an atomic clock along with
	  a GPS receiver that provides a Grandmaster clock source
	  for a PTP enabled network.

	  More information is available at http://www.timingcard.com/

endmenu
