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

endmenu
