# SPDX-License-Identifier: GPL-2.0-only
#
# TI device configuration
#

config NET_VENDOR_TI
	bool "Texas Instruments (TI) devices"
	default y
	depends on PCI || EISA || ARCH_DAVINCI || ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3
	help
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about TI devices. If you say Y, you will be asked for
	  your specific card in the following questions.

if NET_VENDOR_TI

config TI_DAVINCI_EMAC
	tristate "TI DaVinci EMAC Support"
	depends on ARM && ( ARCH_DAVINCI || ARCH_OMAP3 ) || COMPILE_TEST
	select TI_DAVINCI_MDIO
	select PHYLIB
	select GENERIC_ALLOCATOR
	help
	  This driver supports TI's DaVinci Ethernet .

	  To compile this driver as a module, choose M here: the module
	  will be called davinci_emac_driver.  This is recommended.

config TI_DAVINCI_MDIO
	tristate "TI DaVinci MDIO Support"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST
	select PHYLIB
	select MDIO_BITBANG
	help
	  This driver supports TI's DaVinci MDIO module.

	  To compile this driver as a module, choose M here: the module
	  will be called davinci_mdio.  This is recommended.

config TI_CPSW_PHY_SEL
	bool "TI CPSW Phy mode Selection (DEPRECATED)"
	default n
	help
	  This driver supports configuring of the phy mode connected to
	  the CPSW. DEPRECATED: use PHY_TI_GMII_SEL.

config TI_CPSW
	tristate "TI CPSW Switch Support"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || COMPILE_TEST
	depends on TI_CPTS || !TI_CPTS
	select TI_DAVINCI_MDIO
	select MFD_SYSCON
	select PAGE_POOL
	select REGMAP
	imply PHY_TI_GMII_SEL
	help
	  This driver supports TI's CPSW Ethernet Switch.

	  To compile this driver as a module, choose M here: the module
	  will be called cpsw.

config TI_CPSW_SWITCHDEV
	tristate "TI CPSW Switch Support with switchdev"
	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || COMPILE_TEST
	depends on NET_SWITCHDEV
	depends on TI_CPTS || !TI_CPTS
	select PAGE_POOL
	select TI_DAVINCI_MDIO
	select MFD_SYSCON
	select REGMAP
	select NET_DEVLINK
	imply PHY_TI_GMII_SEL
	help
	  This driver supports TI's CPSW Ethernet Switch.

	  To compile this driver as a module, choose M here: the module
	  will be called cpsw_new.

config TI_CPTS
	tristate "TI Common Platform Time Sync (CPTS) Support"
	depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || COMPILE_TEST
	depends on COMMON_CLK
	depends on PTP_1588_CLOCK
	help
	  This driver supports the Common Platform Time Sync unit of
	  the CPSW Ethernet Switch and Keystone 2 1g/10g Switch Subsystem.
	  The unit can time stamp PTP UDP/IPv4 and Layer 2 packets, and the
	  driver offers a PTP Hardware Clock.

config TI_K3_CPPI_DESC_POOL
	tristate

config TI_K3_AM65_CPSW_NUSS
	tristate "TI K3 AM654x/J721E CPSW Ethernet driver"
	depends on ARCH_K3 && OF && TI_K3_UDMA_GLUE_LAYER
	select NET_DEVLINK
	select TI_DAVINCI_MDIO
	select PHYLINK
	select TI_K3_CPPI_DESC_POOL
	imply PHY_TI_GMII_SEL
	depends on TI_K3_AM65_CPTS || !TI_K3_AM65_CPTS
	help
	  This driver supports TI K3 AM654/J721E CPSW2G Ethernet SubSystem.
	  The two-port Gigabit Ethernet MAC (MCU_CPSW0) subsystem provides
	  Ethernet packet communication for the device: One Ethernet port
	  (port 1) with selectable RGMII and RMII interfaces and an internal
	  Communications Port Programming Interface (CPPI) port (port 0).

	  To compile this driver as a module, choose M here: the module
	  will be called ti-am65-cpsw-nuss.

config TI_K3_AM65_CPSW_SWITCHDEV
	bool "TI K3 AM654x/J721E CPSW Switch mode support"
	depends on TI_K3_AM65_CPSW_NUSS
	depends on NET_SWITCHDEV
	help
	 This enables switchdev support for TI K3 CPSWxG Ethernet
	 Switch. Enable this driver to support hardware switch support for AM65
	 CPSW NUSS driver.

config TI_K3_AM65_CPTS
	tristate "TI K3 AM65x CPTS"
	depends on ARCH_K3 && OF
	depends on PTP_1588_CLOCK
	help
	  Say y here to support the TI K3 AM65x CPTS with 1588 features such as
	  PTP hardware clock for each CPTS device and network packets
	  timestamping where applicable.
	  Depending on integration CPTS blocks enable compliance with
	  the IEEE 1588-2008 standard for a precision clock synchronization
	  protocol, Ethernet Enhanced Scheduled Traffic Operations (CPTS_ESTFn)
	  and PCIe Subsystem Precision Time Measurement (PTM).

config TI_AM65_CPSW_QOS
	bool "Enable QoS offload features in AM65 CPSW"
	depends on TI_K3_AM65_CPSW_NUSS && NET_SCH_TAPRIO && TI_K3_AM65_CPTS
	help
	  This option enables QoS offload features in AM65 CPSW like
	  Time Aware Shaper (TAS) / Enhanced Scheduled Traffic (EST),
	  MQPRIO qdisc offload and Frame-Preemption MAC Merge / Interspersing
	  Express Traffic (IET).
	  The EST scheduler runs on CPTS and the TAS/EST schedule is
	  updated in the Fetch RAM memory of the CPSW.

config TI_KEYSTONE_NETCP
	tristate "TI Keystone NETCP Core Support"
	select TI_DAVINCI_MDIO
	depends on OF
	depends on KEYSTONE_NAVIGATOR_DMA && KEYSTONE_NAVIGATOR_QMSS
	depends on TI_CPTS || !TI_CPTS
	help
	  This driver supports TI's Keystone NETCP Core.

	  To compile this driver as a module, choose M here: the module
	  will be called keystone_netcp.

config TI_KEYSTONE_NETCP_ETHSS
	depends on TI_KEYSTONE_NETCP
	tristate "TI Keystone NETCP Ethernet subsystem Support"
	help

	  To compile this driver as a module, choose M here: the module
	  will be called keystone_netcp_ethss.

config TLAN
	tristate "TI ThunderLAN support"
	depends on (PCI || EISA)
	help
	  If you have a PCI Ethernet network card based on the ThunderLAN chip
	  which is supported by this driver, say Y here.

	  Devices currently supported by this driver are Compaq Netelligent,
	  Compaq NetFlex and Olicom cards.  Please read the file
	  <file:Documentation/networking/device_drivers/ethernet/ti/tlan.rst>
	  for more details.

	  To compile this driver as a module, choose M here. The module
	  will be called tlan.

	  Please email feedback to <torben.mathiasen@compaq.com>.

config TI_ICSSG_PRUETH
	tristate "TI Gigabit PRU Ethernet driver"
	select PHYLIB
	select TI_ICSS_IEP
	select TI_K3_CPPI_DESC_POOL
	depends on PRU_REMOTEPROC
	depends on ARCH_K3 && OF && TI_K3_UDMA_GLUE_LAYER
	depends on PTP_1588_CLOCK_OPTIONAL
	help
	  Support dual Gigabit Ethernet ports over the ICSSG PRU Subsystem.
	  This subsystem is available starting with the AM65 platform.

	  This driver requires firmware binaries which will run on the PRUs
	  to support the Ethernet operation. Currently, it supports Ethernet
	  with 1G and 100M link speed.

config TI_ICSS_IEP
	tristate "TI PRU ICSS IEP driver"
	depends on PTP_1588_CLOCK_OPTIONAL
	depends on TI_PRUSS
	default TI_PRUSS
	help
	  This driver enables support for the PRU-ICSS Industrial Ethernet
	  Peripheral within a PRU-ICSS subsystem present on various TI SoCs.

	  To compile this driver as a module, choose M here. The module
	  will be called icss_iep.

endif # NET_VENDOR_TI
