# Kconfig - Atmel SAM Ethernet (GMAC) driver configuration options
#
# Copyright (c) 2016 Piotr Mienkowski
# SPDX-License-Identifier: Apache-2.0
#

menuconfig ETH_SAM_GMAC
	bool "Atmel SAM Ethernet driver"
	depends on SOC_FAMILY_SAM
	help
	  Enable Atmel SAM MCU Family Ethernet driver.

if ETH_SAM_GMAC

config ETH_SAM_GMAC_NAME
	string "Device name"
	default "ETH_0"
	help
	  Device name allows user to obtain a handle to the device object
	  required by all driver API functions. Device name has to be unique.

config ETH_SAM_GMAC_QUEUES
	int "Number of hardware TX and RX queues"
	default 1
	range 1 3
	help
	  Select the number of hardware queues used by the driver. Packets will be
	  routed to appropriate queues based on their priority.

config ETH_SAM_GMAC_TX_TIMEOUT_MSEC
	int "TX timeout"
	default 5000
	range 1000 10000
	help
	  The maximum time in msec that the driver will wait for a TX interrupt
	  after scheduling a packet to be sent. If no interrupt is reported during
	  that period, all TX packets in the queue will be discarded.

config ETH_SAM_GMAC_BUF_RX_COUNT
	int "Network RX buffers preallocated by the SAM ETH driver"
	default 18
	help
	  Number of network buffers that will be permanently allocated by the
	  Ethernet driver. These buffers are used in receive path. They are
	  preallocated by the driver and made available to the GMAC module to be
	  filled in with incoming data. Their number has to be large enough to fit
	  at least one complete Ethernet frame. SAM ETH driver will always allocate
	  that amount of buffers for itself thus reducing the NET_BUF_RX_COUNT
	  which is a total amount of RX data buffers used by the whole networking
	  stack. One has to ensure that NET_PKT_RX_COUNT is large enough to
	  fit at least two Ethernet frames: one being received by the GMAC module
	  and the other being processed by the higher layer networking stack.

config ETH_SAM_GMAC_IRQ_PRI
	int "Interrupt priority"
	default 0
	help
	  IRQ priority of Ethernet device

choice ETH_SAM_GMAC_MAC_SELECT
	prompt "MAC address"
	help
	  Choose how to configure MAC address.

config ETH_SAM_GMAC_MAC_MANUAL
	bool "Manual"
	help
	  Assign an arbitrary MAC address.

config ETH_SAM_GMAC_MAC_I2C_EEPROM
	bool "Read from an I2C EEPROM"
	help
	  Read MAC address from an I2C EEPROM.

endchoice

if ETH_SAM_GMAC_MAC_MANUAL

config ETH_SAM_GMAC_MAC0
	hex "MAC Address Byte 0"
	default 0
	range 0 0xff

config ETH_SAM_GMAC_MAC1
	hex "MAC Address Byte 1"
	default 0
	range 0 0xff

config ETH_SAM_GMAC_MAC2
	hex "MAC Address Byte 2"
	default 0
	range 0 0xff

config ETH_SAM_GMAC_MAC3
	hex "MAC Address Byte 3"
	default 0
	range 0 0xff

config ETH_SAM_GMAC_MAC4
	hex "MAC Address Byte 4"
	default 0
	range 0 0xff

config ETH_SAM_GMAC_MAC5
	hex "MAC Address Byte 5"
	default 0
	range 0 0xff

endif # ETH_SAM_GMAC_MAC_MANUAL

if ETH_SAM_GMAC_MAC_I2C_EEPROM

config ETH_SAM_GMAC_MAC_I2C_SLAVE_ADDRESS
	hex "I2C 7-bit EEPROM chip address"
	range 0 0xff
	help
	  I2C 7-bit address of the EEPROM chip.

config ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS
	hex "I2C EEPROM internal address"
	range 0 0xffffffff
	help
	  Internal address of the EEPROM chip where the MAC address is stored.
	  Chips with 1 to 4 byte internal address size are supported. Address
	  size has to be configured in a separate Kconfig option.

config ETH_SAM_GMAC_MAC_I2C_INT_ADDRESS_SIZE
	int "I2C EEPROM internal address size"
	default 1
	range 1 4
	help
	  Size (in bytes) of the internal EEPROM address.

config ETH_SAM_GMAC_MAC_I2C_DEV_NAME
	string "I2C bus driver device name"
	help
	  Device name, e.g. I2C_0, of an I2C bus driver device. It is required to
	  obtain handle to the I2C device object.

endif # ETH_SAM_GMAC_MAC_I2C_EEPROM

choice
	prompt "MII/RMII Interface to the Physical Layer"

	config ETH_SAM_GMAC_RMII
		bool "RMII"

	config ETH_SAM_GMAC_MII
		bool "MII"
endchoice

config ETH_SAM_GMAC_PHY_ADDR
	int "GMAC PHY Address"
	default 0
	help
	  GMAC PHY Address as used by IEEE 802.3, Section 2 MII compatible PHY
	  transceivers. If you have a single PHY on board it is safe to leave it
	  at 0 which is the broadcast address.

config PTP_CLOCK_SAM_GMAC
	bool "SAM GMAC PTP clock driver support"
	default y
	select PTP_CLOCK
	depends on NET_GPTP
	help
	  Enable SAM GMAC PTP Clock support.

endif # ETH_SAM_GMAC
