# 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 && CPU_HAS_DCACHE
	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_1G
	bool "1G mode for ENET1G instance"
	default y
	depends on DT_HAS_NXP_ENET1G_ENABLED
	help
	  Enable the use of the ENET1G ethernet instance in 1G mode.

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
	depends on !NET_IPV6
	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
