# SPDX-License-Identifier: GPL-2.0
#
# Platform support for Mellanox hardware
#

menuconfig MELLANOX_PLATFORM
	bool "Platform support for Mellanox hardware"
	depends on X86 || ARM || ARM64 || COMPILE_TEST
	help
	  Say Y here to get to see options for platform support for
	  Mellanox systems. This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if MELLANOX_PLATFORM

config MLXREG_HOTPLUG
	tristate "Mellanox platform hotplug driver support"
	depends on HWMON
	depends on I2C
	select REGMAP
	help
	  This driver handles hot-plug events for the power suppliers, power
	  cables and fans on the wide range Mellanox IB and Ethernet systems.

config MLXREG_IO
	tristate "Mellanox platform register access driver support"
	depends on HWMON
	select REGMAP
	help
	  This driver allows access to Mellanox programmable device register
	  space through sysfs interface. The sets of registers for sysfs access
	  are defined per system type bases and include the registers related
	  to system resets operation, system reset causes monitoring and some
	  kinds of mux selection.

config MLXREG_LC
	tristate "Mellanox line card platform driver support"
	depends on HWMON
	depends on I2C
	select REGMAP
	help
	  This driver provides support for the Mellanox MSN4800-XX line cards,
	  which are the part of MSN4800 Ethernet modular switch systems
	  providing a high performance switching solution for Enterprise Data
	  Centers (EDC) for building Ethernet based clusters, High-Performance
	  Computing (HPC) and embedded environments.

config MLXBF_TMFIFO
	tristate "Mellanox BlueField SoC TmFifo platform driver"
	depends on ARM64
	depends on ACPI
	depends on VIRTIO_CONSOLE && VIRTIO_NET
	help
	  Say y here to enable TmFifo support. The TmFifo driver provides
	  platform driver support for the TmFifo which supports console
	  and networking based on the virtio framework.

config MLXBF_BOOTCTL
	tristate "Mellanox BlueField Firmware Boot Control driver"
	depends on ARM64
	depends on ACPI
	help
	  The Mellanox BlueField firmware implements functionality to
	  request swapping the primary and alternate eMMC boot partition,
	  and to set up a watchdog that can undo that swap if the system
	  does not boot up correctly. This driver provides sysfs access
	  to the userspace tools, to be used in conjunction with the eMMC
	  device driver to do necessary initial swap of the boot partition.

config MLXBF_PMC
	tristate "Mellanox BlueField Performance Monitoring Counters driver"
	depends on ARM64
	depends on HWMON
	depends on ACPI
	help
	  Say y here to enable PMC support. The PMC driver provides access
	  to performance monitoring counters within various blocks in the
	  Mellanox BlueField SoC via a sysfs interface.

config NVSW_SN2201
	tristate "Nvidia SN2201 platform driver support"
	depends on HWMON
	depends on I2C
	select REGMAP_I2C
	help
	  This driver provides support for the Nvidia SN2201 platform.
	  The SN2201 is a highly integrated for one rack unit system with
	  L3 management switches. It has 48 x 1Gbps RJ45 + 4 x 100G QSFP28
	  ports in a compact 1RU form factor. The system also including a
	  serial port (RS-232 interface), an OOB port (1G/100M MDI interface)
	  and USB ports for management functions.
	  The processor used on SN2201 is Intel Atom®Processor C Series,
	  C3338R which is one of the Denverton product families.
	  System equipped with Nvidia®Spectrum-1 32x100GbE Ethernet switch.

endif # MELLANOX_PLATFORM
