# 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
	select NOCACHE_MEMORY
	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_BUF_RX_COUNT
	int "Network RX buffers preallocated by the SAM ETH driver"
	default 12
	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.

config ETH_SAM_GMAC_RANDOM_MAC
	bool "Random MAC address"
	help
	  Generate a random MAC address dynamically.

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
