# ETH_MCUX Ethernet driver configuration options

# Copyright (c) 2016-2017 ARM Ltd
# SPDX-License-Identifier: Apache-2.0

menuconfig ETH_MCUX
	bool "MCUX Ethernet driver"
	depends on HAS_MCUX_ENET
	select NOCACHE_MEMORY if HAS_MCUX_CACHE
	select ARM_MPU if CPU_CORTEX_M7
	select NET_POWER_MANAGEMENT if PM_DEVICE
	help
	  Enable MCUX Ethernet driver.  Note, this driver performs one shot PHY
	  setup.  There is no support for PHY disconnect, reconnect or
	  configuration change.

if ETH_MCUX

config ETH_MCUX_PROMISCUOUS_MODE
	bool "Promiscuous mode"
	help
	  Place the Ethernet receiver in promiscuous mode. This may be useful
	  for debugging and not needed for normal work.

config ETH_MCUX_RMII_EXT_CLK
	bool "RMII clock from external sources"
	help
	  Setting this option will configure MCUX clock block to feed RMII
	  reference clock from external source (ENET_1588_CLKIN)

config ETH_MCUX_NO_PHY_SMI
	bool "Do not use SMI for PHY communication"
	help
	  Some PHY devices, with DSA capabilities do not use SMI for
	  communication with MAC ENET controller. Other busses - like SPI
	  or I2C are used instead.

config ETH_MCUX_PHY_TICK_MS
	int "PHY poll period (ms)"
	default 1000
	range 100 30000
	help
	  Set the PHY status polling period.

config ETH_MCUX_PHY_EXTRA_DEBUG
	bool "Additional detailed PHY debug"
	help
	  Enable additional PHY related debug information related to
	  PHY status polling.

config ETH_MCUX_RX_BUFFERS
	int "Number of MCUX RX buffers"
	default 1
	range 1 16
	help
	  Set the number of RX buffers provided to the MCUX driver.

config ETH_MCUX_PHY_RESET
	bool "Reset the PHY at boot"
	help
	  Reset the ethernet PHY at boot. Requires dts properties int-gpios and
	  reset-gpios to be present.

config ETH_MCUX_TX_BUFFERS
	int "Number of MCUX TX buffers"
	default 1
	range 1 16
	help
	  Set the number of TX buffers provided to the MCUX driver.

config ETH_MCUX_HW_ACCELERATION
	bool "Hardware acceleration"
	help
	  Enable hardware acceleration for the following:
	  - IPv4, UDP and TCP checksum (both Rx and Tx)

config PTP_CLOCK_MCUX
	bool "MCUX PTP clock driver support"
	default y
	depends on PTP_CLOCK || NET_L2_PTP
	help
	  Enable MCUX PTP clock support.

if PTP_CLOCK_MCUX

config ETH_MCUX_PTP_CLOCK_SRC_HZ
	int "Frequency of the clock source for the PTP timer"
	default 50000000 if SOC_SERIES_KINETIS_K6X
	default 50000000 if SOC_SERIES_IMX_RT10XX
	default 24000000 if SOC_SERIES_IMX_RT11XX
	help
	  Set the frequency in Hz sourced to the PTP timer.
	  If the value is set properly, the timer will be accurate.

config ETH_MCUX_PTP_CLOCK_INIT_PRIO
	int
	default 85
	help
	  MCUX PTP Clock initialization priority level. There is
	  a dependency from the network stack that this device
	  initializes before network stack (NET_INIT_PRIO).

endif # PTP_CLOCK_MCUX

endif # ETH_MCUX
