# NXP ENET ethernet drivers configuration options

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

menu "NXP ENET"

choice NXP_ENET_DRIVER
	prompt "NXP ENET Driver Version"
	default ETH_NXP_ENET if DT_HAS_NXP_ENET_MAC_ENABLED
	default ETH_MCUX if DT_HAS_NXP_KINETIS_ETHERNET_ENABLED
	depends on DT_HAS_NXP_ENET_MAC_ENABLED || DT_HAS_NXP_KINETIS_ETHERNET_ENABLED

config ETH_NXP_ENET
	bool "NXP ENET Ethernet driver"
	select NOCACHE_MEMORY if HAS_MCUX_CACHE
	select ARM_MPU if CPU_CORTEX_M7
	select MDIO if DT_HAS_NXP_ENET_MDIO_ENABLED
	select NET_POWER_MANAGEMENT if (PM_DEVICE && SOC_FAMILY_KINETIS)
	select ETH_DSA_SUPPORT
	help
	  Enable NXP ENET Ethernet driver.

config ETH_MCUX
	bool "MCUX Ethernet driver"
	select NOCACHE_MEMORY if HAS_MCUX_CACHE && CPU_HAS_DCACHE
	select ARM_MPU if CPU_CORTEX_M7
	select NET_POWER_MANAGEMENT if PM_DEVICE
	select ETH_DSA_SUPPORT
	select DEPRECATED
	help
	  Enable deprecated legacy MCUX Ethernet driver.
	  Note, this driver performs one shot PHY setup.
	  There is no support for PHY disconnect, reconnect or configuration change.

endchoice

if ETH_NXP_ENET

config ETH_NXP_ENET_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_NXP_ENET_HW_ACCELERATION
	bool "Hardware acceleration"
	default y
	help
	  Enable hardware acceleration for the following:
	  - IPv4, UDP and TCP checksum (both Rx and Tx)

config ETH_NXP_ENET_RX_BUFFERS
	int "Number of RX buffers for ethernet driver"
	default 6
	range 6 16
	help
	  Set the number of RX buffers provided to the NXP ENET driver.

config ETH_NXP_ENET_TX_BUFFERS
	int "Number of TX buffers for ethernet driver"
	default 1
	range 1 16
	help
	  Set the number of TX buffers provided to the NXP ENET driver.

config ETH_NXP_ENET_RX_THREAD_STACK_SIZE
	int "NXP ENET RX thread stack size"
	default 1600
	help
	  ENET RX thread stack size in bytes.

config ETH_NXP_ENET_RX_THREAD_PRIORITY
	int "NXP ENET driver RX cooperative thread priority"
	default 2
	help
	  ENET MAC Driver handles RX in cooperative workqueue thread.
	  This options sets the priority of that thread.

endif # ETH_NXP_ENET

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_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_HW_ACCELERATION
	bool "Hardware acceleration"
	default y
	help
	  Enable hardware acceleration for the following:
	  - IPv4, UDP and TCP checksum (both Rx and Tx)

config ETH_MCUX_RX_BUFFERS
	int "Number of RX buffers for ethernet driver"
	default 6
	range 6 16
	help
	  Set the number of RX buffers provided to the NXP ENET driver.

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

menu "Legacy driver options"

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_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 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_IMXRT10XX
	default 24000000 if SOC_SERIES_IMXRT11XX
	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

endmenu # Legacy options

endif # ETH_MCUX

endmenu # NXP ENET
