# Distributed Switch Architecture [DSA] configuration options

# Copyright (c) 2020 DENX Software Engineering GmbH
#               Lukasz Majewski <lukma@denx.de>
# SPDX-License-Identifier: Apache-2.0

menuconfig NET_DSA
	bool "Distributed Switch Architecture support"
	depends on ETH_MCUX || ETH_SAM_GMAC || ETH_STM32_HAL
	help
	  Enable Distributed Switch Architecture support. For now it
	  only supports Kinetics and STM32 ENET drivers.

if NET_DSA

config DSA_KSZ8XXX
	bool

config DSA_KSZ8794
	bool "Support for KSZ8794"
	default y
	depends on DT_HAS_MICROCHIP_KSZ8794_ENABLED
	select DSA_KSZ8XXX
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_MICROCHIP_KSZ8794),spi)
	help
	  Add support for KSZ8794 DSA device driver.

config DSA_KSZ8863
	bool "Support for KSZ8863"
	default y
	depends on DT_HAS_MICROCHIP_KSZ8863_ENABLED
	select DSA_KSZ8XXX
	select SPI if $(dt_compat_on_bus,$(DT_COMPAT_MICROCHIP_KSZ8863),spi)
	help
	  Add support for KSZ8863 DSA device driver.

config DSA_KSZ_TAIL_TAGGING
	bool "Support for tail tagging"
	depends on DSA_KSZ8794 || DSA_KSZ8863
	help
	  Add support for tail tagging on DSA device.

config DSA_SPI
	bool "Support for PHY SPI interface"
	depends on SPI && (DSA_KSZ8794 || DSA_KSZ8863)
	help
	  Use SPI bus to communicate with PHY

module = NET_DSA
module-dep = NET_LOG
module-str = Log level for DSA
module-help = Enables core DSA code to output debug messages.
source "subsys/net/Kconfig.template.log_config.net"

endif # NET_DSA
