# 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"
	default y
	depends on DT_HAS_NXP_KINETIS_ETHERNET_ENABLED
	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_USE_DTCM_FOR_DMA_BUFFER
	bool "Use DTCM for hardware DMA buffers"
	default y
	help
	  Place the hardware DMA buffers into DTCM for better networking
	  performance

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 6
	range 6 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
