# 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
	help
	  Enable Distributed Switch Architecture support. For now it
	  only supports Kinetics ENET driver.

if NET_DSA

config DSA_KSZ8XXX
	bool

config DSA_KSZ8794
	bool "Enable support for KSZ8794"
	select DSA_KSZ8XXX
	help
	  Add support for KSZ8794 DSA device driver.

config DSA_KSZ8863
	bool "Enable support for KSZ8863"
	select DSA_KSZ8XXX
	help
	  Add support for KSZ8863 DSA device driver.

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

config DSA_SPI
	bool "Enable 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
