# 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
	depends on NET
	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 && I2C
	depends on ACPI || COMPILE_TEST
	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
